如何以编程方式检查Windows计算机上的打开浏览器实例?

时间:2013-05-07 21:09:36

标签: python ruby windows browser automation

我在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

2 个答案:

答案 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

应该适用于你的情况。