如何使用Selenium绕过Cloudflare

如何使用Selenium绕过Cloudflare

Cloudflare 阻止了威胁和不良机器人,不幸的是,它还假设所有未列入白名单的机器人流量都是恶意的。这使得网络抓取变得困难,因为我们的抓取工具很有可能被拒绝访问受 Cloudflare 保护的网页。

解决此问题的最佳方法之一是使用无头浏览器,例如 Selenium,因为它能够模仿真实用户的活动。在本指南中,我们将讨论使用 Selenium 绕过 Cloudflare 的最有效方法。

什么是Selenium?

Selenium是一个用于自动化 Web 浏览器和抓取网页的 Python 库。Selenium 扩展模拟用户交互并以各种方式提供交互性,例如启用按钮单击、滚动页面、执行自定义 JavaScript 代码、模拟用户输入等。它使用 Webdriver 协议在多个浏览器(包括 Firefox 和 Chrome)上自动执行流程。

什么是 Cloudflare,它是如何工作的?

Cloudflare是一家网络性能和安全公司,致力于保护和优化网站和应用程序。在安全方面,Cloudflare 提供了一个Web 应用程序防火墙(WAF),它能够防御 Web 攻击,例如跨站点脚本 (XSS) 和 DDoS 攻击。

Cloudflare 是否检测到 Selenium?

不幸的是,Cloudflare Bot Management 能够检测到 Selenium。Cloudflare 阻止恶意 HTTP 流量移动到服务器,并执行安全检查以减轻第 7 层(应用程序层)的 DDoS 攻击。这些安全检查会将 Selenium webDriver 识别为机器人。

在运行 Cloudflare 的网站上,一个插页会出现 5 秒钟。如果对 HTTP 流量的检查是真实的,服务器会将用户重定向到该页面。如果不是,该页面将保留在那里并显示验证码。

Cloudflare 如何阻止僵尸程序?

Cloudflare 的机器人检测技术可分为两类:被动和主动。被动机器人检测使用后端服务器检测技术,如 TLS 指纹识别、HTTP 请求标头和 IP 地址信誉。主动机器人检测发生在客户端,包括验证码、事件跟踪、画布指纹识别等。

Selenium 可以绕过 Cloudflare 吗?

是的!在 Selenium 中绕过 Cloudflare是可能的。虽然使用基础 Selenium 可能还不够,但可以安装扩展的 Selenium 库来帮助您避免 Cloudflare 检测。

首先,让我们通过一个简单的示例来说明为什么基础 Selenium 还不够。我们将使用DataCamp,一个具有 Cloudflare 反机器人保护的网站。

跟随本教程需要以下工具。

打开一个终端。在您想要的目录中,安装 Selenium 和webdriver-manager.

py -m pip install selenium webdriver-manager

在您的 Python 文件中,复制并粘贴下面的代码块。

from selenium import webdriver 
from webdriver_manager.chrome import ChromeDriverManager 
from selenium.webdriver.chrome.service import Service as ChromeService 
from selenium.webdriver.chrome.options import Options 
import time 
 
options = Options() 
options.headless = True 
 
driver = webdriver.Chrome(options=options, service=ChromeService( 
    ChromeDriverManager().install())) 
driver.get("https://www.datacamp.com/users/sign_in") 
 
time.sleep(20) 
 
driver.save_screenshot("datacamp.png") 
 
driver.close()

运行 Python 文件。

datacamp-blocked

运行脚本后,请求返回错误,阻止访问 HTML 元素,我们无法抓取没有这些元素的网页。好样的,Cloudflare,你赢了!

那么我们如何调整 Selenium 以绕过 Cloudflare?我们到了那里。

如何使用 Selenium 绕过 Cloudflare

正如我们所讨论和展示的那样,为 Cloudflare 使用基础 Selenium 是行不通的,因为它无法访问具有复杂反机器人服务的站点。也就是说,让我们看一下可用于绕过 Cloudflare Selenium 的一些调整和技巧。

使用 undetected_chromedriver 绕过 Selenium Cloudflare

