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

Python 如何以编程方式检查Windows计算机上打开的浏览器实例?,python,ruby,windows,browser,automation,Python,Ruby,Windows,Browser,Automation,我用python编写了一个GUI自动化脚本,它打开一个web浏览器,在浏览器中进行一些测试,然后关闭浏览器。它是在一个循环中完成的,这个循环经过数十万次迭代 我遇到了程序挂起的问题,我没有打开任何浏览器实例,有时最多打开20个实例。 我想创建一个错误检查,以确保一次只打开一个浏览器实例(如果有多个实例打开,则完全关闭浏览器并重新启动迭代,和/或在循环迭代之前确保浏览器实例打开) 浏览器的PID在循环的每次迭代中都会发生明显的变化,据我所知,没有办法分配PID。 我想到的另一个解决方案是对终端进行

我用python编写了一个GUI自动化脚本,它打开一个web浏览器,在浏览器中进行一些测试,然后关闭浏览器。它是在一个循环中完成的,这个循环经过数十万次迭代

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

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

如有任何建议,将不胜感激

更新:

b = (str(os.system('tasklist | find "firefox.exe"')))
if b == '1':
    b = 'false'
elif b == '0':
    b = 'true'
print b
我知道我可以按名称搜索windows进程,但如何将其转换为布尔表达式,如

if tasklist contains firefox.exe
    taskkill firefox.exe
else
    open firefox
第二次更新:

b = (str(os.system('tasklist | find "firefox.exe"')))
if b == '1':
    b = 'false'
elif b == '0':
    b = 'true'
print b
我有以下几点可以用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

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

taskkill /F /FI "WINDOWTITLE eq logcat"
和使用文件名的仿真器:

taskkill /F /IM emulator-arm.exe

应该适合你的情况。

我也做过类似的事情

我想你可能想要pywinauto

from pywinauto.findwindows import find_windows

find_windows(best_match='YOURWINDOWNAMEHERE')
如果您的WindowName此处未打开,这将引发异常

编辑:实际上,对于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

在windows中,您可以按名称获取进程,这将对您有所帮助。