发布时间:2026/8/29 5:27:39
如何在 LangChain Agent 中处理 reCAPTCHA LangChain Agent 常被用于浏览器自动化、公开网页数据采集、表单提交、测试流程和多步骤业务工作流。进入真实网页环境后这类 Agent 很容易遇到 reCAPTCHA v2例如常见的 checkbox 验证以及页面在后台触发的 invisible reCAPTCHA。当 Agent 访问受 reCAPTCHA 保护的页面时如果没有专门的验证处理步骤整个链路就会停在当前页面。本文介绍如何在授权自动化场景下将 CapSolver 接入 LangChain让 Agent 可以通过可控的工具调用处理 reCAPTCHA v2。本文会覆盖两种方式Token mode已知页面 URL 和 site key 时直接请求 reCAPTCHA token。Browser modeAgent 正在用 Playwright 浏览页面时由 SDK 自动检测页面上的 CAPTCHA 并回填 token。下面的示例使用capsolver-agent和 LangChain 工具接口因此 CAPTCHA 处理可以成为 Agent 正常工具链的一部分。核心要点reCAPTCHA v2 是 LangChain 浏览器 Agent 经常遇到的验证类型。CapSolver 可以为 checkbox 和 invisible reCAPTCHA v2 返回可提交的 token。Token mode 适合已经知道页面 URL 和 site key 的场景。Browser mode 适合 Agent 动态访问页面并需要自动识别 CAPTCHA 的场景。capsolver-agent提供 LangChain 工具支持便于接入 ReAct Agent。请只在你拥有授权的网站、账号和自动化工作流中使用这些方法。为什么 reCAPTCHA 会打断 LangChain 工作流reCAPTCHA 的作用是判断当前请求是否来自真实、可信的用户会话。它会综合浏览器环境、交互行为、访问上下文和风险信号。LangChain Agent 通常运行在自动化浏览器、无头浏览器或重复任务流程中因此在访问某些页面时可能触发验证。常见触发场景包括采集公开网页数据时访问带验证的页面。登录或账号相关流程。表单提交、预约、搜索、查询等任务。多步骤浏览器任务中途进入受保护页面。QA、RPA 或自动化测试流程。reCAPTCHA v2 通常有两种形式。第一种是用户熟悉的 checkbox 验证第二种是 invisible reCAPTCHA它可能在用户点击按钮或提交表单时静默触发。无论是哪一种页面最终都需要一个有效的 token通常会通过g-recaptcha-response字段提交。如果 Agent 没有 token 处理能力链路就会失败。CapSolver 的作用是在授权场景下返回可提交的 token让工作流继续执行。准备工作先安装需要的依赖包pip install githttps://github.com/capsolver-ai/capsolver-core.git pip installcapsolver-agent[langchain] githttps://github.com/capsolver-ai/capsolver-agent.gitpip install langchain-openai langgraph然后配置环境变量exportCAPSOLVER_API_KEYyour-capsolver-api-keyexportOPENAI_API_KEYyour-openai-api-key如果使用 Token mode还需要从目标页面中找到 reCAPTCHA 的 site key。可以通过浏览器开发者工具查看页面源码也可以使用 CapSolver 浏览器扩展识别 CAPTCHA 参数。第一步找到 reCAPTCHA site key对 reCAPTCHA v2 来说site key 通常在data-sitekey属性中。divclassg-recaptcha>6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI /div如果是 invisible reCAPTCHA v2通常仍然会使用类似结构但会带有data-sizeinvisible。divclassg-recaptcha>6LeIxAcT...>sizeinvisible /div你需要记录三个信息完整页面 URL。data-sitekey的值。当前页面使用的是 visible reCAPTCHA 还是 invisible reCAPTCHA。如果你的工作流已经使用 Playwright也可以通过 CapSolver Core 在页面中自动检测 CAPTCHA 信息。fromcapsolver_coreimportcreate_capsolverfromplaywright.async_apiimportasync_playwrightasyncdefdetect_recaptcha(url:str): cap create_capsolver(api_keyYOUR_CAPSOLVER_API_KEY)asyncwithasync_playwright()asp: browser awaitp.chromium.launch() page awaitbrowser.new_page()awaitpage.goto(url) captcha_infos awaitcap.get_captcha_info(page)forinfoincaptcha_infos:print(ftype{info.type}, site_key{info.website_key})awaitbrowser.close()awaitcap.aclose()site key 很关键因为 token 必须针对具体页面和具体 CAPTCHA 配置生成。同一个域名下的不同页面也可能使用不同 site key因此不要直接复用。第二步在 LangChain 中用 Token mode 处理 reCAPTCHA v2当你已经知道页面 URL 和 site key 时Token mode 是最直接的方式。LangChain Agent 可以调用 CapSolver 工具获取一个可提交的 token然后继续后续表单或页面流程。import asynciofromlangchain_openai import ChatOpenAIfromlanggraph.prebuilt import create_react_agentfromcapsolver_agent.langchain import get_langchain_tools async def solve_recaptcha_with_langchain(): tools get_langchain_tools(api_keyYOUR_CAPSOLVER_API_KEY) llm ChatOpenAI(modelgpt-4o,temperature0) agent create_react_agent(llm,toolstools) result await agent.ainvoke({messages: [ (user,Solve the reCAPTCHA v2 for https://example.com/login. The site key is 6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI. Return the response token.) ] })print(result[messages][-1].content) asyncio.run(solve_recaptcha_with_langchain())如果你不希望让 Agent 自己决定何时调用工具也可以用 executor 直接执行这样更适合需要精确控制的生产系统。fromcapsolver_agent.schemaimportcreate_executorasyncdefsolve_recaptcha_directly(): executor create_executor(api_keyYOUR_CAPSOLVER_API_KEY) result awaitexecutor.execute(solve_captcha, {captcha_type:reCaptchaV2,website_url:https://example.com/login,website_key:6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI})ifnotresult[success]:print(fCaptcha solving failed:{result[error]})returnNonetoken result[solution][token]print(fReceived token:{token[:60]}...)returntoken拿到 token 后一般需要把它作为g-recaptcha-response字段提交给页面或接口。Token mode 的优势是轻量不需要启动浏览器实例。对于已经知道目标参数的 Agent 工作流它通常是更简单的方案。第三步处理 invisible reCAPTCHA v2从 API 调用角度看invisible reCAPTCHA v2 和 checkbox 版本使用同一个reCaptchaV2类型。result await executor.execute(solve_captcha, {captcha_type:reCaptchaV2,website_url:https://example.com/checkout,website_key:6Ld_SITE_KEY_HERE})差异主要在 token 返回之后。Invisible reCAPTCHA 通常绑定在按钮点击、表单提交或 JavaScript callback 上。浏览器自动化流程中除了写入 token有时还需要触发页面预期的 callback。await page.evaluate((token) {constresponse document.getElementById(g-recaptcha-response);if(response) { response.innerHTML token; }if(typeof___grecaptcha_cfg !undefined) {constclients ___grecaptcha_cfg.clients;for(constidinclients) {constclient clients[id];constcallback client?.callback || client?.L?.L?.callback || client?.l?.l?.callback;if(typeofcallback function) { callback(token);break; } } } },token, )不同网站的 callback 结构可能不同因此接入时需要在测试环境中确认页面逻辑。不要把 invisible reCAPTCHA 简单理解成“只填一个字段就一定完成”有些页面还会检查回调是否执行。第四步使用 Browser mode 自动检测和回填如果 LangChain Agent 是动态浏览页面并且事先不知道页面是否存在 CAPTCHA可以使用 Browser mode。SDK 会检查当前页面识别支持的 CAPTCHA 类型完成求解并把 token 回填到页面中。importasynciofromcapsolver_coreimportcreate_capsolverfromplaywright.async_apiimportasync_playwrightasyncdefsolve_recaptcha_on_page(target_url:str): cap create_capsolver(api_keyYOUR_CAPSOLVER_API_KEY)asyncwithasync_playwright()asp: browser awaitp.chromium.launch(headlessTrue) page awaitbrowser.new_page()awaitpage.goto(target_url)awaitpage.wait_for_load_state(networkidle) results awaitcap.solve_on_page(page)forresultinresults:ifresult.solution:print(fSolved{result.info.type})print(fFilled into page:{result.filled})else:print(fFailed to solve{result.info.type}:{result.error}) submit page.locator(button[typesubmit])ifawaitsubmit.count() 0:awaitsubmit.click()awaitpage.wait_for_load_state(networkidle)print(fCurrent page:{page.url})awaitbrowser.close()awaitcap.aclose() asyncio.run(solve_recaptcha_on_page(https://example.com/login))Browser mode 的价值在于它可以直接从 live DOM 中读取 CAPTCHA 参数不需要手动查找 site key。对于复杂页面、动态加载页面或 Agent 自主浏览任务这种方式更自然。第五步在生产级 LangChain Agent 中加入 reCAPTCHA 处理生产环境中CAPTCHA 处理不应该是一个完全开放的 Agent 行为而应该是受控工具的一部分。Agent 可以请求工具但应用层需要定义边界例如允许访问的来源、最大重试次数、日志字段和停止条件。下面是一个简化的 ReAct Agent 示例import asynciofromlangchain_openai import ChatOpenAIfromlanggraph.prebuilt import create_react_agentfromcapsolver_agent.langchain import get_langchain_tools async def run_authorized_agent_workflow(): capsolver_tools get_langchain_tools(api_keyYOUR_CAPSOLVER_API_KEY) llm ChatOpenAI(modelgpt-4o,temperature0) agent create_react_agent(llm,toolscapsolver_tools) response await agent.ainvoke({messages: [ (user,For my authorized test workflow, solve the reCAPTCHA v2 at https://example.com/gate. The site key is 6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI. Return the token.) ] }) return response[messages][-1].content result asyncio.run(run_authorized_agent_workflow())print(result)更完整的生产系统通常还需要临时失败后的 retry 逻辑。提交前重新获取 token 的机制。CAPTCHA 类型、求解状态、耗时和页面状态日志。敏感流程中的人工审核或停止条件。分别处理 reCAPTCHA v2、reCAPTCHA v3 和 Enterprise 变体。如果目标页面使用 reCAPTCHA v3参数会不同通常需要page_action。Enterprise 版本也可能需要额外字段。最佳实践是先识别 CAPTCHA 类型再传入对应参数。常见接入错误把 reCAPTCHA v2 和 v3 混用reCAPTCHA v2 和 v3 不是同一种任务。v2 常见形式是 checkbox 或 invisible challengev3 通常基于分数和 action并可能通过renderSITE_KEY的脚本参数加载。太早获取 tokenreCAPTCHA token 有时效性。应尽量在提交表单前再请求 token。如果 Agent 在求解后还要执行很多步骤建议在最终提交前重新获取。复用错误的 site key同一网站的不同页面可能使用不同 site key 或不同配置。应针对实际访问的 URL 检测或确认 site key。忽略 invisible reCAPTCHA 的 callbackInvisible reCAPTCHA 不一定只依赖g-recaptcha-response字段。有些页面还要求执行绑定的 callback。接入时需要验证页面端逻辑是否完整触发。把 CAPTCHA 求解当成通用兜底CAPTCHA 处理只应该用于授权工作流。如果 Agent 到达了不应自动化访问的页面正确做法是停止、报错或转人工处理而不是继续尝试。常见问题LangChain 可以不打开浏览器处理 reCAPTCHA 吗可以。Token mode 不需要浏览器。你只需要提供页面 URL 和 site keyCapSolver 会返回一个 token应用再把它提交到页面需要的字段。什么时候用 Browser mode当 Agent 已经通过 Playwright 浏览页面并且事先不知道 CAPTCHA 参数时适合使用 Browser mode。它可以在 live page 中自动检测并回填 token。invisible reCAPTCHA 也能用同样方式处理吗可以。Invisible reCAPTCHA v2 使用同样的reCaptchaV2task 类型。区别在于浏览器端可能需要额外触发 callback。token 过期怎么办重新请求 token并尽快提交。可靠的生产流程应该在接近最终表单提交时再求解 CAPTCHA。能处理 reCAPTCHA Enterprise 吗可以但 Enterprise 场景可能需要额外参数。应先识别页面的 CAPTCHA 配置再按实际需要传入字段。总结LangChain Agent 在真实浏览器自动化任务中经常会遇到 reCAPTCHA v2尤其是在登录、表单、搜索、查询和受保护页面中。通过 CapSolver 的 LangChain 工具可以把 CAPTCHA token 处理接入 Agent 工作流而不是让链路在验证页面中断。已知 URL 和 site key 时优先使用 Token mode。Agent 动态浏览页面时可以使用 Browser mode 做自动检测和回填。生产环境中要把这个能力放在授权、可审计、可停止的工具边界内并在提交前及时获取 token。参考文章https://www.capsolver.com/blog/langchain-recaptcha-solver-ai-agent-guide?utm_sourcecsdnutm_mediumarticleutm_campaignlangchain-recaptcha-solver-ai-agent-guide

