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

话费充值系统是一个基于.NET C#开发的充值平台,用于用户进行手机话费的在线充值。该系统的源码是对充值平台进行开发所需的代码文件和程序逻辑。它包含了用户管理、账户充值、话费查询等功能模块。 首先,用户管理模块负责用户的注册、登录、个人信息管理等操作,确保系统具有正常的用户管理功能。 其次,账户充值模块实现了用户对手机话费进行充值的功能。用户可以选择充值的金额和运营商,通过系统提供的支付接口完成充值操作。该模块需要与第三方支付机构对接,确保充值过程的安全和可靠性。 话费查询模块提供了用户查询已充值话费余额的功能。用户可以通过输入手机号码或账户名查询当前账户的话费余额,并且系统会及时更新话费余额,确保用户获取到最新的数据。 此外,话费充值系统还可以根据需要进行扩展开发,例如增加优惠活动、查询充值记录等功能,以提升用户体验。在开发过程中,需要确保系统的稳定性、安全性和可维护性。 对于开发人员而言,话费充值系统的源码是一份宝贵的资源,可以在此基础上进行二次开发,满足不同场景的需求。在开发过程中,需要熟悉.NET C#开发技术,了解充值平台的业务逻辑,并与第三方支付机构进行有效的对接。 总的来说,话费充值系统的源码是充值平台开发过程中的关键文件和程序逻辑,通过对源码进行二次开发,可以实现个性化的定制功能,为用户提供更好的充值体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值