CAPSOLVER
博客
使用JavaScript解决reCAPTCHA:完整教程

使用 JavaScript 解决 reCAPTCHA:完整教程

Logo of CapSolver

Anh Tuan

Data Science Expert

02-Dec-2025

虽然reCAPTCHA能有效保护网页内容,但它有时会妨碍合法活动,例如涉及与网络服务交互的研究、数据分析或其他合规性驱动的自动化任务。

您将学到的内容

在本篇文章中,我们将逐步讲解如何使用JavaScript解决reCAPTCHA挑战。您将学习如何设置开发环境,使用Puppeteer与网页交互,并实现对reCAPTCHA v2和v3的解决方案。在本教程结束时,您将掌握程序化解决reCAPTCHA挑战的方法,从而将这些知识整合到自己的项目中。

什么是reCAPTCHA?

reCAPTCHA是一种验证码,通过呈现人类容易而机器难以解决的挑战来区分人类用户和机器人。多年来,reCAPTCHA从需要用户输入的扭曲文本,演进到更复杂的图像谜题,现在则变成几乎不可见的版本,它在后台运行,并根据用户在网站上的行为进行评分。

领取您的CapSolver优惠码

立即提升您的自动化预算!
在充值CapSolver账户时使用优惠码 CAPN,每次充值可额外获得 5% 的奖励——无上限。
立即在您的 CapSolver仪表板 中领取
.

reCAPTCHA的版本:

  • reCAPTCHA v2:此版本以“我不是机器人”复选框和基于图像的挑战而广为人知。它要求用户点击图像或验证某些操作,从而有效区分人类和机器人。

  • reCAPTCHA v3:与v2不同,reCAPTCHA v3是隐形的,并在后台运行。它评估用户在网站上的交互行为,并根据用户是机器人的可能性分配一个分数。网站可以利用此分数决定是否允许或阻止用户。

  • reCAPTCHA Enterprise:对于有更高安全需求的企业,reCAPTCHA Enterprise应运而生。此版本能提供更高级的保护,以抵御复杂的威胁,并更深入地集成到企业级安全措施中。它包括增强的风险分析、可自定义的评分以及更好的可扩展性,适用于处理敏感数据或关键操作的组织。

为什么使用JavaScript解决reCAPTCHA?

对于从事网页爬虫、自动化测试或表单自动化等项目的开发者来说,遇到reCAPTCHA可能是一个重大障碍。在自动化场景中,每次手动解决reCAPTCHA都不现实,这正是JavaScript发挥作用的地方。通过使用JavaScript,特别是借助Puppeteer等工具,开发者可以程序化地与并解决reCAPTCHA挑战。
常见使用场景:
1. 网页爬虫: 从网站提取数据通常需要与受reCAPTCHA保护的表单或页面进行交互。
2. 自动化测试: 确保网页应用的稳定性可能需要自动化表单提交或与验证码保护页面的交互。
3. 表单自动化: 自动化重复任务,如填写并提交表单,通常需要绕过验证码以完成流程。

前提条件

在我们深入代码之前,您需要满足以下前提条件,以便成功跟随本教程:

  • JavaScript基础理解: 本教程假设您具备JavaScript的基础知识,包括对变量、函数和异步编程等概念的熟悉。
  • Node.js和npm: 我们将使用Node.js(JavaScript运行时)以及npm(Node包管理器)来管理项目的依赖。如果您尚未安装Node.js,可以从官方Node.js网站下载。
  • CapSolver API密钥: 为了有效解决reCAPTCHA挑战,您需要使用像CapSolver这样的服务,它专门提供程序化解决验证码挑战的服务。请确保在CapSolver上注册并获取API密钥,以便将其集成到您的解决方案中。

一旦满足上述前提条件,您就可以设置环境并开始使用JavaScript和CapSolver解决reCAPTCHA挑战。

使用JavaScript解决reCAPTCHA的步骤

获取站点密钥

安装requests库

bash 复制代码
pip install requests

示例代码

python 复制代码
import requests
import time
from DrissionPage import ChromiumPage

# 创建ChromiumPage实例
page = ChromiumPage()

# 访问触发reCAPTCHA的示例页面
page.get("https://www.google.com/recaptcha/api2/demo")

# TODO: 设置您的配置
api_key = "您的CapSolver API密钥"  # 您的CapSolver API密钥
site_key = "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-"  # 您目标网站的站点密钥
site_url = "https://www.google.com/recaptcha/api2/demo"  # 您目标网站的页面URL

