CAPSOLVER
博客
# 使用 Selenium 和 Node.js 爬取数据时如何解决 CAPTCHA 问题

使用 Selenium 和 Node.js 爬取数据时如何解决 CAPTCHA 问题

Logo of CapSolver

Ethan Collins

Pattern Recognition Specialist

15-Oct-2024

作为一名爬虫项目的开发者,我必须说我之前遇到过类似的情况。你正沉浸在爬虫项目中,一切进展顺利,然后“砰”,一大堆验证码突然出现,打乱了你整个流程。你已经设置好了 Selenium 和 Node.js,你的爬虫运行得完美无缺,而验证码却让一切都嘎然而止。我太了解这种感觉了。不过别担心,有一些方法可以解决这个问题,今天,我将向你展示如何使用 Selenium 和 Node.js 解决这些延迟的验证码,这样你就可以让你的爬虫项目继续前进,而不会错过任何东西。

为什么网站使用验证码?

在介绍解决方案之前,了解验证码存在的理由很重要。网站使用验证码来区分人类用户和自动机器人。当检测到可疑行为时,例如来自同一 IP 的多次请求或其他自动化迹象,就会触发验证码。

这些机制有助于保护网站免受垃圾邮件、机器人流量和恶意活动的侵害。虽然这对网站所有者来说是好事,但这对于需要合法访问和收集数据的网络爬虫来说却是一个重大障碍。

难以解决恼人的验证码?

使用 CapSolver AI 支持的自动 Web 解锁技术,体验无缝的自动验证码解决!

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

为什么使用 Node.js?

在深入探讨解决 reCAPTCHA 的技术细节之前,了解为什么 Node.js 是此任务的绝佳选择非常重要:

  1. 异步特性: Node.js 的非阻塞、事件驱动的架构使其非常适合处理 I/O 密集型操作,例如网络抓取和 API 请求。这意味着您可以同时执行多个任务,而无需等待每个任务按顺序完成。
  2. 丰富的生态系统: Node.js 通过 npm(Node 包管理器)提供了一个庞大的库和模块生态系统。这些库简化了网络抓取和自动化的各个方面,例如处理 HTTP 请求、浏览器自动化和验证码解决。
  3. JavaScript 无处不在: 使用 Node.js 允许您在客户端和服务器端都使用 JavaScript。这种统一可以简化您的代码库,并使您更轻松地共享逻辑和数据在应用程序的不同部分之间。
  4. 性能: Node.js 基于 V8 JavaScript 引擎构建,以其高性能和高效处理异步操作而闻名。这确保您的抓取任务能够快速高效地执行。

Selenium 与 Node.js 可以解决验证码吗?

根据我的经验,你绝对可以配置 Selenium 与 Node.js 来解决验证码挑战。但是,根据网站的设置方式,你有两种方法可以考虑。

在某些网站上,只有当它们的防机器人系统怀疑有异常活动时,验证码才会弹出——比如自动化的浏览器行为。在这种情况下,你可以完全通过模仿自然的用户行为来解决验证码,避免被防机器人系统检测到,并顺利通过,而无需面对任何验证码。

但是,一些网站会将验证码直接嵌入页面,并向所有访问者显示它,无论机器人检测结果如何。在这种情况下,你需要解决验证码问题才能访问内容。这就是为什么大多数爬虫会转向第三方验证码解决服务,这些服务是迄今为止解决验证码问题最主流和最有效的方式,但一些第三方使用人工,速度慢且成本高昂,因此不推荐。相反,我们推荐市场上一些使用 AI 支持的自动 Web 解锁技术的公司,我们将在下面详细介绍。

下面,我们还将介绍一些可以防止验证码出现的方法,以及如何通过第三方经济快速准确地解决大规模问题,请跟随我继续探索下一个

方法 #1:使用 Undetected ChromeDriver 与 Selenium 和 Node.js

首先,我分享一个我发现有效的免费方法:使用 Undetected ChromeDriver 与 Selenium。