相关新闻

2026/8/26 16:06:31

Unity头发渲染实战:从Kajiya-Kay光照到发片优化全解析

1. 项目概述:为什么Unity头发渲染是个“硬骨头”?做角色,尤其是写实或风格化的女性角色,头发永远是那个让你又爱又恨的部分。爱的是,一头飘逸、有质感的秀发能瞬间提升角色的表现力和可信度,是角色“活”起…

2026/8/27 2:58:46

PixWorld:像素空间扩散模型统一3D场景生成与重建技术解析

在3D视觉领域,场景生成与重建一直是两个相对独立的研究方向。传统方法往往需要分别处理这两个任务,导致流程复杂、效率低下。最近出现的PixWorld框架首次在像素空间扩散框架中统一了3D场景重建与生成,这一突破性进展让开发者能够用同一套模型…

2026/8/23 13:04:13

2026 年商用空气能热水器选购指南:如何根据用水量正确选型

一、商用热水行业普遍痛点,传统设备已难适配长期经营酒店、工厂宿舍、医院、餐饮、泳池等经营场所,每日稳定消耗大量热水,多数商家早年选用燃气锅炉、电加热热水器,长期使用后暴露出多重难以解决的硬伤,也是当下商户纷…

2026/8/29 5:26:56

C++17 if constexpr与初始化if:编译期与运行时分支的艺术

