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

Cpt*_*emo 7 python selenium 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
Run Code Online (Sandbox Code Playgroud)

我也探讨了属性,WebDriver但我找不到任何具体方法来获取有关驱动程序状态的信息.还要检查会话ID:

driver.session_id # u'7c171019-b24d-5a4d-84ef-9612856af71b'
Run Code Online (Sandbox Code Playgroud)

ale*_*cxe 9

如果你要探索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))
Run Code Online (Sandbox Code Playgroud)

这里有一些你可以信赖的东西:检查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
Run Code Online (Sandbox Code Playgroud)

你可以把它放在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"
Run Code Online (Sandbox Code Playgroud)

用法:

>>> driver = webdriver.Firefox()
>>> get_status(driver)
'Alive'
>>> driver.quit()
>>> get_status(driver)
'Dead'
Run Code Online (Sandbox Code Playgroud)

另一种方法是使您的自定义Firefox的webdriver的,并设置session_idNonequit():

class MyFirefox(webdriver.Firefox):
    def quit(self):
        webdriver.Firefox.quit(self)
        self.session_id = None
Run Code Online (Sandbox Code Playgroud)

然后,您只需检查session_id值:

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


小智 8

这对我来说工作:

from selenium import webdriver

driver = webdriver.Chrome()
print( driver.service.is_connectable()) # print True

driver.quit()
print( driver.service.is_connectable()) # print False
Run Code Online (Sandbox Code Playgroud)


小智 7

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

from selenium.common.exceptions import WebDriverException

try:
    driver.title
    print(True)
except WebDriverException:
    print(False)
Run Code Online (Sandbox Code Playgroud)