要了解为什么这种方法有效,首先要了解标准 Selenium 的工作原理。本质上,Selenium 使用 ChromeDriver——一个控制 Chromium 浏览器的可执行文件。此可执行文件充当 Selenium WebDriver 和浏览器本身之间的中间人。

现在,我遇到的问题是:常规 ChromeDriver 会泄漏大量有关自动化的信息到目标网站。当网站实施了防机器人措施时,使用标准 ChromeDriver 往往会导致被标记。你可能会发现自己面对着不可能的挑战,比如 Cloudflare Turnstile 验证码

这就是 Undetected ChromeDriver 对我来说非常方便的地方。它是常规 ChromeDriver 的修改版本,旨在避免检测。通过使用诸如指纹欺骗和隐藏典型自动化信号之类的技术,该工具使 Selenium 看起来更像人类。我注意到,它通常可以通过模仿正常用户行为来解决验证码。

但是,它并非万无一失。虽然 Undetected ChromeDriver 对我来说在具有基本机器人保护的网站上有效,但它并不总是成功。具有更高级系统的网站仍然可以检测到,导致这种方法无效。

如果你有兴趣自己设置它,我建议你查看有关 使用 Undetected ChromeDriver 与 Node.js 的详细指南。请记住,对于保护更严密的网站,这种解决方案可能并不总是足够

方法 #2:使用第三方验证码解决服务

虽然 Undetected ChromeDriver 有时可以通过模仿自然行为来帮助解决验证码挑战,但它并不总是可靠的。许多网站部署了更高级的防机器人保护措施,无论自动化工具看起来多么像人类,仍然可以检测到这些工具。这就是使用第三方验证码解决服务成为最实用解决方案的地方,尤其是在处理大规模网络抓取操作时。

为什么选择第三方验证码解决程序?

有几个原因可以解释为什么第三方服务通常是在网络抓取期间处理验证码的首选方法:

  1. 准确性和可靠性: 自动化的验证码解决服务利用先进的机器学习算法以很高的成功率解决验证码。这些解决方案专门设计用于高效地解决不同类型的验证码挑战,包括复杂的挑战,例如 Google reCAPTCHA 和 Cloudflare 的 Turnstile。

  2. 可扩展性: 对于大规模抓取项目,仅仅依靠 Undetected ChromeDriver 之类的工具既不可靠又费时。另一方面,第三方服务是为了处理大量验证码挑战而构建的,其停机时间最短,允许您的抓取任务顺利运行而不会被打断。

  3. 成本效益: 虽然你可能认为使用付费服务会增加你的成本,但请考虑潜在的时间和资源节省。手动解决验证码或反复解决自动化错误会占用宝贵的时间,尤其是在高流量抓取项目中。通过自动化这方面,您可以专注于实际的数据收集,而不是验证码解决的物流。

  4. 跨多个网站的一致性: 不同网站部署的验证码挑战种类繁多(例如 reCAPTCHA、captcha、Cloudflare),这使得 DIY 解决方案难以跟上。第三方服务通常支持多种验证码类型,确保无论目标网站使用何种保护措施,您都能得到保障。

既然我们已经讨论了为什么第三方解决方案通常是最有效的方法,那么我将介绍 CapSolver——验证码解决领域的领先服务。

为什么选择 CapSolver?

CapSolver 是一款快速、可靠且可扩展的第三方验证码解决解决方案,支持各种验证码类型。无论您是处理 reCAPTCHA v2 或 v3、captcha,还是最新的 Cloudflare Turnstile,CapSolver 都能为您提供帮助。

