Selenium ChromeDriver误识别Chrome为旧版本导致会话创建失败
问题根本原因
- 版本自动降级:手动安装Google官方102版Chrome后执行
apt upgrade时,若系统默认软件源中Chrome/Chromium包的优先级高于Google官方源,会自动将高版本Chrome替换为源内的95.0.4638.54旧版本。之前执行版本校验时如果在普通用户环境下运行,可能因PATH优先级差异读到了其他路径残留的102版文件,而root环境运行代码时命中了系统降级后的95版二进制,导致结果不一致。 - 多版本残留冲突:之前卸载Chrome时未清理干净旧版本二进制、软链接,导致
/usr/bin/google-chrome-stable路径实际指向残留的95版文件,命令行调用时命中了其他路径下的102版,造成版本校验结果失真。 - 虚拟化环境路径映射异常:如果在Docker、LXC等虚拟化环境中运行,基础镜像自带的95版Chromium可能被软链接冒用Chrome的二进制路径,加上
--no-sandbox参数下旧版headless模式的路径识别bug,会导致Selenium读到错误的版本信息。
解决步骤
- 彻底清理所有Chrome/Chromium相关残留文件,避免多版本冲突:
apt purge -y google-chrome-stable chromium chromium-browser chromedriver rm -rf /usr/bin/google-chrome* /opt/google/chrome* ~/.config/google-chrome /root/.config/google-chrome
- 配置软件源优先级,禁止后续升级自动降级Chrome版本:
echo "Package: google-chrome-stable Pin: origin dl.google.com Pin-Priority: 1001" > /etc/apt/preferences.d/google-chrome
- 重新安装官方稳定版Chrome:
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb apt install -y ./google-chrome-stable_current_amd64.deb
- 以root身份校验二进制实际版本和路径(代码默认在root下运行,必须用root身份校验):
sudo su /usr/bin/google-chrome-stable --version which google-chrome-stable
确认输出版本为刚安装的官方版本,且which命令返回路径为/usr/bin/google-chrome-stable,无其他同名二进制干扰。
5. 清理WebDriver Manager旧缓存,避免拉取到不匹配的历史驱动:
rm -rf /root/.wdm
- 调整Selenium初始化代码,删除硬编码的二进制路径(或手动填入上一步
which返回的绝对路径),使用新版headless模式提升兼容性:
from selenium import webdriver from selenium.webdriver import Chrome from webdriver_manager.chrome import ChromeDriverManager chrome_options = webdriver.ChromeOptions() chrome_options.add_argument('--remote-debugging-port=9222') chrome_options.add_argument('--no-sandbox') chrome_options.add_argument('--headless=new') chrome_options.add_argument('--disable-dev-shm-usage') ddriver = Chrome(ChromeDriverManager().install(), options=chrome_options)
内容的提问来源于stack exchange,提问作者Kevin Atlas
相关产品推荐
相关产品推荐

