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)
如果你要探索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_id
到None
中quit()
:
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)
归档时间: |
|
查看次数: |
10264 次 |
最近记录: |