2024 年使用 Playwright 解决 Cloudflare 问题

在这里插入图片描述

你知道,战胜障碍,尤其是那些像 Cloudflare 这样的数字守门人,总会带来一种特殊的快感。如果你曾经在尝试自动化网页任务时发现自己面对 Cloudflare 挑战,那你并不孤单。我曾经也无数次遇到过这种情况。但到了 2024 年,游戏规则发生了变化,工具也随之改变。让我带你了解一下我是如何用 Playwright 来应对 Cloudflare 的,当然,我们也会聊聊这个新出现的家伙——Cloudflare Turnstile。

Cloudflare 是什么,为什么重要

在我们深入探讨解决 Cloudflare 挑战的具体方法之前,让我们花点时间来了解一下我们所面临的挑战。Cloudflare 是一种强大的安全服务,被数百万个网站用来抵御恶意流量、DDoS 攻击和其他各种威胁。当它检测到异常行为时——比如自动脚本试图访问页面——它会抛出一个挑战,通常以 CAPTCHA 的形式出现,以验证你是人类而不是机器人。

但关键是:Cloudflare 已经不再仅仅抛出简单的 CAPTCHA 了。在 2024 年,他们推出了一种名为 Cloudflare Turnstile 的东西,这是一个更复杂、更适应性的挑战系统,旨在对自动化更加稳固。这是一个难以攻克的难题,但只要采用正确的方法,你仍然可以占上风。

在这里插入图片描述

难以克服反复出现的无法完全解决恼人的验证码问题?

使用 Capsolver AI 驱动的自动网页解锁技术,发现无缝自动验证码解决的乐趣!

领取你的 奖励代码,以获得顶级的验证码解决方案;CapSolver: WEBS。兑换后,每次充值后你将获得额外的 5% 奖励,无限次

为什么 Playwright 是 2024 年的最佳选择

你可能会想,“为什么选择 Playwright?为什么不坚持使用传统的 Selenium 或 Puppeteer?”这是一个合理的疑问。答案是 Playwright 已成为网页自动化的强大工具,它提供了一些功能,使它在应对 Cloudflare 提出的现代挑战(如 Turnstile CAPTCHA)方面尤其有效。

Playwright 支持多个浏览器上下文,这意味着你可以更有效地模拟不同的用户。它还提供了对浏览器行为的更多控制,使模拟真实用户交互变得更容易——这在处理 Cloudflare 的高级安全措施时至关重要。

入门:设置 Plawright

首先,如果你还没有安装 Playwright,你需要安装它。设置过程很简单:

npm install playwright

安装完成后,你就可以开始自动化你的网页任务了。但如果你想绕过 Cloudflare 挑战,尤其是他们的新 Turnstile CAPTCHA,我们需要采取一些额外的步骤。我们将利用 CapSolver,一个专为解决 Turnstile 等 CAPTCHA 而设计的第三方 API,并将其与 Playwright 集成,以访问受 Cloudflare 保护的网站。

第一步:获取 SiteKey

使用 Turnstile CAPTCHA 时,你将遇到的第一个障碍是从网页获取 siteKey。这个密钥对于 CapSolver 处理 CAPTCHA 并为你提供有效令牌至关重要。

你可以通过检查网页的源代码来提取 siteKey,或者,为了简化操作,你可以使用 CapSolver 扩展程序。它会自动检测页面上的 CAPTCHA 参数。有关如何设置它的详细指南,请查看我们的博客文章:识别 Cloudflare Turnstile 参数

获得 siteKey 后,就可以进行下一步了。

第二步:调用 CapSolver API 来解决 CAPTCHA

有了 siteKey,就可以使用 CapSolver 的 API 来解决 Turnstile CAPTCHA 并获取有效令牌了。这个令牌将允许我们绕过挑战,并继续进行我们的网页抓取或自动化任务。

以下是一个使用 axiosPlaywright 与 CapSolver 交互的代码示例:

const axios = require('axios');
const playwright = require("playwright");

const api_key = "YOUR_API_KEY"; // 你的 CapSolver API 密钥
const site_key = "0xxxxxx"; // 你获取的 siteKey
const site_url = "https://xxx.xxx.xxx/xxx"; // 目标网站 URL
const proxy = "http://xxx:xxx@x.x.x.x:x"; // 可选:如果需要,使用你的代理

async function solveCaptcha() {
  const payload = {
    clientKey: api_key,
    task: {
      type: 'AntiTurnstileTaskProxyLess',
      websiteKey: site_key,
      websiteURL: site_url,
      metadata: {
        action: '', // 可选,如果需要,请指定
        type: "turnstile"
      }
    }
  };

  try {
    const res = await axios.post("https://api.capsolver.com/createTask", payload);
    const task_id = res.data.taskId;
    if (!task_id) {
      console.log("无法创建任务:", res.data);
      return;
    }

    console.log("任务已创建,等待令牌...");

    while (true) {
      await new Promise(resolve => setTimeout(resolve, 1000)); // 等待 1 秒后再检查
      const getResultPayload = {clientKey: api_key, taskId: task_id};
      const resp = await axios.post("https://api.capsolver.com/getTaskResult", getResultPayload);
      
      if (resp.data.status === "ready") {
        console.log("CAPTCHA 已解决,令牌已收到:", resp.data.solution.token);
        return resp.data.solution.token;
      }

      if (resp.data.status === "failed" || resp.data.errorId) {
        console.log("CAPTCHA 解决失败!响应:", resp.data);
        return;
      }
    }
  } catch (error) {
    console.error("解决 CAPTCHA 时出错:", error);
  }
}

