返回博客
Cloudflare Bypass
如何使用 Nstbrowser 获取 Cloudflare Turnstile 令牌?
如何使用 Nstbrowser 获取 Cloudflare Turnstile 令牌? 在本指南中,您可以按照我们的 4 个有效步骤,使用 Nstbrowser 完成 Cloudflare Turnstile 令牌的获取。
May 06, 2024
Cloudflare Turnstile token

欢迎阅读本教程!在本教程中,我们将使用 Nstbrowser 完成从 Cloudflare 上获取 Turnstile 令牌的全部步骤。

通过简单的演示,然后根据具体步骤完成您的工作!

getting Cloudflare Turnstile Token with Nstbrowser

什么是 Cloudflare?

首先,让我们来谈谈 Cloudflare。Cloudflare 成立于 2009 年,是一家提供旨在提高网站和互联网应用程序的安全性、速度和可用性的解决方案的知名公司。

Cloudflare 主要提供以下服务:

  • 内容分发网络(CDN)
  • DDoS 保护
  • 网站应用防火墙 (WAF)
  • DNS 服务
  • 负载平衡
  • SSL/TLS 加密
  • 边缘计算

Cloudflare Turnstile 如何工作?

Cloudflare Turnstile 为网站和网络应用程序的用户身份验证和访问控制提供了强大而灵活的解决方案。它有助于增强安全性、保护敏感资源并改善用户体验。

使用 Nstbrowser 获取 Cloudflare Turnstile 令牌的 4 个有效步骤

其实获取令牌的方法并不难!

步骤 1:安装 Nstbrowser

  • 从以下网址下载 Nstbrowser 客户端安装程序:https://www.nstbrowser.io/download
  • 然后,打开安装程序,按照提示步骤完成安装过程。
  • 安装完成后,您就可以在设备上找到并启动 Nstbrowser 客户端了。

步骤 2:登录

为了获得更好的体验,您需要在在 Nstbrowser 官方网站上注册一个新账户:https://app.nstbrowser.io/account/register

使用注册信息登录 Nstbrowser 客户端。登录成功后,别忘了在 API 菜单中生成自己的专属API Key

generate API key
  • 注意:请确保您下载了可用的内核。如果没有,请在 Nstbrowser 客户端手动下载。您需要做的是:点击右上角的 头像 → 设置 → 版本

第 3 步:编写代码以获取 Cloudflare Turnstile 令牌

现在!是时候创建一个节点项目了。如果你创建了,这项工作就完成了:

  • 在项目目录中创建 api.js 文件
  • 插入以下代码,创建并启动随机指纹浏览器实例。
JavaScript Copy
// Api Docs: https://apidocs.nstbrowser.io/api-5418530
export async function getBrowserWSEndpoint(apiKey) {
  const config = {
    once: true, // one_time browser
    headless: false, // support: true, 'new'
    autoClose: false,
    // remoteDebuggingPort: 9223,
    fingerprint: {
      name: 'test-turnstile',
      platform: 'windows', // support: windows, mac, linux
      kernel: 'chromium', // only support: chromium
      kernelMilestone: '120',
      hardwareConcurrency: 2, // support: 2, 4, 8, 10, 12, 14, 16
      deviceMemory: 8, // support: 2, 4, 8
      proxy: "" // input format: schema://user:password@host:port
    },
  };

  const query = new URLSearchParams({
    'x-api-key': apiKey,
    config: JSON.stringify(config),
  }).toString();

  const resp = await fetch(`http://localhost:8848/api/agent/devtool/launch?${query}`)
  const json = await resp.json();
  return json.data
}

有关更多 API 参数,请参阅 Nstbrowser API 文档

  • 接下来,创建 turnstile.js 文件,并插入以下代码,以便通过 Puppeteer 自动检索 Turnstile Token 数据。
JavaScript Copy
import puppeteer from "puppeteer-core";
import {getBrowserWSEndpoint} from "./api.js";

const apiKey = 'API Key'

async function delay(time) {
  return new Promise(resolve => setTimeout(resolve, time));
}

