您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

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

如果您探索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_idNonein quit()

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
python 2022/1/1 18:24:13 有155人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