在 Python 中,如何检查 Selenium WebDriver 是不是已退出?

Posted

技术标签:

【中文标题】在 Python 中,如何检查 Selenium WebDriver 是不是已退出?【英文标题】:In Python, how to check if Selenium WebDriver has quit or not?在 Python 中,如何检查 Selenium WebDriver 是否已退出? 【发布时间】:2018-03-19 01:59:31 【问题描述】:

以下是示例代码:

from selenium import webdriver

driver = webdriver.Firefox()

(这里由于某种原因关闭了窗口)

driver.quit()

Traceback(最近一次调用最后一次):文件“”,第 1 行,in 文件 “/usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/webdriver.py”, 第 183 行,退出 RemoteWebDriver.quit(self) 文件“/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py”, 第 592 行,退出 self.execute(Command.QUIT)文件“/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py”, 第 297 行,执行中 self.error_handler.check_response(response) 文件 "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/errorhandler.py", 第 194 行,在 check_response 中 raise exception_class(message, screen, stacktrace) selenium.common.exceptions.WebDriverException: Message: 试图运行 命令而不建立连接

有什么方法可以检查 webdriver 的实例是否处于活动状态?

【问题讨论】:

【参考方案1】:

你可以使用类似这样的东西,它使用 psutil

from selenium import webdriver
import psutil

driver = webdriver.Firefox()

driver.get("http://tarunlalwani.com")

driver_process = psutil.Process(driver.service.process.pid)

if driver_process.is_running():
    print ("driver is running")

    firefox_process = driver_process.children()
    if firefox_process:
        firefox_process = firefox_process[0]

        if firefox_process.is_running():
            print("Firefox is still running, we can quit")
            driver.quit()
        else:
            print("Firefox is dead, can't quit. Let's kill the driver")
            firefox_process.kill()
    else:
        print("driver has died")

【讨论】:

这是一个很好的答案,除了在服务已经死掉(无论出于何种原因)并且它留下一个孤立的浏览器运行的情况下它无法关闭浏览器。 @CoreyGoldberg,你的意思是壁虎驱动本身死了吗?这仅在您在创建驱动程序后立即捕获 PID 时才有效,并且如果您无法捕获相同的内容,则无论如何都不必杀死它。唯一的其他选择是杀死所有firefox.exe,这可能不是杀死的好方法【参考方案2】:

是 Pythonic... 如果异常失败,请尝试退出并捕获异常。

try:
    driver.quit()
except WebDriverException:
    pass

【讨论】:

【参考方案3】:

这是我发现并喜欢的:

def setup(self):
    self.wd = webdriver.Firefox()

def teardown(self):
    # self.wd.service.process == None if quit already.
    if self.wd.service.process != None:
        self.wd.quit()

注意:如果驱动程序已经退出,driver_process=psutil.Process(driver.service.process.pid) 将抛出异常。

【讨论】:

以上是关于在 Python 中,如何检查 Selenium WebDriver 是不是已退出?的主要内容,如果未能解决你的问题,请参考以下文章

Python + Selenium - 如何检查使用 CSS 设置样式并显示为内容的图像?

如何检查 Selenium Python 中是不是选中/取消选中复选框? [复制]

使用 Selenium 和 Python,如何检查按钮是不是仍然可点击?

如何在 python 中正确关闭 Selenium WebDriver 实例?

如何检查元素并找到正确的元素?我正在使用 Python 和 Selenium

python selenium+ie 如何定位js生成的元素?