let browser = null;
async function getTurnstileToken() {
  const {webSocketDebuggerUrl} = await getBrowserWSEndpoint(apiKey)
  browser = await puppeteer.connect({
    browserWSEndpoint: webSocketDebuggerUrl,
    defaultViewport: null,
  });

  const page = await browser.newPage();

  let resolveToken = null;
  const tokenPromise = new Promise(resolve => resolveToken = resolve);

  // This method is used to monitor whether the Checkbox exists on the page and click it
  const checkbox = async () => {
    while (true) {
      try {
        if (page.isClosed()) return;
        const targetFrameUrl = 'cdn-cgi/challenge-platform/';
        const iframe = page.frames().find((frame) => frame.url().includes(targetFrameUrl));
        if (iframe) {
          const box_element = await iframe.waitForSelector('input[type="checkbox"]', {
            timeout: 1000,
            visible: true,
          });
          await box_element.click();
        }
      } catch (e) {
      } finally {
        await delay(1000)
      }
    }
  }

  // This method is used to monitor whether the token is returned
  const findToken = async () => {
    while (true) {
      if (page.isClosed()) return;
      const response = await page.evaluate(() => {
        const token = window?.turnstile?.getResponse()
        if (token) {
          return {token: token}
        }
      });
      if (response) {
        resolveToken(response);
        return;
      }
      await delay(1000)
    }
  }

  findToken().then()
  checkbox().then()

  await page.goto('https://xxx.com/login.html');
  return tokenPromise;
}

// Test get trunstile token
getTurnstileToken()
  .then(result => console.log(result))
  .catch(err => console.error(err))
  • 在终端中执行 node turnstile.js,等待结果。输出结果可能显示为
JavaScript Copy
{ token: '0.ZDHeg0BH58fAptHKige3NNlwavjsNJtp9mIHOxV6Qbqp30cpqwi7ib2M7utunoXsOAf2EYd71XFzJnMw2rA_Zi5VuAFqe-CaXx7bHdecjxrjOaTdOGWQ_0mk9WA3v-FfJgXaJZD5FVmp1UCtQuzrxt4__TVYwytrbtrKbFpBJKqKH6CdY5MCnORHgcjc2FXS9PD0rCBdzJuicWJedZkmDvvGeWG2iKQ5D1T85oUoqkKpT-NMkSt1webVc_Yfa0sPXmbw8DKkYsauwJPvqfbqyfSdrDi17qK2APCQANeWdXgd-1NsHdlkV4OMdZuunbsoROJVXIOu-i1R_8rkWKiejsGQfkubX8Y8_xempdEO0LfYEBmrMUbPzyr12QcEefE5r_BPmdn_RTX_dU2kh734G3qaodxCcOOcCo5UKM1cvHI.D_fh7cB0Bxhb4b0PHB7jew.451b703e4df2a4e8cd61d90d175329883eb3af85d72e77787959c0b52fe112e2' }

第 4 步:提交表单请求

获得 Turnstile 令牌后,我们通常需要将该令牌作为表单请求的一部分提交给服务器。根据实际网站的不同,这一步骤的实现方式也会有所不同。

因此,您需要根据实际网站的要求修改并应用以下代码示例。

JavaScript Copy
async function submitForm(token) {
  const formData = new FormData();
  formData.append('username', 'your_username');
  formData.append('password', 'your_password');
  formData.append('cf-turnstile-response', token);
  const response = await fetch('
https://xxx.com/login
', {
    method: 'POST',
    body: formData,
  });
  if (response.ok) {
    console.log('Form submitted successfully!');
  } else {
    console.error('Form submission failed!');
  }
}

使用注意事项

在上述代码中,我们创建了一个新的 FormData 对象,并添加了用户名、密码和 Cloudflare Turnstile 令牌。请注意,您需要根据实际网站要求修改这些值:

  • 用户名
  • 密码
  • cf-turnstile-response
  • https://xxx.com/login

有关完整的 Cloudflare Turnstile 代码示例,请参阅 GitHub

更多