我在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
答案 0 :(得分: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
答案 1 :(得分:1)
我使用taskill来使用Java中的窗口标题杀死Android记录器(logcat),如下所示:
taskkill /F /FI "WINDOWTITLE eq logcat"
和使用文件名的模拟器:
taskkill /F /IM emulator-arm.exe
应该适用于你的情况。