Python Selenium中未检测到的ChromeDriver

Python Selenium中未检测到ChromeDriver & 常见错误

Selenium 带有一个默认的 WebDriver,它通常无法绕过抓取反机器人程序。然而,您可以使用 Undetected ChromeDriver 对其进行补充,这是一种第三方 WebDriver 工具,可以做得更好。

在本教程中,您将学习如何在 Python 中将 Undetected ChromeDriver 与 Selenium 结合使用并解决最常见的错误。

什么是未检测到的 ChromeDriver?

Undetected ChromeDriver 是一个经过优化的 Selenium WebDriver,可以避免触发反机器人程序。

一些例子?Cloudflare阿卡迈。它适用于 Google Chrome、Brave 和许多其他基于 Chromium 的浏览器。

如何在带有 Selenium 的 Python 中使用未检测到的 ChromeDriver?

准备工作

要使用Undetected ChromeDriver 2,您需要具备以下条件:

  • Selenium,因为它是基础。
  • Python 3,因为该驱动程序仅适用于 Python 3.6 或更高版本。
  • Chrome,因为它是您可以通过脚本控制的浏览器。

安装undetected_chromedriver以与 Selenium 和 Python 一起使用。

pip install undetected-chromedriver

备注:如果您没有安装 Selenium,它将自动添加 ChromeDriver。

获得所需的工具后,让我们编写第一行代码。

import undetected_chromedriver as uc 
 
driver = uc.Chrome() 
driver.get("https://www.nowsecure.nl") 
 
print(driver.current_url) # https://www.nowsecure.nl/ 
print(driver.title) # nowSecure

该脚本将加载 Chrome 浏览器,然后重定向并加载我们目标 URL 的所有网站资源https://www.nowsecure.nl/。要查看它是否有效,我们将打印此主页的地址和标题。

重要的是要注意基本 Selenium 的 WebDriver 没有提供默认启用的无头模式。要更改此设置,我们会将选项传递给undetected_chromedriver.

# ... 
options = uc.ChromeOptions() 
 
options.headless = True 
 
driver = uc.Chrome(options=options) 
# ...

将未检测到的 ChromeDriver 与 Selenium 结合使用

与 Undetected ChromeDriver 建立安全连接后,我们将使用 Selenium 来查找我们想要的信息。

我们对OpenSea页面上提供的信息很感兴趣。因此,我们将使用 CSS 选择器和 Selenium 的find_elements方法来匹配类的所有出现。

from selenium.webdriver.common.by import By 
 
# ... 
driver.get("https://opensea.io") 
node = driver.find_element(By.CSS_SELECTOR, "h5[class='sc-29427738-0 sc-bdnxRM kgxFZp hBeyeI']") 
print(node.accessible_name) # "I'm Spottie" Vinyl Record Collection verified-icon

您可以在我们的网络抓取指南中查看更多Selenium 使用案例

未检测到 ChromeDriver 代理

您还可以使用具有 Undetected ChromeDriver 的代理来避免在网络抓取时被阻止。但是,选择免费解决方案对您没有多大好处,因为免费代理通常不可靠。原因是它们由资源有限且基础设施通常过时的供应商运营。由于它们是公开的,因此很多人都在使用它们,这很容易导致 IP 禁令。

另一方面,高级代理维护良好并来自信誉良好的 ISP 提供商,因此与数据中心 IP 相比,它们是网络抓取的更好选择。

像 ZenRows 这样的抓取工具通过 API 调用提供了一个高级代理池,使您可以轻松地轮换代理以隐藏您的 IP 并避开所有障碍。

未检测到的 ChromeDriver 和 Selenium 的常见错误

undetected_chromedriver我们可以从Selenium得到的最常见的错误是:

  • 拒绝访问。
  • 无头闪避。

我们将详细了解每个问题以了解如何解决它们。

拒绝访问