def capsolver():
    payload = {
        "clientKey": api_key,
        "task": {
            "type": 'ReCaptchaV2TaskProxyLess',
            "websiteKey": site_key,
            "websiteURL": site_url
        }
    }
    # 向CapSolver发送请求以创建任务
    res = requests.post("https://api.capsolver.com/createTask", json=payload)
    resp = res.json()
    task_id = resp.get("taskId")
    if not task_id:
        print("创建任务失败:", res.text)
        return
    print(f"获取到taskId: {task_id} / 正在获取结果...")

    while True:
        time.sleep(3)  # 延迟
        payload = {"clientKey": api_key, "taskId": task_id}
        # 查询任务结果
        res = requests.post("https://api.capsolver.com/getTaskResult", json=payload)
        resp = res.json()
        status = resp.get("status")
        if status == "ready":
            return resp.get("solution", {}).get('gRecaptchaResponse')
        if status == "failed" or resp.get("errorId"):
            print("解决失败!响应内容:", res.text)
            return

def check():
    # 获取reCAPTCHA解决方案
    token = capsolver()
    # 设置reCAPTCHA响应值
    page.run_js(f'document.getElementById("g-recaptcha-response").value="{token}"')
    # 调用成功回调函数
    page.run_js(f'onSuccess("{token}")')
    # 提交表单
    page.ele('x://input[@id="recaptcha-demo-submit"]').click()

if __name__ == '__main__':
    check()

说明:

  1. 获取站点密钥: 在浏览器的请求日志中查找包含k=参数的请求,并提取k=后的值作为站点密钥。
  2. 设置配置: 将代码中的api_keysite_keysite_url替换为您的实际值。
  3. 执行代码: 通过调用check()函数,代码将自动获取reCAPTCHA解决方案并提交表单。

请确保遵守您所交互的网站的服务条款和法律法规。

结论

使用JavaScript程序化解决reCAPTCHA挑战为与受验证码保护的网络服务交互的任务自动化提供了一个强大的解决方案。通过利用Puppeteer和CapSolver等工具,您可以有效绕过这些挑战,优化您的工作流程,并将自动化解决方案整合到您的项目中。

随着reCAPTCHA的不断发展,了解其不同版本并采用适当策略变得至关重要。无论您是在处理网页爬虫、自动化测试还是表单自动化,掌握高效管理reCAPTCHA的方法可以显著提升您的工作效率和准确性。

请记住,虽然自动化可以大幅提升效率,但尊重您所访问的网站的服务条款并确保符合法律标准至关重要。借助合适的工具和知识,您可以应对reCAPTCHA的复杂性,专注于开发工作中的核心问题。

关于合规性的注意事项

重要提示: 在进行网页爬虫时,必须遵守法律和道德准则。请确保您有权爬取目标网站,并尊重该网站的robots.txt文件和服务条款。CapSolver坚决反对任何非合规用途的我们的服务。未经授权使用自动化工具绕过验证码可能带来法律后果。请确保您的爬虫活动符合所有适用的验证码和法规,以避免潜在问题。

常见问题解答

1. 使用CapSolver等自动化工具程序化解决reCAPTCHA是否合法?

使用自动化工具解决reCAPTCHA在获得适当授权并遵守目标网站的服务条款时是合法的。
研究、质量保证测试或内部自动化等活动通常是可接受的。
然而,未经授权的爬虫、垃圾信息或规避安全控制的行为使用验证码解决服务是严格禁止的,并可能导致法律后果。
请确保您的自动化符合道德和法律准则。


2. 为什么需要使用JavaScript或Puppeteer来解决reCAPTCHA而不是普通的HTTP请求?

reCAPTCHA v2、v3和Enterprise依赖于超出简单令牌的多个因素,包括:

  • 浏览器指纹识别
  • JavaScript执行
  • 用户交互模式
  • Cookies和DOM行为
  • 风险评分(尤其是v3和Enterprise版)

普通HTTP请求无法模拟这种环境。
Puppeteer(或类似的浏览器自动化工具)创建了一个真实的浏览器上下文,从而成功且可靠地处理reCAPTCHA挑战。


3. 我从CapSolver获取了令牌,但表单无法提交。可能哪里出错了?

多种因素可能导致验证码绕过无法正常工作:

常见原因:

  • 错误或过时的 站点密钥
  • 传递给CapSolver的 网站URL 错误
  • 令牌插入到错误的DOM元素中
  • 缺少回调函数执行(例如,未触发onSuccess()
  • 页面上的JavaScript期望额外的用户操作
  • 页面使用了Enterprise版reCAPTCHA(需要不同的任务类型)

推荐检查:

  1. 确认您的site_keysite_url与页面上的实际值匹配。
  2. 确保令牌正确插入到g-recaptcha-response字段中。
  3. 如果需要,手动触发站点的成功回调。
  4. 如果站点使用Enterprise版,请切换到ReCaptchaEnterpriseTaskProxyLess
  5. 检查浏览器日志中是否有JavaScript错误,这些错误可能阻止表单提交。

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

更多