Selenium 驱动问题?99% 的工程师都做错了这 1 件事!_driver = response.driver # 使用 seleniumrequest 提供的驱
凌晨两点,电脑屏幕的蓝光刺得眼睛发酸。第17次运行脚本,第17次看到那个刺眼的报错——“chromedriver版本不匹配”。
我盯着命令行里猩红的错误提示,突然笑出了声。三天前,我雄心壮志地翻开Selenium教程,幻想自己即将成为\"自动化测试大神\"。而现在,我的收藏夹里堆满了《Chromedriver版本对照表》《解决WebDriverException的100种方法》,浏览记录全是\"如何彻底卸载Chrome残留注册表\"。
最讽刺的是,当我把错误信息粘贴到技术交流群时,有人回复:“装个Docker啊”。那一刻我突然意识到:我明明只是想学怎么点个按钮,现在却在研究如何给浏览器造个子宫。
卸载Python时,弹窗问我\"确定要删除所有依赖项吗?“。我疯狂点击\"确定”,像在拆除一颗折磨我许久的炸弹。看着桌面上那个孤零零的\"Web自动化测试从入门到放弃.pdf\",我终于懂了:
有些课程真正的毕业设计,是教会你及时止损。
不要放弃!!!现在我来详细为你介绍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:手动查找兼容版本
当遇到版本不匹配时:
- 降级浏览器:安装较老版本的浏览器
- 等待驱动更新:关注官方发布
- 使用开发版驱动:
# 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的核心功能,而不用花太多时间在环境配置上。