Databricks中Chrome/Firefox WebDriver异常问题求助
解决Databricks集群中Selenium的WebDriver异常问题
Chrome方案修复
原问题核心原因
你的Chrome代码存在两个致命问题:
binary_location错误指向了chromedriver,而非Chrome浏览器的二进制文件- 无头模式下缺少适配集群环境的必要参数,导致无法创建DevToolsActivePort文件
修正后的代码
from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager # 配置Chrome无头模式及集群适配参数 chrome_options = Options() chrome_options.add_argument("--headless=new") # 新版无头模式,兼容性更强 chrome_options.add_argument("--no-sandbox") # 禁用沙箱,适配Databricks集群的受限环境 chrome_options.add_argument("--disable-dev-shm-usage") # 避免/dev/shm空间不足导致崩溃 chrome_options.add_argument("--remote-debugging-port=9222") # 强制指定调试端口,解决DevToolsActivePort缺失问题 chrome_options.binary_location = "/usr/bin/google-chrome" # 指向Chrome浏览器二进制文件(Databricks默认路径,可通过`%sh which google-chrome`确认) # 使用Service对象管理驱动,自动匹配版本 service = Service(ChromeDriverManager().install()) driver = webdriver.Chrome(service=service, options=chrome_options) print(driver.service.process.path) driver.quit() # 务必关闭驱动释放集群资源
关键修复说明
- 修正
binary_location路径为Chrome浏览器的实际位置,而非chromedriver - 添加
--no-sandbox和--disable-dev-shm-usage适配集群的安全限制与资源环境 - 用
WebDriverManager自动同步Chrome与chromedriver版本,彻底避免版本不兼容问题
Firefox方案修复
原问题核心原因
你的Firefox代码问题:
- geckodriver版本过旧(v0.24.0),与新版Firefox完全不兼容
- 仍在使用已弃用的
executable_path参数 - 缺少集群环境必需的适配参数
修正后的步骤与代码
1. 安装兼容版本的Firefox和geckodriver
# 更新系统源并安装最新稳定版Firefox sudo apt update && sudo apt install -y firefox # 下载与当前Firefox兼容的geckodriver(示例为v0.33.0,适配Firefox 115+,可根据`%sh firefox --version`调整) wget https://github.com/mozilla/geckodriver/releases/download/v0.33.0/geckodriver-v0.33.0-linux64.tar.gz -O /tmp/geckodriver.tar.gz tar -xzf /tmp/geckodriver.tar.gz -C /tmp chmod +x /tmp/geckodriver # 赋予驱动执行权限
2. 修正后的Python代码
from selenium import webdriver from selenium.webdriver.firefox.options import Options from selenium.webdriver.firefox.service import Service # 配置Firefox无头模式及集群适配参数 firefox_options = Options() firefox_options.add_argument("--headless") firefox_options.add_argument("--no-sandbox") firefox_options.add_argument("--disable-dev-shm-usage") # 使用Service对象管理驱动,替代已弃用的executable_path service = Service(executable_path="/tmp/geckodriver") driver = webdriver.Firefox(service=service, options=firefox_options) # 测试示例 print(driver.title) driver.quit()
关键修复说明
- 升级geckodriver到与Firefox匹配的版本,版本对应关系可通过geckodriver官方说明确认
- 用
Service对象替代executable_path,消除弃用警告同时规范驱动管理 - 添加集群环境必需的参数,避免权限或资源不足导致的驱动崩溃
内容的提问来源于stack exchange,提问作者Alia
相关产品推荐
相关产品推荐