我推荐 CapSolver 的原因如下:

  • 快速服务和技术支持
    CapSolver 致力于为客户提供快速响应和高效服务。技术团队经验丰富,专业知识扎实,能够在解决验证码识别问题时迅速提供支持和解决方案。

  • 快速更新速度
    CapSolver 拥有强大的监控系统,能够在服务需要更新和维护时第一时间积极响应,并不断改进和优化我们的验证码识别算法,以确保系统能够高效地响应验证码的各种更新,并继续提供准确的识别结果。

  • 丰富的服务支持类型
    CapSolver 是市场上支持最多验证码识别服务类型的供应商,包括 reCAPTCHA (v2/v3/企业版)、captcha(普通版/企业版)、Cloudflare、ImageToText、captcha、captcha V3/V4、captcha Captcha 等,可以处理全球 95% 以上的验证码需求,涵盖所有主流验证码服务类型。

  • 详细的 API 功能和文档教程
    CapSolver 提供 全面的 API 功能,使开发人员可以轻松地集成我们的验证码识别服务。文档教程 不仅涵盖了 API 的基本用法,还包括高级配置和常见问题解决方案,帮助您在项目中高效地应用 CapSolver 的技术。

  • 扩展服务
    除了提供 API 服务外,CapSolver 还提供扩展,方便不会编程的用户。这为非技术人员提供了一种更便捷的方式来处理验证码挑战。浏览器扩展支持识别最受欢迎的验证码

如何将 CapSolver 与 Selenium 和 Node.js 集成

将 CapSolver 集成到您的 Selenium 和 Node.js 项目中非常简单。所以从我的流程来看,这里有一个逐步建议:

  1. 安装 CapSolver SDK: 首先,通过在项目目录中运行以下命令来安装 CapSolver Node.js SDK:

    bash 复制代码
    npm install capsolver-node
  2. 设置 API 密钥: 安装 SDK 后,您需要从 CapSolver 获取 API 密钥。前往 CapSolver 网站 并创建一个帐户以获取您的密钥。

  3. 代码中的验证码处理: 以下是我在我的项目中实施 CapSolver 以解决验证码挑战的方式:

javascript 复制代码
// npm install axios
const axios = require('axios');
 
const api_key = "YOUR_API_KEY";  // 替换为您的实际 API 密钥
const site_key = "0x4XXXXXXXXXXXXXXXXX";  // 替换为网站密钥
const site_url = "https://www.yourwebsite.com";  // 替换为目标网站 URL
 
async function capsolver() {
  const payload = {
    clientKey: api_key,
    task: {
      type: 'AntiTurnstileTaskProxyLess',
      websiteKey: site_key,
      websiteURL: site_url,
      metadata: {
          action: ''  // 可选操作元数据
      }
    }
  };
 
  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("获取 taskId:", task_id);
 
    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);
      const status = resp.data.status;
 
      if (status === "ready") {
        return resp.data.solution.token; // 返回已解决的令牌
      }
      if (status === "failed" || resp.data.errorId) {
        console.log("解决失败!响应:", resp.data);
        return;
      }
    }
  } catch (error) {
    console.error("错误:", error);
  }
}
 
capsolver().then(token => {
  console.log(token);  // 输出已解决的验证码令牌
});
  1. 将验证码解决方案集成到 Selenium 中: 收到验证码解决方案后,您可以使用 Selenium WebDriver 将其注入浏览器,以提交表单并解决验证码。

  2. 运行您的爬虫: 将 CapSolver 集成到您的 Selenium 脚本中后,您就可以运行您的爬虫,而不必担心验证码中断。

通过将 CapSolver 集成到您的抓取项目中,您将毫不费力地解决验证码挑战,并确保您的自动化能够顺利高效地运行。

总结

在网络抓取过程中处理验证码是我遇到的最大挑战之一,但有了合适的工具,我学会了如何克服这些障碍。无论我选择 Undetected ChromeDriver 还是选择更强大的解决方案,我都可以确保我的网络抓取工作能够持续进行,不会被打断。

对于任何大规模抓取的人来说,我认为依靠验证码解决服务是一项明智的投资。它速度快、效率高,并且构建得可扩展——允许我的爬虫专注于收集数据,而不是卡在验证码上。

哦,如果您已准备好大胆尝试,并亲身体验 CapSolver 的优势,请在此注册。您将很快解决验证码!

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

更多