CAPSOLVER
博客
2024年如何解决Cloudflare:通过使用CapSolver解决Cloudflare Turnstile和挑战

如何在2025年解决Cloudflare:通过CapSolver解决Cloudflare Turnstile和挑战

Logo of CapSolver

Emma Foster

Machine Learning Engineer

03-Nov-2025

Cloudflare 提供了强大的保护措施,包括 Cloudflare 挑战和 Turnstile 验证码,以保护网站免受恶意机器人和自动刮取程序的攻击。了解并克服这些挑战对于那些需要绕过这些防护屏障进行合法用途的人来说可能至关重要。

理解 Cloudflare 的安全措施

Cloudflare 使用各种技术来检测和缓解不必要的流量。其中包括 Cloudflare 挑战,通常涉及 JavaScript 挑战或验证码测试,以及 Turnstile,这是一种更友好的验证码,可减少用户交互。这些系统旨在有效区分人类用户和自动化机器人。

解决 Cloudflare 挑战的策略

  1. 自动化浏览器:

    • 像 Selenium 或 Puppeteer 这样的工具可以模拟真实用户交互。为了掩盖其自动化性质,可以使用 puppeteer-extra-plugin-stealth 等插件来通过 Cloudflare 挑战,通过模拟自然的浏览器行为。
  2. 高质量代理:

    • 使用可旋转 IP 地址的住宅代理可以模仿真实的用户访问模式,从而降低被 Cloudflare 安全措施阻止的可能性。
  3. 验证码解决服务:

    • 对于需要解决的验证码挑战

解决 Cloudflare 挑战的详细指南

首先,让我们看看 Cloudflare 挑战是什么样子的:

有时,此页面可能包含 Turnstile

兑换 CapSolver 奖励代码

不要错过进一步优化您操作的机会!在充值 CapSolver 账户时使用奖励代码 CAPN,每次充值可额外获得 5% 的奖励,无上限。访问 CapSolver 仪表板 立即兑换您的奖励!

如果有一个类似的页面,您必须等待验证完成,并且通常有额外的 Turnstile 检查,那么这就是 Cloudflare 挑战。
解决此类挑战有一些要求:

  • Token 在 getTaskResult 方法的响应中返回,是您需要创建的 cookie cf_clearance 的值。
  • 必须使用 getTaskResult 返回的相同 User-Agent
  • 必须使用用于解决挑战的相同代理 IP
  • 必须使用响应的 cookies
  • 必须使用响应的 headers
  • 使用 TLS Chrome 120 版本

使用 Python 解决 Cloudflare 5s 界面的示例

python 复制代码
# -*- coding: utf-8 -*-
import time
import requests
import tls_client

API_KEY = ""  # TODO: 您的 API 密钥
page_url = ''  # TODO: 您的页面网址 'https://example.com
proxy = ""  # TODO: 您的代理


def call_capsolver():
    data = {
        "clientKey": API_KEY,
        "task": {
            "type": 'AntiCloudflareTask',
            "websiteURL": page_url,
            "proxy": proxy,
        }
    }
    uri = 'https://api.capsolver.com/createTask'
    res = requests.post(uri, json=data)
    resp = res.json()
    task_id = resp.get('taskId')
    if not task_id:
        print("无法获取 taskId:", res.text)
        return
    print('已创建 taskId:', task_id)

    while True:
        time.sleep(1)
        data = {
            "clientKey": API_KEY,
            "taskId": task_id
        }
        response = requests.post('https://api.capsolver.com/getTaskResult', json=data)
        resp = response.json()
        status = resp.get('status', '')
        if status == "ready":
            print("成功 => ", response.text)
            return resp.get('solution')
        if status == "failed" or resp.get("errorId"):
            print("失败! => ", response.text)
            return


def request_site(solution):
    # TODO 如果您想使用 tls_client
    session = tls_client.Session(
         client_identifier="chrome_120",
        random_tls_extension_order=True
    )
    return session.get(
        page_url,
        headers=solution.get('headers'),
        cookies=solution.get('cookies'),
        proxy=proxy,
        allow_redirects=True,
    )


def main():
    # 首次请求:
    res = request_site({})
    print('1. 响应状态码:', res.status_code)
    if res.status_code != 403:
        print("您的代理正常且未触发 Cloudflare 挑战")
        return
    elif 'window._cf_chl_opt' not in res.text:
        print('==== 代理被封锁 ==== ')
        return

    # 调用 CapSolver:
    solution = call_capsolver()
    if not solution:
        return

    # 第二次请求(验证解决方案):
    res = request_site(solution)
    print('2. 响应状态码:', res.status_code)
    if res.status_code == 200:
        ##print("2. 响应文本:\n", res.text)
        print("成功通过 Cloudflare 挑战")


if __name__ == '__main__':
    main()

解决 Cloudflare Turnstile 验证码的详细指南

Cloudflare 提供了 3 种 Cloudflare Turnstile 验证码

  • 托管挑战

  • 非交互式挑战

  • 不可见挑战
    不可见,您可以在网络/脚本加载时检查是否使用了 Turnstile

