2

我在 python 中编写了一个 GUI 自动化脚本,它打开一个 Web 浏览器,在浏览器中进行一些测试,然后关闭浏览器。它在经过数十万次迭代的循环中执行此操作。

我遇到了程序挂起的问题,我无法打开浏览器实例,有时最多打开 20 个实例。我想创建一个错误检查以确保一次只打开一个浏览器实例(如果有许多实例打开,则完全终止浏览器并重新启动迭代和/或确保浏览器实例在通过之前打开循环的迭代)。

浏览器的 PID 显然会在循环的每次迭代中发生变化,据我所知,没有办法分配 PID。我想到的另一个解决方案是对终端进行系统调用,并以某种方式利用 tasklist 和 taskkill 命令,但仍然没有找到一种方法来做我想做的事。

任何建议将不胜感激!

更新:

我知道我可以按名称搜索 Windows 进程,但我如何将其放入布尔表达式中

if tasklist contains firefox.exe
    taskkill firefox.exe
else
    open firefox

第二次更新:

我有以下可以用 Ruby 编写的代码:

    if system('tasklist | find "firefox.exe"') == true
        a = 1
    elsif system('tasklist | find "firefox.exe"') == false
        a = 0
    end

我将如何在 Python 中完成此任务?

我一直在寻找的答案:

b = (str(os.system('tasklist | find "firefox.exe"')))
if b == '1':
    b = 'false'
elif b == '0':
    b = 'true'
print b
4

2 回答 2

2

我一直在做类似的事情

我想你可能想要 pywinauto

from pywinauto.findwindows import find_windows

find_windows(best_match='YOURWINDOWNAMEHERE')

如果 YOURWINDOWNAMEHERE 未打开,这将引发异常

编辑:实际上对于firefox或chrome,它只有在“YOURWINDOWNAMEHERE”是你所在的页面时才有效,例如这个页面是“python - 我如何以编程方式......”

如果找到它,它将返回一个 int,据我所知,这个 int 应该能够引用窗口。

例子:。

>>>find_windows(best_match="calculator")    #this gets an exception

# ::I manually open Calculator now ::

>>>find_windows(best_match="calculator")

[12345] #orwhatever process number it gets
于 2013-05-07T22:19:58.360 回答
1

我使用 taskill 使用 Java 中的窗口标题杀死 Android 记录器(logcat),如下所示:

taskkill /F /FI "WINDOWTITLE eq logcat"

和使用文件名的模拟器:

taskkill /F /IM emulator-arm.exe

应该在你的情况下工作。

于 2013-05-07T21:15:03.970 回答