1. 从两个“if”说起:编译期与运行时的抉择艺术如果你写过一段时间的C,对if语句肯定再熟悉不过了。它就像程序里的交通警察,根据条件决定代码的走向。但C17引入的if constexpr和C17/20中增强的if初始化语句,让这个“警察”拥有了在…

2026/8/29 5:26:56

KMP算法从原理到实战:关键next数组解析与线性匹配优化

这个系列走到第四篇,我挑了三块在面试里出场率极高、又经常被混淆的硬骨头:Manacher算法、BFPRT算法、KMP算法。题目里标了“上”,所以这一篇的主角是KMP——理由是它最基础、最经典,同时也是后两个算法思想的前置。Manacher和BFP…

2026/8/29 5:26:56

阿里Java实习面试全流程复盘:从简历到HR面,附高频考题

金三银四这个时间点,对2021届的实习生来说就是一场硬仗。尤其是阿里这种级别的公司,春招实习面试不只是筛人,更像是一次高强度的技术体检。我把自己当时备战阿里Java后台开发实习的完整经历,包括每一轮的面试题、答题思路、以及踩…

2026/8/29 5:26:56

学习FastAPI,端口的“路由参数”传递

1,路径参数在查询定义路径时传入,再传入给函数中如访问http://127.0.0.1:8000/itme/18# 路径参数 # 定义路由时,直接在路径中编写变量 app.get("/item/{sid}") async def read_item(sid: int):return {"sid":sid}# 如果没…

