在Jupyter/Colab中运行Selenium WebDriver代码遇Chrome二进制文件找不到错误求助
解决Colab/Jupyter中Selenium ChromeDriver启动失败问题
问题重现
在Colab/Jupyter中执行以下Selenium代码:
import time !pip install selenium from selenium import webdriver driver = webdriver.Chrome('D:\\Drivers\\chromedriver_win32') driver.get('http://www.google.com/'); time.sleep(5) search_box = driver.find_element_by_name('q') search_box.send_keys('ChromeDriver') search_box.submit() time.sleep(5) driver.quit()
运行后出现核心错误:
DeprecationWarning: executable_path has been deprecated, please pass in a Service object WebDriverException: Message: unknown error: cannot find Chrome binary
用户已确认Chrome、Selenium及WebDriver版本匹配,手动运行Windows版chromedriver会挂起,尝试常规方案无效,疑惑路径、版本或配置顺序是否存在问题。
核心问题分析
- 环境不兼容:Colab运行在Linux虚拟机中,代码使用Windows系统的chromedriver路径(
D:\\Drivers\\...),完全不适配。 - Chrome浏览器缺失:Colab默认未安装Chrome,驱动无法找到对应浏览器二进制文件。
- API弃用:Selenium 4+不再支持直接传入驱动路径,必须使用
Service类配置驱动。
分步解决方案
针对Colab环境(Linux)
1. 安装Chrome浏览器及对应驱动
执行以下命令完成环境部署:
!apt-get update !apt-get install -y chromium-browser !apt-get install -y chromium-chromedriver
2. 修正后的Selenium代码
import time from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import By # 配置Chrome选项适配Colab无图形界面环境 chrome_options = webdriver.ChromeOptions() chrome_options.add_argument('--headless') # 启用无头模式(必须) chrome_options.add_argument('--no-sandbox') # 绕过安全沙箱 chrome_options.add_argument('--disable-dev-shm-usage') # 解决临时文件内存不足问题 chrome_options.binary_location = '/usr/bin/chromium-browser' # 指定Chrome二进制文件路径 # 使用Service类配置驱动路径 service = Service('/usr/lib/chromium-browser/chromedriver') driver = webdriver.Chrome(service=service, options=chrome_options) driver.get('http://www.google.com/') time.sleep(2) # Selenium 4+需使用By类定位元素,替代旧的find_element_by_name方法 search_box = driver.find_element(By.NAME, 'q') search_box.send_keys('ChromeDriver') search_box.submit() time.sleep(2) driver.quit()
针对本地Windows的Jupyter环境
1. 修正驱动路径
确保路径指向chromedriver.exe可执行文件(而非文件夹),例如:D:\\Drivers\\chromedriver_win32\\chromedriver.exe
2. 适配Selenium 4+ API
import time from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import By # 使用Service类配置驱动 service = Service('D:\\Drivers\\chromedriver_win32\\chromedriver.exe') driver = webdriver.Chrome(service=service) driver.get('http://www.google.com/') time.sleep(5) search_box = driver.find_element(By.NAME, 'q') search_box.send_keys('ChromeDriver') search_box.submit() time.sleep(5) driver.quit()
关键注意事项
- 环境适配:不同操作系统需使用对应版本的Chrome和chromedriver,跨环境运行时不能混用。
- 无头模式:无图形界面的环境(如Colab、服务器)必须启用
--headless参数,否则无法启动Chrome。 - API更新:Selenium 4.x已彻底移除
find_element_by_*系列方法,统一使用find_element(By.XXX, 定位值)语法。
内容的提问来源于stack exchange,提问作者Eugene
相关产品推荐
相关产品推荐