根据PyPi 上的当前版本,Undetected ChromeDriver 比 Selenium WebDriver 更适合绕过反机器人程序。但是,不能保证结果。

例如,让我们尝试使用https://www.zoominfo.com作为目标 URL。

# ... 
driver.get("https://www.zoominfo.com") 
# Access denied | www.zoominfo.com used Cloudflare to restrict access

在这里,我们未能绕过 ZoomInfo 实施的机器人检测系统。

像ZenRows这样的 Web 抓取 API在这里非常有用,因为它的反机器人功能成功地为我们处理了绕过。作为演示,让我们用它来抓取我们的目标页面。

首先,通过注册获取免费的 API 密钥,然后使用以下命令安装 ZenRows:

pip install zenrows

作为规则,我们在进行 API 调用之前设置和antibot以建立与目标网站的连接。premium_proxytrue

from zenrows import ZenRowsClient 
 
client = ZenRowsClient(API_KEY) 
url = "https://zoominfo.com" 
params = {"antibot": "true", "premium_proxy": "true"} 
 
response = client.get(url, params=params) 
print(response.text)

ZenRows 的antibot功能允许您绕过目前最棘手的反机器人解决方案。与 Undetected ChromeDriver 相比,这使其成为更好优化的工具。

<!DOCTYPE html><html> 
<head> 
    <meta charset="utf-8"> 
    <meta name="viewport" content="width=device-width"> 
    <title>ZoomInfo: B2B Database | Company Contacts & Intelligence</title> 
...

无头逃避

根据GitHub 上的release 3.1.0,headless mode 和之前的 release 一样还在开发中,最新的还没有消息。

这意味着您不应该使用 headless 来保证不被发现。考虑到这一点,在常规模式下使用本文中介绍的驱动程序可能会很昂贵,具体取决于您的项目规模。

结论

在这个使用 Python 中的 Selenium 的 Undetected ChromeDriver 教程中,我们了解了该库为什么以及如何帮助我们。此外,我们将它与一种流行的替代方案进行了比较,后者在某些用例中可能更适合您的需求。

这是一个快速概述:

特征 未检测到的 ChromeDriver zenrows
反机器人绕过 适用于保护较少的网站 可绕过任何抓取反机器人
无头浏览器 是的,但仍在进行中
无头浏览器
高级代理

与 Selenium WebDriver 不同,undetected_chromedriver它更加优化,这使得它可以更好地绕过机器人检测系统。然而,它有时无法绕过反机器人程序,这使得ZenRows成为一个很好的选择。

常见问题

未检测到的 ChromeDriver 是否安全?

未检测到的 ChromeDriver 即使是非官方版本也是安全的,因为它由第三方定期维护和更新。因此,您不应期待任何兼容性问题、安全漏洞或其他问题,而应始终检查PyPIGitHub以了解新的开发情况。

未检测到的 ChromeDriver 有什么用?

未检测到的 ChromeDriver 用于避免触发反机器人措施。它是用于 Selenium 的 Web 驱动程序,可以避免机器人检测,您可以在 Python 中使用它来补充其官方 WebDriver。

为什么未检测到的 ChromeDriver 不工作?

如果未检测到的 ChromeDriver 不工作,可能是因为您遇到了以下错误之一:

  • 拒绝访问:驱动程序有时无法绕过安全措施。
  • Headless Evasion: headless模式尚未优化,因此可能无法避免检测。

如何在 Python Selenium 中使用未检测到的 ChromeDriver?

以下是在 Python 中将 Undetected ChromeDriver 与 Selenium 结合使用需要执行的操作:

  1. 安装 Python 3、Selenium 和 Chrome。
  2. 用于pip install undetected-chromedriver安装未检测到的 ChromeDriver。
  3. 导入库,加载 Chrome 浏览器,并获取您的目标站点。
  4. 通过打印主页的地址和标题来确保您已正确连接。
  5. 使用 CSS 选择器和 Selenium 的find_elements方法来查找您想要的信息。

类似文章