2026/8/29 5:26:56

D14 | Agent 是什么?ReAct 模式让你看懂所有 Agent 框架

文章目录 D14 | Agent 是什么?ReAct 模式让你看懂所有 Agent 框架 写在前面 一、Agent 的本质 1.1 一个生活类比 1.2 Agent 的 3 个核心组件 1.3 Agent vs LLM vs RAG 二、ReAct 模式:所有 Agent 的母模式 2.1 ReAct 是什么 2.2 ReAct 流程图 2.3 ReAct 的 Prompt 模板 2.4 3…

2026/8/29 5:21:56

ROS2集成海康工业相机:从SDK封装到高性能视觉节点开发

简介:本资源是一份面向ROS2初学者与工业视觉开发者的技术实践指南,聚焦海康HIKROBOT工业相机在ROS2环境下的驱动开发与集成应用。它系统解决了图像采集、参数动态配置、设备状态管理及图像流发布等核心问题,适用于机器人视觉感知、智能质检、…

2026/8/28 16:16:17

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/28 16:16:21

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/28 16:16:22

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/29 0:01:10

etc目录下的profile.d文件目录设置环境变量和全局脚本shell

一、设置环境变量etc目录下的profile.d文件目录 /etc/profile.d1、编写 vi test.sh文件内容# jdk变量 export ZHK_HOME/root export PATH$PATH:$ZHK_HOME/test # 可以取出来ZHK_HOME变量给ZZZ_HOME赋值 export ZZZ_HOME${ZHK_HOME}/test2、刷新 执行source /etc/profile 命令使…

2026/8/29 0:01:10

【JavaScript】内存管理-垃圾回收机制-内存泄露

内存管理 C 语言这样的底层语言一般都有底层的内存管理接口,比如 malloc()和free()。 而 JavaScript 是在创建变量(对象,字符串等)时自动进行了分配内存,并且在不使用它们时“自动”释放。释放的过程称为垃圾回收。 整…

2026/8/29 0:01:10

Labgrid-MCP:为嵌入式硬件实验室接入AI Agent操控能力

Labgrid-MCP 的目标是把 MCP(Model Context Protocol)能力延伸到真实嵌入式硬件实验室:AI Agent 通过一个标准化的 MCP Server,就能查看目标板状态、控制上电断电、复位开发板、读取串口日志,甚至执行镜像刷写。对于经…

2026/8/28 16:16:48

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/28 16:16:50

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/28 11:06:45

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…