Python Selenium:如何检查 WebDriver 是否退出()?

新手上路,请多包涵

我想控制我的 WebDriver 是否退出但我找不到方法。 ( 似乎在Java中有一种方法可以做到

 from selenium import webdriver
driver = webdriver.Firefox()
driver.quit()
driver # <selenium.webdriver.firefox.webdriver.WebDriver object at 0x108424850>
driver is None # False

我还探索了 WebDriver 的属性,但我找不到任何特定方法来获取有关驱动程序状态的信息。同时检查会话 ID:

 driver.session_id # u'7c171019-b24d-5a4d-84ef-9612856af71b'

原文由 CptNemo 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

如果您探索 python-selenium 驱动程序的源代码,您会看到 firefox 驱动程序的 quit() 方法 在做什么:

 def quit(self):
    """Quits the driver and close every associated window."""
    try:
        RemoteWebDriver.quit(self)
    except (http_client.BadStatusLine, socket.error):
        # Happens if Firefox shutsdown before we've read the response from
        # the socket.
        pass
    self.binary.kill()
    try:
        shutil.rmtree(self.profile.path)
        if self.profile.tempfolder is not None:
            shutil.rmtree(self.profile.tempfolder)
    except Exception as e:
        print(str(e))

您可以在这里依赖一些东西:检查 profile.path 是否存在或检查 binary.process 状态。它可以工作,但您还可以看到只有“外部调用”并且 python 端没有任何变化 可以帮助您指示 quit() 被调用。

换句话说,您需要进行外部调用以检查 _状态_:

 >>> from selenium.webdriver.remote.command import Command
>>> driver.execute(Command.STATUS)
{u'status': 0, u'name': u'getStatus', u'value': {u'os': {u'version': u'unknown', u'arch': u'x86_64', u'name': u'Darwin'}, u'build': {u'time': u'unknown', u'version': u'unknown', u'revision': u'unknown'}}}
>>> driver.quit()
>>> driver.execute(Command.STATUS)
Traceback (most recent call last):
...
socket.error: [Errno 61] Connection refused

您可以将其放在 try/except 下,并创建一个可重用的函数:

 import httplib
import socket

from selenium.webdriver.remote.command import Command

def get_status(driver):
    try:
        driver.execute(Command.STATUS)
        return "Alive"
    except (socket.error, httplib.CannotSendRequest):
        return "Dead"

用法:

 >>> driver = webdriver.Firefox()
>>> get_status(driver)
'Alive'
>>> driver.quit()
>>> get_status(driver)
'Dead'

另一种方法是 制作自定义 Firefox webdriver 并将 session_id 设置为 Nonequit() 中:

 class MyFirefox(webdriver.Firefox):
    def quit(self):
        webdriver.Firefox.quit(self)
        self.session_id = None

然后,您可以简单地检查 session_id 值:

 >>> driver = MyFirefox()
>>> print driver.session_id
u'69fe0923-0ba1-ee46-8293-2f849c932f43'
>>> driver.quit()
>>> print driver.session_id
None

原文由 alecxe 发布,翻译遵循 CC BY-SA 3.0 许可协议

我遇到了同样的问题并尝试返回标题 - 使用 chromedriver 这对我有用……

 from selenium.common.exceptions import WebDriverException

try:
    driver.title
    print(True)
except WebDriverException:
    print(False)

原文由 Freshman 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题