undetected_chromedriver是一个selenium.webdriver.Chrome替代品,当需要访问具有反机器人保护的站点时经常使用它,因为它专注于隐身。使用 undetected_chromedriver,可以创建网络驱动程序并用于绕过机器人检测,例如 Cloudflare。

让我们继续使用 undetected_chromedriver 访问 DataCamp 登录页面。从安装开始。

pip install undetected-chromedriver

创建一个 Python 文件并导入 undetected_chromedriver。

import undetected_chromedriver as uc

实例化 undetected_chromedriver。

driver = uc.Chrome(...)

.get()使用我们实例化的驱动程序,让我们使用webdriver成功调用 DataCamp 。time.sleep用作显式等待条件,使我们的窗口保持打开状态,直到该过程完成,并且该maximize_window()方法用于最大化窗口(如果尚未最大化)。

import undetected_chromedriver as uc 
import time 
 
options = uc.ChromeOptions() 
options.headless = True 
driver = uc.Chrome(use_subprocess=True, options=options) 
driver.get("https://www.datacamp.com/users/sign_in") 
driver.maximize_window() 
time.sleep(20) 
driver.save_screenshot("datacamp.png") 
driver.close()

使用 Python 命令和文件名运行创建的文件:

python main.py

就是这样,这就是你会看到的:

datacamp-login

恭喜!现在,您已经避免了让 Selenium 被 Cloudflare 阻止。

undetected_chromedriver 的局限性

如果您正在寻找具有基本反机器人保护的网站,那么 undetected_chromedriver 可能就足够了。但是当涉及到使用高级 Cloudflare 保护和其他 DDoS 缓解服务的网站时,undetected_chromedriver 可能不可靠。

例如,我们尝试使用 undetected_chromedriver 和上面共享的步骤访问g2.com 上的 Asana 页面。你想知道发生了什么事吗?我们被封锁了。

g2-blocked

如您所见,undetected_chromedriver 失败,因为 G2 反机器人服务检测到我们的浏览器会话是自动化的。那么我们如何解决这个问题呢?简单:使用 ZenRows。

使用 ZenRows 绕过 Selenium Cloudflare

ZenRows是一种网络抓取工具,能够通过简单的 API 调用绕过不同类型的反机器人,甚至是复杂的反机器人。是的,它可以毫无压力地绕过 Cloudflare。让我们看看如何。

g2-on-zenrows

首先,创建一个免费的 ZenRows 帐户并导航到 Request Builder。我们将使用 Python SDK,因此单击 Python 并从屏幕上的选项中选择 SDK。粘贴要抓取的 URL,启用 Javascript 渲染和 Antibot。ZenRows 会自动为您生成一个Python 网页抓取脚本。

复制生成的代码并将其粘贴到您的 Python 文件中。

# pip install zenrows 
from zenrows import ZenRowsClient 
 
client = ZenRowsClient("YOUR_API_KEY") 
url = "https://www.g2.com/products/asana/reviews" 
params = { 
    "js_render": "true", 
    "antibot": "true", 
    "premium_proxy": "true", 
} 
 
response = client.get(url, params=params) 
 
print(response.text)

G2 URL 被传递给该client.get()方法,并使用 ZenRows 的反机器人和高级代理绕过 Cloudflare 安全。最后一步是在终端中运行脚本。

python main.py

就像那样,我们有我们的输出:

g2-unblocked-with-zenrows

最后,您已使用 ZenRows 成功绕过 Cloudflare!

结论

Cloudflare 是使用 Selenium 进行网页抓取时面临的问题之一,因为它们能够检测基础 Selenium 并阻止抓取器访问页面。解决此问题的最佳方法是使用一个额外的库,该库能够绕过 Selenium 中的 Cloudflare,例如 undetected_chromedriver。

但是,在避免高级 Cloudflare 安全性方面,此方法失败了。为了解决这个问题,我们使用了ZenRows。它是一种网络抓取工具,可通过单个 API 调用处理所有反机器人绕过,从旋转代理和无头浏览器到验证码。它易于使用,与 Python 完美集成,您可以免费开始使用

类似文章