如何用一套Python代码兼容Chrome 114与116版本的Selenium测试?
兼容Chrome 114与116的Python Selenium代码实现
核心结论
可以用一套Python代码同时兼容Chrome 114和116版本,关键是让webdriver-manager适配新旧Chrome版本的驱动分发机制,同时配合Selenium 4.11.2的特性。
优化方案
1. 调整依赖版本
将webdriver-manager升级到4.0.1及以上版本(旧版4.0.0对Chrome 116+的新分发机制支持不完善),保持selenium==4.11.2不变。
2. 稳定适配的代码实现
基础自动适配版
利用webdriver-manager的自动版本匹配能力,同时指定官方Chrome类型并启用缓存,提升稳定性:
from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager from webdriver_manager.core.os_manager import ChromeType def init_chrome_driver(): # 通用Chrome配置(按需添加) options = Options() # options.add_argument("--disable-gpu") # options.add_argument("--headless=new") # 无头模式(可选) # 初始化驱动,适配新旧Chrome版本 driver = webdriver.Chrome( service=Service( ChromeDriverManager( chrome_type=ChromeType.GOOGLE, # 明确针对官方Chrome,而非Chromium cache_valid_range=7 # 缓存驱动7天,避免重复下载 ).install() ), options=options ) return driver # 使用示例 if __name__ == "__main__": driver = init_chrome_driver() driver.get("https://example.com") print(driver.title) driver.quit()
带降级逻辑的增强版
如果自动匹配偶尔失败,添加手动指定主版本的降级逻辑,确保兼容性:
from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager from webdriver_manager.core.os_manager import ChromeType from webdriver_manager.core.utils import ChromeVersion def get_chrome_main_version(): # 获取本地Chrome的主版本号(如114、116) chrome_version = ChromeVersion().get_browser_version(chrome_type=ChromeType.GOOGLE) return chrome_version.split(".")[0] def init_chrome_driver(): options = Options() chrome_main_ver = get_chrome_main_version() try: # 优先尝试自动匹配 driver = webdriver.Chrome( service=Service( ChromeDriverManager( chrome_type=ChromeType.GOOGLE, cache_valid_range=7 ).install() ), options=options ) except Exception: # 自动匹配失败时,手动指定主版本下载对应驱动 driver = webdriver.Chrome( service=Service( ChromeDriverManager( chrome_type=ChromeType.GOOGLE, version=chrome_main_ver, cache_valid_range=7 ).install() ), options=options ) return driver # 使用示例 if __name__ == "__main__": driver = init_chrome_driver() driver.get("https://example.com") print(driver.title) driver.quit()
关键注意事项
- 如果本地安装了多个Chrome版本,需通过
options.binary_location指定具体Chrome二进制路径,避免版本识别错误:# Windows示例 options.binary_location = "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe" # macOS示例 options.binary_location = "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" - 确保系统环境变量中Chrome的路径正确,
webdriver-manager会自动检测默认安装路径。
内容的提问来源于stack exchange,提问作者A Ahmed
相关产品推荐
相关产品推荐

