最新 绕过Cloudflare最佳实践
- 发表于
- 周边
本指南将介绍如何绕过 Cloudflare 的安全机制,并成功抓取不会被阻止的网站。

了解 Cloudflare 的机制
Cloudflare 的Web应用防火墙(WAF)通过其全球网络来保护 Web 应用免受 DDoS 和零日攻击。它能实时阻止攻击,并利用专有算法,根据多种特征来识别并阻止恶意机器人,包括:
- TLS 指纹:JA3 指纹用来识别客户端及其功能、配置,以验证客户端是否是真实用户。
- HTTP/2 指纹:利用 HTTP/2 参数与已知的机器人特征进行匹配。
- HTTP 细节:检查头部信息和 Cookie 以识别疑似机器人的配置。
- JavaScript 指纹:收集浏览器、操作系统和硬件信息,以区分机器人与真实用户。
- 行为分析:通过机器学习监测请求频率、鼠标移动、空闲时间等来检测机器人。
Cloudflare turnstile验证码有2种类型:
- 独立Cloudflare Trunstile验证码:验证码小部件放在网站页面上,保护表单免受自动提交影响。参见此示例。
- Cloudflare Turnstile挑战页面:网站上的验证码通过Cloudflare代理。参见此示例。
一旦 Cloudflare 检测到可疑的机器人活动,就会发起背景 JavaScript 挑战;若无法通过则会要求输入 CAPTCHA。
绕过 Cloudflare 的技巧
Cloudflare 的专有机器人检测并非牢不可破,具体解决方案需要结合自身需求来不断试验和优化。
使用代理解决方案
Cloudflare 会根据同一 IP 发送过多请求来识别并阻止机器人。为避免这一点,可以使用优质IP代理。但如果对方还会检测 User-Agent,则需要进行相应的伪造。
伪造 HTTP 头
HTTP 头可以暴露客户端的详细信息。Cloudflare 会利用它们来区分真实浏览器和只发送少数头部信息的爬虫。大多数爬虫工具都允许你修改头部来模拟真实浏览器。常见的头部包括:
User-Agent 头
User-Agent
头会暴露所用浏览器与操作系统。Cloudflare 可能会阻止明显像机器人的 User-Agent,因此可将其伪装成常用浏览器(如 Chrome、Firefox、Safari)来提高成功率。下面是使用 Python requests
库进行设置的示例:
1 2 3 4 5 6 7 8 9 10 |
import requests headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36' } response = requests.get('http://httpbin.org/headers', headers=headers) print(response.status_code) print(response.text) |
Referer 头
Cloudflare 会检查 Referer
头来验证请求的来源。将其伪造为一个可信的 URL,能使请求看起来更可信。
1 2 3 4 5 6 7 8 9 10 |
import requests headers = { 'Referer': 'https://trusted-website.com' } response = requests.get('http://httpbin.org/headers', headers=headers) print(response.status_code) print(response.text) |
Accept 头
Accept
头用于声明客户端可处理的内容类型。模拟真实浏览器中详细的 Accept
头,可帮助避免被识别为机器人:
1 2 3 4 5 6 7 8 9 10 |
import requests headers = { 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' } response = requests.get('http://httpbin.org/headers', headers=headers) print(response.status_code) print(response.text) |
轮换 User Agent
重复使用相同的 UA 仍然可能被标记。从预定义列表中轮换 UA 以模仿不同的用户。像 Fake UserAgent 这样的工具简化了此过程:
1 2 3 4 5 6 |
from fake_useragent import UserAgent import requests ua = UserAgent() headers = {'User-Agent': ua.random} response = requests.get('https://example.com', headers=headers) |
使用强化的无头浏览器
如果想绕过 Cloudflare 的 JavaScript 挑战,你的爬虫必须模拟真实浏览器:执行 JavaScript、处理 Cookie、模拟用户滚动、鼠标移动和点击等操作。Selenium 等工具能完成这些,但许多无头浏览器本身也会暴露特征(例如 navigator.webdriver
)。你可以使用 undetected_chromedriver、puppeteer-extra-plugin-stealth 等插件来隐藏这些特征。
以下是使用 undetected_chromedriver 的示例:
1 2 3 4 |
import undetected_chromedriver.v2 as uc driver = uc.Chrome() with driver: driver.get('https://example.com') |
你也可以将无头浏览器与高质量代理服务结合使用,以加强对 Cloudflare 的规避能力:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
chrome_options = uc.ChromeOptions() proxy_options = { 'proxy': { 'http': 'HTTP_PROXY_URL', 'https': 'HTTPS_PROXY_URL' } } driver = uc.Chrome( options=chrome_options, seleniumwire_options=proxy_options ) |
浏览器频繁更新会带来新的无头检测特征,而 Cloudflare 的算法也在不断进化,可能利用这些新特征。因此,这些反侦察插件需持续维护,否则很容易失效。
整合 Bright Data 解决方案
Bright Data 的 Web Unlocker 借助 AI 技术来自动应对 Cloudflare 的反爬机制(涵盖浏览器指纹、CAPTCHA 解决、IP 轮换、请求重试等),成功率高达 99.99%。它会自动选择最佳代理,使用方式与标准代理服务器类似,只需简单的身份验证即可。使用方式示例如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
import requests host = 'brd.superproxy.io' port = 22225 username = 'brd-customer-<customer_id>-zone-<zone_name>' password = '<zone_password>' proxy_url = f'http://{username}:{password}@{host}:{port}' proxies = { 'http': proxy_url, 'https': proxy_url } url = "http://lumtest.com/myip.json" response = requests.get(url, proxies=proxies) print(response.json()) |
Bright Data 的 Scraping Browser 则直接在远程浏览器中运行你的代码,并结合多重代理来解锁站点。它可以与 Puppeteer、Selenium 和 Playwright 集成,提供完整的无头浏览器环境。
常见错误
- 使用过时的 User Agent
Cloudflare 保持着可疑 UA 的列表。避免与旧版浏览器相关的字符串(例如,2017 年的Chrome/58.0.3029.110
)。 - 忽略无头浏览器指纹
即使使用有效的 UA,无头浏览器也会泄露自动化信号(例如,缺少像navigator.plugins
这样的插件)。使用隐身插件,例如puppeteer-extra-plugin-stealth
。 - 忘记 IP 轮换
将 UA 轮换与住宅代理结合使用以避免基于 IP 的封锁。静态或粘性代理最适合保持会话一致性。 - 结合 TLS 指纹
Cloudflare 检查 TLS 握手模式。像curl_cffi
(Python) 或tls-client
(JavaScript) 这样的库可以模仿真实的浏览器 TLS 指纹,从而降低检测风险。
结论
绕过 Cloudflare 可能较为复杂,且成功率会因策略不同而差异明显。更改你的 User Agent 是一种简单而有效的方法来绕过 Cloudflare,但它并非万无一失。将其与 IP 轮换、TLS 指纹和反检测工具结合使用,以获得可靠的结果。
原文连接
的情况下转载,若非则不得使用我方内容。