【问题标题】: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 的实例是否处于活动状态?

【问题讨论】:

    标签: python selenium


    【解决方案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) 将抛出异常。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-08
        • 2013-01-04
        • 2014-09-23
        • 2011-05-16
        • 1970-01-01
        • 1970-01-01
        • 2015-01-15
        • 1970-01-01
        相关资源
        最近更新 更多