
Emma Foster
Machine Learning Engineer

Cloudflare Turnstile 是一种智能验证码替代方案,旨在在不进行侵入性挑战的情况下验证合法用户。它通过在后台运行一系列非交互式 JavaScript 挑战来操作,以无缝地区分人类访客和机器人。虽然提供更好的用户体验,但其不可见性以及动态验证过程可能对自动化网页抓取和数据提取工具构成重大障碍。
本文提供了一个详细的指南,介绍如何将 Crawl4AI(一个先进的网络爬虫)与 CapSolver(领先的验证码和反机器人解决方案服务)集成,以有效绕过 Cloudflare Turnstile 的保护。我们将涵盖基于 API 和基于浏览器扩展的集成方法,提供实用的代码示例和解释,确保您的网页自动化任务能够顺利进行,不会中断。
Cloudflare Turnstile 通过评估访客行为和浏览器特征来发放一个令牌,然后将其发送到服务器进行验证。它的目标是保护隐私并提供友好的用户体验,但对网页爬虫来说,这意味着:
cf-turnstile-response)中。CapSolver 通过利用先进的 AI 算法,为 Cloudflare Turnstile 提供了高精度、快速响应的解决方案。当与 Crawl4AI 集成时,它可以将这一复杂的反机器人机制转化为一个可管理的步骤,确保您的网页自动化任务保持流畅和高效。
💡 Crawl4AI 集成用户专属优惠:
为庆祝此次集成,我们为所有通过本教程注册的 CapSolver 用户提供专属 6% 优惠码 —CRAWL4。
在 仪表板 充值时输入该代码,即可立即获得 额外 6% 积分。
API 集成方法提供了精确的控制,通常因其灵活性而受到青睐。它涉及使用 CapSolver 获取 Turnstile 令牌,然后使用 Crawl4AI 的 js_code 功能将该令牌注入目标网页的适当输入元素中。
AntiTurnstileTaskProxyLess 类型以及 websiteURL 和 websiteKey。CapSolver 将返回所需的 Turnstile 令牌。CrawlerRunConfig 中使用 Crawl4AI 的 js_code 参数,将获得的令牌注入名为 cf-turnstile-response 的 input 元素中。注入后,模拟点击提交按钮或触发依赖于令牌的下一步操作。以下 Python 代码演示了如何将 CapSolver 的 API 与 Crawl4AI 集成以解决 Cloudflare Turnstile。此示例针对 Cloudflare Turnstile 演示页面。
import asyncio
import capsolver
from crawl4ai import *
# TODO: 设置您的配置
api_key = "CAP-xxxxxxxxxxxxxxxxxxxxx" # 您的 CapSolver API 密钥
site_key = "0x4AAAAAAAGlwMzq_9z6S9Mh" # 您的目标网站的站点密钥
site_url = "https://clifford.io/demo/cloudflare-turnstile" # 您的目标网站的页面 URL
captcha_type = "AntiTurnstileTaskProxyLess" # 您的目标验证码类型
capsolver.api_key = api_key
async def main():
browser_config = BrowserConfig(
verbose=True,
headless=False,
use_persistent_context=True,
)
async with AsyncWebCrawler(config=browser_config) as crawler:
await crawler.arun(
url=site_url,
cache_mode=CacheMode.BYPASS,
session_id="session_captcha_test"
)
# 使用 CapSolver SDK 获取 Turnstile 令牌
solution = capsolver.solve({
"type": captcha_type,
"websiteURL": site_url,
"websiteKey": site_key,
})
token = solution["token"]
print("Turnstile 令牌:", token)
js_code = """
document.querySelector(\'input[name="cf-turnstile-response"]\').value = \'"""+token+"""\';
document.querySelector(\'button[type="submit"]\').click();
"""
wait_condition = """() => {
const items = document.querySelectorAll(\'h1\');
return items.length === 0;
}"""
run_config = CrawlerRunConfig(
cache_mode=CacheMode.BYPASS,
session_id="session_captcha_test",
js_code=js_code,
js_only=True,
wait_for=f"js:{wait_condition}"
)
result_next = await crawler.arun(
url=site_url,
config=run_config,
)
print(result_next.markdown)
if __name__ == "__main__":
asyncio.run(main())
代码分析:
capsolver.solve 方法,传入 AntiTurnstileTaskProxyLess 类型、websiteURL 和 websiteKey 来获取 Turnstile 令牌。该令牌是 CapSolver 提供的解决方案。js_code): js_code 字符串包含 JavaScript,用于在页面上定位 name="cf-turnstile-response" 的 input 元素,并将其值设置为获得的令牌。随后,模拟点击提交按钮,确保表单使用有效的 Turnstile 令牌提交。wait_for 条件: 定义了 wait_condition 以确保 Crawl4AI 在继续之前等待页面上的特定变化(例如,h1 元素的消失,表示提交和导航成功)。CapSolver 的浏览器扩展为处理 Cloudflare Turnstile 提供了简化的方法,尤其是在利用其在 Crawl4AI 管理的持久化浏览器上下文中自动求解功能时。
user_data_dir 来启动一个浏览器实例,该实例保留已安装的 CapSolver 扩展及其配置。cf-turnstile-response 输入字段中。此示例演示了如何配置 Crawl4AI 使用带有 CapSolver 扩展的浏览器配置文件以自动求解 Cloudflare Turnstile。
import asyncio
import time
from crawl4ai import *
# TODO: 设置您的配置
user_data_dir = "/browser-profile/Default1" # 确保此路径正确并包含已配置的扩展
browser_config = BrowserConfig(
verbose=True,
headless=False,
user_data_dir=user_data_dir,
use_persistent_context=True,
proxy="http://127.0.0.1:13120", # 可选:如需配置代理
)
async def main():
async with AsyncWebCrawler(config=browser_config) as crawler:
result_initial = await crawler.arun(
url="https://clifford.io/demo/cloudflare-turnstile", # 使用 Cloudflare Turnstile 演示 URL
cache_mode=CacheMode.BYPASS,
session_id="session_captcha_test"
)
# 扩展将在页面加载时自动解决验证码。
# 您可能需要添加等待条件或 time.sleep 以允许验证码解决
# 在继续进一步操作前。
time.sleep(30) # 示例等待,根据扩展操作调整
# 验证码解决后继续其他 Crawl4AI 操作
# 例如,检查在成功验证后出现的元素或内容
# print(result_initial.markdown) # 可以在等待后检查页面内容
if __name__ == "__main__":
asyncio.run(main())
代码分析:
user_data_dir: 该参数对于 Crawl4AI 启动保留已安装 CapSolver 扩展及其配置的浏览器实例至关重要。请确保路径指向一个有效的浏览器配置文件目录,其中已安装扩展。time.sleep 作为一般占位符,以允许扩展完成其后台操作。对于更稳健的解决方案,可以考虑使用 Crawl4AI 的 wait_for 功能来检查特定的页面变化,以指示 Turnstile 成功解决。Crawl4AI 与 CapSolver 的集成提供了一种强大且高效的解决方案,以绕过 Cloudflare Turnstile,显著提高网页抓取操作的可靠性。无论您更喜欢 API 集成的精确控制,还是浏览器扩展提供的简化自动化,这两种方法都能确保 Cloudflare Turnstile 不再阻碍您的数据收集目标。
通过自动化 Turnstile 求解,开发者可以专注于提取有价值的数据,确信他们的爬虫能够无缝地导航受保护的网站。Crawl4AI 的先进爬取能力和 CapSolver 的强大反机器人技术之间的协同作用,标志着自动化网页数据提取的重要进展。
Q1:Cloudflare Turnstile 是什么?它与传统验证码有何不同?
A1: Cloudflare Turnstile 是一种验证码替代方案,旨在在不进行侵入性挑战的情况下验证合法用户。与传统验证码通常需要用户解决拼图不同,Turnstile 在后台运行非交互式 JavaScript 挑战,旨在提供无缝的用户体验,同时有效区分人类和机器人。
Q2:为什么抓取受 Cloudflare Turnstile 保护的网站具有挑战性?
A2: Turnstile 的不可见性、对动态 JavaScript 执行的依赖以及需要将有效令牌注入特定输入字段(cf-turnstile-response)使其对自动化网页抓取器来说难以处理。它评估浏览器特征和用户行为,通常会阻止不模仿真实人类交互的请求。
Q3:CapSolver 如何帮助绕过 Cloudflare Turnstile?
A3: CapSolver 提供了专门的服务,例如 AntiTurnstileTaskProxyLess,以解决 Cloudflare Turnstile 挑战。它获取必要的 Turnstile 令牌,然后由 Crawl4AI 注入到目标网页中以绕过保护。
Q4:Crawl4AI 与 CapSolver 集成的两种主要方法是什么?
A4: 两种主要方法是 API 集成,其中调用 CapSolver 的 API 获取令牌,然后通过 Crawl4AI 的 js_code 注入;以及浏览器扩展集成,其中 CapSolver 扩展在持久化浏览器上下文中自动处理 Turnstile 挑战。
Q5:将 Crawl4AI 与 CapSolver 集成用于 Cloudflare Turnstile 的好处是什么?
A5: 此集成实现了 Turnstile 的自动化处理,提高了爬取效率,增强了爬虫对反机器人机制的鲁棒性,并通过减少人工干预来降低运营成本,确保网页数据提取的连续性。
学习修复Cloudflare错误1005访问被拒绝的网络爬虫问题。发现解决方案如住宅代理、浏览器指纹识别和CapSolver验证码解决方法。优化您的数据提取。

了解如何通过使用Playwright隐身技术以及CapSolver实现可靠的验证码解决,从而有效处理AI工作流中的Cloudflare Turnstile。学习实用的集成策略和最佳实践,以实现无缝自动化。
