返回

Chrome 130 驱动未检测问题终极解决方案

python

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浏览器版本匹配是解决兼容性问题的首要步骤。

  • 操作步骤:

    1. 查看Chrome浏览器版本。在地址栏输入 chrome://version 并回车,可以找到具体的版本号。
    2. 访问 ChromeDriver 官方下载页面: https://chromedriver.chromium.org/downloads
    3. 下载与Chrome浏览器版本号对应的ChromeDriver版本。
    4. 将下载好的 ChromeDriver 可执行文件放到系统 PATH 环境变量包含的目录下,或者在代码中指定ChromeDriver的路径。
  • 代码示例 (指定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 可以自动下载、更新和管理浏览器驱动,免去手动下载和配置的麻烦。

  • 操作步骤:

    1. 安装 WebDriver Manager: pip install webdriver-manager
    2. 在代码中引入并使用 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

  • 操作步骤:

    1. 安装 selenium-stealth: pip install selenium-stealth
    2. 在代码中应用 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。

  • 操作步骤:
    1. 卸载当前 Chrome 浏览器。
    2. 下载并安装较旧的 Chrome 稳定版本。
    3. 下载并配置与该版本 Chrome 对应的 ChromeDriver。

注意: 回退到旧版本浏览器可能存在安全风险,应谨慎考虑。 这只是一种临时解决方案,最终仍应寻求与最新 Chrome 版本兼容的驱动和规避检测方法。

持续关注和更新

Chrome 浏览器和 ChromeDriver 会持续更新,规避检测的技术也需要不断进步。 建议持续关注相关开源项目和社区的动态,及时更新 ChromeDriver 和依赖库,并调整代码以应对新的变化。 同时,应积极参与社区讨论,反馈问题,共同推进自动化技术的进步。

相关资源链接