Turnstile 验证码是 Cloudflare 对传统验证码挑战的替代方案,专注于用户体验和安全性。以下是解决它的方法:

  1. 理解挑战:

    • Turnstile 验证码并不总是可见;有时它在后台运行,分析用户交互以验证真实性。
  2. 集成验证码解决 API:

    • 一些验证码解决服务已经开始提供通过分析网络流量和交互模式来解决 Turnstile 的解决方案。利用这些 API 来提交 Turnstile 挑战以进行解决。
  3. 保持浏览器一致性:

    • 确保您的自动化解决方案保持一致的浏览器签名,因为 Turnstile 可以通过这些签名来检测自动化。
  4. 适应 JavaScript 挑战:

    • Cloudflare 可能会部署 JavaScript 计算来测试浏览器环境。可以使用 Puppeteer 脚本动态解决这些挑战,通过执行 JavaScript 代码,如同普通浏览器一样。

使用 Python 解决 Cloudflare Turnstile 验证码的示例

python 复制代码
import time
from curl_cffi import requests

CAPSOLVER_API_KEY = "您的 CAPSOLVER.COM API 密钥"
PAGE_URL = ""
WEBSITE_KEY = ""

def solvecf(metadata_action=None, metadata_cdata=None):
    url = "https://api.capsolver.com/createTask"
    task = {
        "type": "AntiTurnstileTaskProxyLess",
        "websiteURL": PAGE_URL,
        "websiteKey": WEBSITE_KEY,
    }
    if metadata_action or metadata_cdata:
        task["metadata"] = {}
        if metadata_action:
            task["metadata"]["action"] = metadata_action
        if metadata_cdata:
            task["metadata"]["cdata"] = metadata_cdata
    data = {
        "clientKey": CAPSOLVER_API_KEY,
        "task": task
    }
    response_data = requests.post(url, json=data).json()
    print(response_data)
    return response_data['taskId']


def solutionGet(taskId):
    url = "https://api.capsolver.com/getTaskResult"
    status = ""
    while status != "ready":
        data = {"clientKey": CAPSOLVER_API_KEY, "taskId": taskId}
        response_data = requests.post(url, json=data).json()
        print(response_data)
        status = response_data.get('status', '')
        print(status)
        if status == "ready":
            return response_data['solution']

        time.sleep(2)


def main():
    start_time = time.time()
    
    taskId = solvecf()
    solution = solutionGet(taskId)
    if solution:
        user_agent = solution['userAgent']
        token = solution['token']

    print("User_Agent:", user_agent)
    print("已解决 Turnstile 验证码,token:", token)

    end_time = time.time()
    elapsed_time = end_time - start_time
    print(f"解决验证码所需时间: {elapsed_time} 秒")

if __name__ == "__main__":
    main()

使用 Nodejs 解决 Cloudflare Turnstile 验证码的示例

js 复制代码
const axios = require('axios');

const CAPSOLVER_API_KEY = "";
const PAGE_URL = "";
const WEBSITE_KEY = "";

async function solvecf(metadata_action = null, metadata_cdata = null) {
    const url = "https://api.capsolver.com/createTask";
    const task = {
        type: "AntiTurnstileTaskProxyLess",
        websiteURL: PAGE_URL,
        websiteKey: WEBSITE_KEY,
    };
    if (metadata_action || metadata_cdata) {
        task.metadata = {};
        if (metadata_action) {
            task.metadata.action = metadata_action;
        }
        if (metadata_cdata) {
            task.metadata.cdata = metadata_cdata;
        }
    }
    const data = {
        clientKey: CAPSOLVER_API_KEY,
        task: task
    };
    const response = await axios.post(url, data);
    console.log(response.data);
    return response.data.taskId;
}

async function solutionGet(taskId) {
    const url = "https://api.capsolver.com/getTaskResult";
    let status = "";
    while (status !== "ready") {
        const data = { clientKey: CAPSOLVER_API_KEY, taskId: taskId };
        const response = await axios.post(url, data);
        console.log(response.data);
        status = response.data.status;
        console.log(status);
        if (status === "ready") {
            return response.data.solution;
        }
        await new Promise(resolve => setTimeout(resolve, 2000));
    }
}

async function main() {
    const start_time = Date.now();
    
    const taskId = await solvecf();
    const solution = await solutionGet(taskId);
    if (solution) {
        const user_agent = solution.userAgent;
        const token = solution.token;

        console.log("User_Agent:", user_agent);
        console.log("已解决 Turnstile 验证码,token:", token);
    }

    const end_time = Date.now();
    const elapsed_time = (end_time - start_time) / 1000;
    console.log(`解决验证码所需时间: ${elapsed_time} 秒`);
}

main().catch(console.error);

结论

Cloudflare 的安全措施,包括挑战和 Turnstile 验证码,旨在保护网站免受自动化访问,同时尽量减少合法用户的干扰。对于需要为合法用途进行自动化访问的开发人员、测试人员或企业来说,了解这些挑战并使用强大的解决方案是关键。

