如何从Python Selenium Firefox WebDriver获取geckodriver版本?

4
我正在尝试编写一些防御性代码,以防止某人在安装旧版本的geckodriver时执行脚本。但是我无法从webdriver对象中获取geckodriver版本。最接近的是driver.capabilities,其中包含Firefox浏览器版本,但不包括geckodriver版本。
from selenium import webdriver
driver = webdriver.Firefox()
pprint(driver.capabilities)

输出:

{'acceptInsecureCerts': True,
 'browserName': 'firefox',
 'browserVersion': '60.0',
 'moz:accessibilityChecks': False,
 'moz:headless': False,
 'moz:processID': 18584,
 'moz:profile': '/var/folders/qz/0dsxssjd1133p_y44qbdszn00000gp/T/rust_mozprofile.GsKFWZ9kFgMT',
 'moz:useNonSpecCompliantPointerOrigin': False,
 'moz:webdriverClick': True,
 'pageLoadStrategy': 'normal',
 'platformName': 'darwin',
 'platformVersion': '17.5.0',
 'rotatable': False,
 'timeouts': {'implicit': 0, 'pageLoad': 300000, 'script': 30000}}

浏览器版本和geckodriver版本是否直接相关?如果不是,我该如何从Python中检查geckodriver版本?

2个回答

5

在Python绑定中没有获取geckodriver版本的方法,您需要自己实现,我的第一个选择是subprocess

# Mind the encoding, it must match your system's
output = subprocess.run(['geckodriver', '-V'], stdout=subprocess.PIPE, encoding='utf-8')
version = output.stdout.splitlines()[0].split()[-1]

我猜测缺少这种方法是因为它没有在W3C的webdriver规范中指定,因此geckodriver端没有实现通过JSON Wire协议查询版本的方法。 - Dalvenjia
1
日志文件中出现的版本 geckodriver INFO geckodriver 0.19.1,也许可以从这里找到一些线索? - PRMoureu

4

看起来在2018年末添加了moz:geckodriverVersion到capabilities中。

driverversion = driver.capabilities['moz:geckodriverVersion']
browserversion = driver.capabilities['browserVersion']

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接