> 技术文档 > Selenium 驱动问题?99% 的工程师都做错了这 1 件事!_driver = response.driver # 使用 seleniumrequest 提供的驱

Selenium 驱动问题?99% 的工程师都做错了这 1 件事!_driver = response.driver # 使用 seleniumrequest 提供的驱

凌晨两点,电脑屏幕的蓝光刺得眼睛发酸。第17次运行脚本,第17次看到那个刺眼的报错——“chromedriver版本不匹配”。

我盯着命令行里猩红的错误提示,突然笑出了声。三天前,我雄心壮志地翻开Selenium教程,幻想自己即将成为\"自动化测试大神\"。而现在,我的收藏夹里堆满了《Chromedriver版本对照表》《解决WebDriverException的100种方法》,浏览记录全是\"如何彻底卸载Chrome残留注册表\"。

最讽刺的是,当我把错误信息粘贴到技术交流群时,有人回复:“装个Docker啊”。那一刻我突然意识到:我明明只是想学怎么点个按钮,现在却在研究如何给浏览器造个子宫。

卸载Python时,弹窗问我\"确定要删除所有依赖项吗?“。我疯狂点击\"确定”,像在拆除一颗折磨我许久的炸弹。看着桌面上那个孤零零的\"Web自动化测试从入门到放弃.pdf\",我终于懂了:

有些课程真正的毕业设计,是教会你及时止损。

Selenium 驱动问题?99% 的工程师都做错了这 1 件事!_driver = response.driver # 使用 seleniumrequest 提供的驱

不要放弃!!!现在我来详细为你介绍Selenium与浏览器驱动的配置和使用方法。

1. Selenium与浏览器驱动的关系

Selenium需要通过浏览器驱动(WebDriver)来控制浏览器。每个浏览器都有对应的驱动程序

  • Chrome → ChromeDriver
  • Firefox → GeckoDriver
  • Edge → EdgeDriver
  • Safari → SafariDriver(Mac专用)

2. 如何确定浏览器版本

Chrome浏览器

# 方法1:通过命令行查看chrome --version# 或者google-chrome --version# 方法2:在浏览器中访问chrome://version/

Firefox浏览器

# 命令行查看firefox --version# 浏览器中查看about:support

Edge浏览器

# 命令行查看msedge --version# 浏览器中查看edge://version/

3. 驱动程序下载地址

ChromeDriver

  • 官方地址:https://chromedriver.chromium.org/
  • 新版本:https://chromedriver.chromium.org/downloads
  • 注意:Chrome 115+版本需要从新地址下载:https://googlechromelabs.github.io/chrome-for-testing/

GeckoDriver (Firefox)

  • GitHub地址:https://github.com/mozilla/geckodriver/releases

EdgeDriver

  • 官方地址:https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/

4. 驱动程序安装位置

有几种方式来管理驱动程序:

方式1:放在系统PATH中(推荐)

# Windows# 将驱动程序放在 C:\\Windows\\System32\\ 或其他PATH目录# Linux/Macsudo mv chromedriver /usr/local/bin/sudo chmod +x /usr/local/bin/chromedriver

方式2:项目目录中

project/├── drivers/│ ├── chromedriver.exe│ ├── geckodriver.exe│ └── msedgedriver.exe├── tests/└── main.py

方式3:使用webdriver-manager(强烈推荐)

pip install webdriver-manager

5. Python代码示例

传统方式(手动管理驱动)

from selenium import webdriverfrom selenium.webdriver.chrome.service import Service# 方式1:驱动在PATH中driver = webdriver.Chrome()# 方式2:指定驱动路径service = Service(\'drivers/chromedriver.exe\')driver = webdriver.Chrome(service=service)# Firefox示例from selenium.webdriver.firefox.service import Service as FirefoxServicefirefox_service = FirefoxService(\'drivers/geckodriver.exe\')driver = webdriver.Firefox(service=firefox_service)

使用webdriver-manager(推荐)

