Selenium 4.12离线模式下使用本地ChromeDriver的配置及报错解决
问题描述
- 需求:在无网络连接的服务器上运行Python版Selenium代码,通过指定本地驱动路径实现离线使用Selenium驱动管理器。
- 尝试代码:
# Line#1 print(config().get_chromexecutable_path()) # Line#2 service = ChromeService(executable_path=config().get_chromexecutable_path()) # Line#3 driver = webdriver.Chrome(service=service, options=options) - 问题:Line#1能正确输出路径“drivers/chromedriver”,但运行时抛出
NoSuchDriverException错误,错误相关代码及信息如下:
@staticmethod def get_path(service: Service, options: BaseOptions) -> str: path = service.path try: path = SeleniumManager().driver_location(options) if path is None else path except Exception as err: msg = f"无法使用Selenium Manager获取{options.capabilities['browserName']}对应的驱动程序。" raise NoSuchDriverException(msg) from err if path is None or not Path(path).is_file():
raise NoSuchDriverException(f"无法定位或获取{options.capabilities['browserName']}对应的驱动程序")
错误详情:
E selenium.common.exceptions.NoSuchDriverException: Message: 无法定位或获取Chrome驱动程序 venv\Lib\site-packages\selenium\webdriver\common\driver_finder.py:44: NoSuchDriverException
解决方案
核心原因是Selenium 4.x默认优先调用Selenium Manager在线拉取驱动,离线环境下该请求失败后,若指定的本地驱动路径存在解析错误、权限不足或版本不匹配等问题,就会触发该异常。可通过以下方式解决:
使用绝对路径指定驱动
相对路径易受工作目录影响导致解析错误,改用绝对路径:import os # 获取脚本所在目录的绝对路径 script_dir = os.path.dirname(os.path.abspath(__file__)) # 拼接驱动绝对路径 driver_path = os.path.join(script_dir, "drivers", "chromedriver") service = ChromeService(executable_path=driver_path) driver = webdriver.Chrome(service=service, options=options)禁用Selenium Manager自动获取
通过环境变量强制跳过Selenium Manager,直接使用指定的本地驱动:import os os.environ['SE_SKIP_MANAGER'] = '1' service = ChromeService(executable_path=config().get_chromexecutable_path()) driver = webdriver.Chrome(service=service, options=options)检查驱动文件有效性
- 确认
drivers/chromedriver是可执行文件(Linux/macOS需执行chmod +x drivers/chromedriver赋予权限) - 确认驱动版本与服务器上Chrome浏览器的主版本号完全匹配(如Chrome 114需对应chromedriver 114.x)
- 确认
内容的提问来源于stack exchange,提问作者vishsh
相关产品推荐
相关产品推荐