通过结合高质量的代理、使用隐身技术的浏览器自动化以及专门的验证码解决服务(如 CapSolver ,您可以可靠地绕过 Cloudflare 的保护。提供的 Python 和 Node.js 示例展示了如何集成 CapSolver 来高效处理传统的 Cloudflare 挑战和 Turnstile 验证码。

通过适当的实现,自动化工作流可以实现高成功率,同时保持合规性并最大限度地减少被检测到的风险。


常见问题

Q1: Cloudflare 挑战和 Turnstile 验证码有什么区别?
A1: Cloudflare 挑战通常涉及 JavaScript 检查或可见的验证码来验证人类。Turnstile 是 Cloudflare 的新型用户友好型验证码,可能在后台运行,减少用户交互同时仍验证真实性。

Q2: Turnstile 验证码可以编程解决吗?
A2: 可以。像 CapSolver 这样的服务通过分析网络流量和用户交互来解决 Turnstile 挑战,无论是可见还是不可见形式。

Q3: 解决 Cloudflare 验证码时是否需要旋转代理?
A3: 使用住宅或高质量的旋转代理是非常推荐的。Cloudflare 会跟踪 IP 行为,因此一致的 IP 使用可降低被阻止的风险。

Q4: 是否可以使用同一个浏览器会话处理多个挑战?
A4: 最好为每个会话保持浏览器一致性,使用相同的 User-Agent、cookies、headers 和 TLS 版本,因为不匹配可能会触发 Cloudflare 安全措施。

Q5: CapSolver 解决 Cloudflare Turnstile 验证码需要多长时间?
A5: CapSolver 通常在几秒内(通常约 5 秒)解决大多数 Cloudflare 挑战,具体取决于网络状况、代理质量和任务复杂性。

Q6: 是否有官方的库/示例来集成 CapSolver?
A6: 是的,CapSolver 提供了 Python 和 Node.js 的官方示例,如本文所示,涵盖了 Cloudflare 挑战和 Turnstile 验证码。

合规声明: 本博客提供的信息仅供参考。CapSolver 致力于遵守所有适用的法律和法规。严禁以非法、欺诈或滥用活动使用 CapSolver 网络,任何此类行为将受到调查。我们的验证码解决方案在确保 100% 合规的同时,帮助解决公共数据爬取过程中的验证码难题。我们鼓励负责任地使用我们的服务。如需更多信息,请访问我们的服务条款和隐私政策。

更多

2024年如何解决Cloudflare:使用CapSolver解决Cloudflare Turnstile和挑战
如何在2025年解决Cloudflare:通过CapSolver解决Cloudflare Turnstile和挑战

探索 Cloudflare 的挑战和 Turnstile 验证码,并学习如何使用 CapSolver、自动化浏览器和高质量代理来绕过它们。包含用于自动化任务中无缝验证码解决的实用 Python 和 Node.js 示例。

Cloudflare
Logo of CapSolver

Emma Foster

03-Nov-2025

2026年解决Cloudflare的6种最佳方法:无缝自动化指南
如何在2026年解决Cloudflare:6种最佳方法实现不间断自动化

发现解决Cloudflare 5秒挑战的6种最佳方法,适用于2026年的网络爬虫和自动化。包含详细策略、代码示例以及对人工智能驱动的CapSolver解决方案的深入分析。

Cloudflare
Logo of CapSolver

Ethan Collins

30-Oct-2025

如何解决Cloudflare 5秒挑战:网络爬虫技术指南
如何解决Cloudflare 5秒挑战:网页爬虫技术指南

学习如何使用高级CAPTCHA求解API解决Cloudflare 5秒挑战。针对开发者的分步指南,使用CapSolver克服Cloudflare JavaScript和Managed Challenges,实现稳定网络爬虫自动化。

Cloudflare
Logo of CapSolver

Emma Foster

28-Oct-2025

如何在Crawl4AI中通过CapSolver集成解决Cloudflare挑战
如何在 Crawl4AI 中通过 CapSolver 集成解决 Cloudflare 验证

学习如何使用 CapSolver API 集成在 Crawl4AI 中解决 Cloudflare 验证。本指南提供用于有效网络爬虫和数据提取的代码示例。

Cloudflare
Logo of CapSolver

Emma Foster

21-Oct-2025

如何在Crawl4AI中使用CapSolver集成解决Cloudflare人机验证
如何在Crawl4AI中通过CapSolver集成解决Cloudflare Turnstile人机验证

一份全面指南,介绍如何通过API和浏览器扩展方法将Crawl4AI与CapSolver集成,以绕过Cloudflare Turnstile的保护措施,实现无缝网络爬虫。

Cloudflare
Logo of CapSolver

Emma Foster

21-Oct-2025

2026年如何解决Cloudflare Turnstile和Challenge 5s | 最佳Cloudflare解决工具
如何解决Cloudflare Turnstile和5秒挑战 | 2026年最佳Cloudflare破解工具

网络爬虫的顶级应用场景及了解CapSolver如何确保数据提取的流畅与不间断

Cloudflare
Logo of CapSolver

Anh Tuan

17-Oct-2025