from selenium import webdriverfrom selenium.webdriver.chrome.service import Service as ChromeServicefrom selenium.webdriver.firefox.service import Service as FirefoxServicefrom selenium.webdriver.edge.service import Service as EdgeServicefrom webdriver_manager.chrome import ChromeDriverManagerfrom webdriver_manager.firefox import GeckoDriverManagerfrom webdriver_manager.microsoft import EdgeChromiumDriverManager# Chromedriver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))# Firefoxdriver = webdriver.Firefox(service=FirefoxService(GeckoDriverManager().install()))# Edgedriver = webdriver.Edge(service=EdgeService(EdgeChromiumDriverManager().install()))

6. 版本兼容性处理

版本对应关系检查

import subprocessimport requestsdef get_chrome_version(): \"\"\"获取Chrome版本\"\"\" try: result = subprocess.run([\'google-chrome\', \'--version\'], capture_output=True, text=True) version = result.stdout.strip().split()[-1] return version.split(\'.\')[0] # 返回主版本号 except: return Nonedef get_compatible_driver_version(chrome_version): \"\"\"获取兼容的驱动版本\"\"\" url = f\"https://chromedriver.storage.googleapis.com/LATEST_RELEASE_{chrome_version}\" try: response = requests.get(url) return response.text.strip() except: return None# 使用示例chrome_ver = get_chrome_version()driver_ver = get_compatible_driver_version(chrome_ver)print(f\"Chrome版本: {chrome_ver}\")print(f\"兼容的驱动版本: {driver_ver}\")

7. 处理浏览器版本过新的问题

解决方案1:使用webdriver-manager自动管理

from selenium import webdriverfrom selenium.webdriver.chrome.service import Servicefrom webdriver_manager.chrome import ChromeDriverManager# 自动下载匹配的驱动版本driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))

解决方案2:手动查找兼容版本

当遇到版本不匹配时:

  1. 降级浏览器:安装较老版本的浏览器
  2. 等待驱动更新:关注官方发布
  3. 使用开发版驱动
    # Chrome Canary对应的驱动https://chromedriver.storage.googleapis.com/index.html

解决方案3:使用Docker

FROM selenium/standalone-chrome:latest# 或FROM selenium/standalone-firefox:latest

8. 完整的配置检查脚本

import osimport subprocessimport sysfrom selenium import webdriverfrom selenium.webdriver.chrome.service import Servicefrom webdriver_manager.chrome import ChromeDriverManagerdef check_browser_installation(): \"\"\"检查浏览器安装情况\"\"\" browsers = { \'chrome\': [\'google-chrome\', \'--version\'], \'firefox\': [\'firefox\', \'--version\'], \'edge\': [\'msedge\', \'--version\'] } installed = {} for browser, cmd in browsers.items(): try: result = subprocess.run(cmd, capture_output=True, text=True) if result.returncode == 0: installed[browser] = result.stdout.strip() except FileNotFoundError: continue return installeddef test_selenium_setup(): \"\"\"测试Selenium配置\"\"\" try: # 使用webdriver-manager自动管理驱动 driver = webdriver.Chrome(service=Service(ChromeDriverManager().install())) driver.get(\"https://www.google.com\") print(\"✅ Selenium配置成功!\") driver.quit() return True except Exception as e: print(f\"❌ Selenium配置失败: {e}\") return Falseif __name__ == \"__main__\": print(\"🔍 检查浏览器安装情况...\") browsers = check_browser_installation() if browsers: for browser, version in browsers.items(): print(f\"✅ {browser}: {version}\") else: print(\"❌ 未找到已安装的浏览器\") print(\"\\n🧪 测试Selenium配置...\") test_selenium_setup()

9. 常见问题解决

问题1:驱动程序不在PATH中

# 解决方案:明确指定路径service = Service(\'/path/to/chromedriver\')driver = webdriver.Chrome(service=service)

问题2:权限问题(Linux/Mac)

chmod +x /path/to/chromedriver

问题3:版本不兼容

# 使用options禁用一些功能来兼容from selenium.webdriver.chrome.options import Optionsoptions = Options()options.add_argument(\'--disable-blink-features=AutomationControlled\')options.add_argument(\'--no-sandbox\')options.add_argument(\'--disable-dev-shm-usage\')driver = webdriver.Chrome(options=options, service=Service(ChromeDriverManager().install()))

总结

对于初学者,我强烈推荐使用webdriver-manager,它能自动处理驱动下载和版本匹配问题,大大简化了配置过程。这样你就可以专注于学习Selenium的核心功能,而不用花太多时间在环境配置上。