Chrome 130 驱动未检测问题终极解决方案
2024-12-16 12:38:28
Chrome 130 驱动未检测问题及解决方案
Chrome浏览器版本升级至130后,许多开发者在使用Selenium和ChromeDriver时遇到了驱动未检测的问题,具体表现为程序抛出 TimeoutException
异常。 本文将深入分析此问题产生的原因,并提供多种解决方案。
问题分析
Chrome浏览器每次更新都可能导致ChromeDriver兼容性问题。当Chrome版本升级后,旧版本的ChromeDriver可能无法正常工作,导致Selenium无法启动或控制浏览器。 130版本带来的安全特性更新可能更加严格,导致以往的规避检测方法失效。
undetected-chromedriver
库旨在绕过浏览器的一些反爬虫机制,让自动化工具更难被识别。但Chrome浏览器更新后,其内部的指纹识别机制可能也发生了改变,导致 undetected-chromedriver
的某些规避策略失效。
从问题的代码片段来看,使用标准ChromeDriver可以正常工作,而使用 sbDriver
(可能是 SeleniumBase 的封装) 和 uc_cdp=True
(启用undetected-chromedriver的CDP功能) 时出现问题,进一步佐证了 undetected-chromedriver
与 Chrome 130 存在兼容性问题。
解决方案
1. 更新 ChromeDriver
确保使用的ChromeDriver版本与Chrome浏览器版本匹配是解决兼容性问题的首要步骤。
-
操作步骤:
- 查看Chrome浏览器版本。在地址栏输入
chrome://version
并回车,可以找到具体的版本号。 - 访问 ChromeDriver 官方下载页面: https://chromedriver.chromium.org/downloads
- 下载与Chrome浏览器版本号对应的ChromeDriver版本。
- 将下载好的 ChromeDriver 可执行文件放到系统 PATH 环境变量包含的目录下,或者在代码中指定ChromeDriver的路径。
- 查看Chrome浏览器版本。在地址栏输入
-
代码示例 (指定ChromeDriver路径):
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
# ChromeDriver 路径
chromedriver_path = "/path/to/chromedriver" # 替换为你的 ChromeDriver 路径
service = Service(chromedriver_path)
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)
# ... 后续操作代码 ...
2. 使用 WebDriver Manager 自动管理驱动
WebDriver Manager 可以自动下载、更新和管理浏览器驱动,免去手动下载和配置的麻烦。
-
操作步骤:
- 安装 WebDriver Manager:
pip install webdriver-manager
- 在代码中引入并使用 WebDriver Manager。
- 安装 WebDriver Manager:
-
代码示例:
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
service = Service(ChromeDriverManager().install())
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)
# ... 后续操作代码 ...
3. 临时禁用 Undetected Chromedriver 的CDP功能
如果 undetected-chromedriver
与 Chrome 130 存在冲突,可以尝试禁用其 CDP (Chrome DevTools Protocol) 功能,看是否能够解决问题。 这可能降低隐匿性,但能快速验证是否为CDP相关问题。
-
操作步骤:
在初始化sbDriver
或类似方法时,设置uc_cdp=False
。 -
代码示例:
from seleniumbase import Driver
options = webdriver.ChromeOptions()
# 添加一些实验选项,可能有助于规避检测
options.add_experimental_option('excludeSwitches', ['enable-automation'])
options.add_experimental_option('useAutomationExtension', False)
driver = Driver(uc_cdp=False, options=options)
# ... 后续操作代码 ...
4. 尝试其他规避检测的库
除了 undetected-chromedriver
外,还有一些其他的库也致力于解决浏览器驱动检测问题,可以尝试使用这些库。例如,selenium-stealth
。
-
操作步骤:
- 安装 selenium-stealth:
pip install selenium-stealth
- 在代码中应用 selenium-stealth。
- 安装 selenium-stealth:
-
代码示例:
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium_stealth import stealth
options = webdriver.ChromeOptions()
service = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service, options=options)
stealth(driver,
languages=["en-US", "en"],
vendor="Google Inc.",
platform="Win32",
webgl_vendor="Intel Inc.",
renderer="Intel Iris OpenGL Engine",
fix_hairline=True,
)
# ... 后续操作代码 ...
5. 手动添加规避检测选项
可以尝试在ChromeOptions中手动添加一些参数来规避检测。这些参数的作用是修改浏览器的特征,使其更像正常用户。
-
操作步骤:
在初始化
ChromeOptions
时,添加一些实验性的参数。 -
代码示例:
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
options = webdriver.ChromeOptions()
# 规避常见检测
options.add_argument("--disable-blink-features=AutomationControlled")
options.add_argument("--disable-infobars")
options.add_argument("--disable-web-security")
options.add_argument("--no-sandbox")
options.add_argument("--start-maximized")
options.add_argument("--disable-dev-shm-usage")
service = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service, options=options)
# ... 后续操作代码 ...
6. 回退到 Chrome 的稳定版本
如果以上方法都无法解决问题,且时间紧急,可以考虑暂时回退到较旧的 Chrome 稳定版本,并使用对应的 ChromeDriver。
- 操作步骤:
- 卸载当前 Chrome 浏览器。
- 下载并安装较旧的 Chrome 稳定版本。
- 下载并配置与该版本 Chrome 对应的 ChromeDriver。
注意: 回退到旧版本浏览器可能存在安全风险,应谨慎考虑。 这只是一种临时解决方案,最终仍应寻求与最新 Chrome 版本兼容的驱动和规避检测方法。
持续关注和更新
Chrome 浏览器和 ChromeDriver 会持续更新,规避检测的技术也需要不断进步。 建议持续关注相关开源项目和社区的动态,及时更新 ChromeDriver 和依赖库,并调整代码以应对新的变化。 同时,应积极参与社区讨论,反馈问题,共同推进自动化技术的进步。
相关资源链接
- ChromeDriver 下载: https://chromedriver.chromium.org/downloads
- WebDriver Manager GitHub: https://github.com/SergeyPirogov/webdriver_manager
- Undetected ChromeDriver GitHub: https://github.com/ultrafunkamsterdam/undetected-chromedriver
- Selenium Stealth GitHub: https://github.com/diprajpatra/selenium-stealth
- Selenium 官方文档: https://www.selenium.dev/documentation/
- SeleniumBase 官方文档: https://seleniumbase.io/