在这段代码中,我们通过向 CapSolver 的 API 发送 POST 请求来创建任务,并将 siteKey 和我们想要访问的网站的 URL 传递过去。任务创建完成后,我们将持续检查状态,直到 CapSolver 返回一个解决方案令牌。这个令牌将用于向 Cloudflare 证明我们是人类。

第三步:使用 Playwright 注入 CAPTCHA 令牌

现在我们已经有了 CAPTCHA 令牌,需要将其作为 cookie 注入到会话中,使用 Playwright。这将允许我们在不被 Cloudflare 的保护阻止的情况下浏览网站。以下是操作方法:

const wait = (ms) => new Promise(resolve => setTimeout(resolve, ms));

async function accessSiteWithToken(){
  let clearanceCookie;

  // 解决 CAPTCHA 并获取令牌
  await solveCaptcha().then(token => {
    clearanceCookie = token;
  });

  const browser = await playwright.chromium.launch();
  const context = await browser.newContext();
  const page = await context.newPage();

  await wait(500);

  // 将令牌作为 cookie 注入
  await page.setCookie({
    name: "cf_clearance",
    value: clearanceCookie,
    url: site_url, // 确保与目标 URL 相匹配
    domain: "xx.xx.xx" // 根据实际网站调整域
  });

  await wait(500);

  // 设置 cookie 后,导航到网站
  await page.goto(site_url);
  
  // 现在你可以自由地抓取内容或与页面交互
  console.log("成功访问网站!");

  await browser.close();
}

// 运行脚本以访问网站
accessSiteWithToken().then();

最后的想法

Cloudflare 无疑使在 2024 年抓取网站或自动化任务变得更加困难,但借助 Playwright 和 CapSolver 等工具,这个挑战并非不可能克服。Playwright 模拟真实用户交互的能力,加上 CapSolver 的 CAPTCHA 解决 API,提供了一种强大方法来绕过这些障碍,而且毫不费力。

当然,始终要注意确保你遵守合法和合乎道德的抓取实践。一些网站对自动访问有严格的政策,因此在进行操作之前,请确保了解这些政策。

在不断发展的网页自动化世界中,关键是要保持领先地位——而 Playwright 和 CapSolver 可以帮助你做到这一点。

CapsolverCN官 方代理交流扣 群:497493756

### Cloudflare Turnstile 使用指南和集成方法 #### 什么是Cloudflare Turnstile? Cloudflare Turnstile 是一种现代的验证码解决方案,旨在保护网站免受自动化攻击的同时提供更好的用户体验。与传统的 reCAPTCHA 不同,Turnstile 提供了更简洁的设计以及更高的隐私保障[^1]。 #### 如何注册并获取站点密钥? 为了使用 Turnstile 验证码服务,开发者需要先访问 [Cloudflare 官方网站](https://www.cloudflare.com/turnstile/) 注册账号,并创建一个新的站点来获得一对公开密钥(sitekey)和私有密钥(secret key)。这两个密钥将在后续配置过程中被广泛用于前端显示验证组件及后端校验请求合法性[^2]。 #### 前端页面集成 要在网页上部署 Turnstile 小部件,需按照如下方式引入 JavaScript 文件: ```html <script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script> ``` 接着,在 HTML 表单内添加相应的 div 标签以承载该控件实例化的位置: ```html <div class="form-group"> <div id="cf-turnstile"></div> </div> <!-- 初始化 Turnstile --> <script type="text/javascript"> window.onload = function() { var turnstileCallback = function(token) { console.log('Verification successful:', token); }; grecaptcha.ready(function() { grecaptcha.execute('<your-site-key>', {action:'submit'}).then(turnstileCallback); }); }; </script> ``` 请注意替换 `<your-site-key>` 占位符为你自己的 sitekey[^3]。 #### 后端服务器验证 当用户提交表单数据时,会一并将通过隐藏字段传递过来的令牌发送给服务器侧进行进一步确认。此时可以通过 HTTP POST 请求向 `https://challenges.cloudflare.com/turnstile/siteverify` 发送包含 secret_key 和 response 参数的消息体来进行真实性检验。成功返回 JSON 对象中 score 字段表示此次交互行为可信度得分;若低于设定阈值则视为可疑操作处理[^4]。 ```python import requests def verify_turnstile_token(secret, response): url = "https://challenges.cloudflare.com/turnstile/siteverify" payload = {'secret': secret, 'response': response} r = requests.post(url, data=payload) result = r.json() return result['success'], result.get('score') ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值