
Anh Tuan
Data Science Expert

reCAPTCHA là thách thức xác minh phổ biến nhất mà các tác nhân AI gặp phải khi lướt web. Các tác nhân LangChain thực hiện thu thập dữ liệu, gửi biểu mẫu hoặc quy trình nhiều bước thường gặp các hộp kiểm tra reCAPTCHA v2 và các thách thức không hiển thị trên trang đăng nhập, kết quả tìm kiếm và nội dung được bảo vệ. Hướng dẫn này minh họa cách giải reCAPTCHA v2 cụ thể trong LangChain bằng gói capsolver-agent của CapSolver, với các ví dụ mã hoàn chỉnh cho cả chế độ Token và chế độ Trình duyệt.
capsolver-agent cung cấp các triển khai BaseTool bản địa cho các tác nhân ReAct của LangChainreCAPTCHA v2 được triển khai trên hàng triệu trang web để phân biệt người dùng thực từ lưu lượng tự động. Khi một tác nhân LangChain truy cập trang được bảo vệ - dù để tăng cường thông tin liên hệ, trích xuất dữ liệu hay tự động hóa quy trình - động cơ phân tích rủi ro của Google đánh giá phiên bản. Các trình duyệt tự động, môi trường không đầu và các mô hình di chuyển nhanh kích hoạt thách thức reCAPTCHA, làm dừng thực thi tác nhân.
Thách thức xuất hiện ở hai dạng: hộp kiểm tra hiển thị ("Tôi không phải là robot") yêu cầu tương tác, và biến thể không hiển thị kích hoạt âm thầm dựa trên điểm rủi ro. Cả hai dạng đều yêu cầu gửi token hợp lệ để tiếp tục. Không có cơ chế giải quyết, tác nhân LangChain không thể tiếp tục nhiệm vụ và toàn bộ chuỗi sẽ thất bại.
Tài liệu reCAPTCHA của Google xác nhận hệ thống sử dụng phân tích rủi ro tiên tiến bao gồm kiểm tra môi trường trình duyệt, mô hình tương tác và hành vi lịch sử. Điều này khiến reCAPTCHA đặc biệt thách thức cho các tác nhân tự động thiếu các mô hình lướt web giống người thật.
Dịch vụ giải reCAPTCHA v2 của CapSolver tạo ra các token hợp lệ thông qua cơ sở hạ tầng đám mây của họ, vượt qua nhu cầu tương tác chính xác pixel hoặc nhận dạng hình ảnh trong phạm vi cửa sổ của tác nhân.
Cài đặt các gói cần thiết:
# Động cơ cốt lõi (phụ thuộc bắt buộc)
pip install git+https://github.com/capsolver-ai/capsolver-core.git
# Công cụ tác nhân với hỗ trợ LangChain
pip install "capsolver-agent[langchain] @ git+https://github.com/capsolver-ai/capsolver-agent.git"
# Môi trường chạy LangChain
pip install langchain-openai langgraph
Thiết lập biến môi trường:
export CAPSOLVER_API_KEY="your-capsolver-api-key"
export OPENAI_API_KEY="your-openai-api-key"
Bạn cũng cần khóa trang web reCAPTCHA từ trang đích. Sử dụng tiện ích mở rộng CapSolver để xác định nó, hoặc kiểm tra mã nguồn trang để tìm thuộc tính data-sitekey. Hướng dẫn xác định reCAPTCHA tại đây giải thích cách phân biệt giữa các phiên bản v2 hộp kiểm tra, v2 không hiển thị và v3.
Tìm khóa trang web reCAPTCHA trên trang đích của bạn. Mở công cụ phát triển trình duyệt và tìm mã nguồn trang:
<!-- reCAPTCHA v2 hiển thị (hộp kiểm tra) -->
<div class="g-recaptcha" data-sitekey="6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI"></div>
<!-- reCAPTCHA v2 không hiển thị -->
<div class="g-recaptcha" data-sitekey="6LeIxAcT..." data-size="invisible"></div>
Ghi lại ba giá trị: data-sitekey, URL trang đầy đủ và xem nó có hiển thị hay không (kiểm tra data-size="invisible").
Đối với phát hiện chương trình sử dụng SDK CapSolver:
from capsolver_core import create_capsolver
from playwright.async_api import async_playwright
async def detect_recaptcha(url: str):
cap = create_capsolver(api_key="YOUR_API_KEY")
async with async_playwright() as p:
browser = await p.chromium.launch()
page = await browser.new_page()
await page.goto(url)
# Phát hiện tự động tất cả CAPTCHAs trên trang
infos = await cap.get_captcha_info(page)
for info in infos:
print(f"Loại: {info.type}, Khóa: {info.website_key}")
await browser.close()
await cap.aclose()
Khóa trang là tham số thiết yếu để giải reCAPTCHA. Không có nó, dịch vụ giải không thể tạo token hợp lệ cho trang cụ thể. Các trang khác nhau trên cùng một miền có thể sử dụng khóa trang khác nhau, vì vậy luôn kiểm tra từng trang.
6LeIxAcT...) luôn thành công. Các trang thực tế sử dụng khóa duy nhất yêu cầu giải thực tế.page_action. Kiểm tra nguồn script - v3 được tải qua ?render=SITE_KEY thay vì phần tử div.Sử dụng các công cụ LangChain của capsolver-agent để giải reCAPTCHA v2 trong quy trình tác nhân của bạn:
import asyncio
from langchain_openai import ChatOpenAI
from langgraph.prebuilt import create_react_agent
from capsolver_agent.langchain import get_langchain_tools
async def solve_recaptcha_with_agent():
# Lấy công cụ LangChain của CapSolver
tools = get_langchain_tools(api_key="YOUR_CAPSOLVER_API_KEY")
# Tạo tác nhân ReAct
llm = ChatOpenAI(model="gpt-4o", temperature=0)
agent = create_react_agent(llm, tools=tools)
# Yêu cầu tác nhân giải reCAPTCHA
result = await agent.ainvoke({
"messages": [("user",
"Giải reCAPTCHA v2 trên https://example.com/login. "
"Khóa trang là 6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI. "
"Trả lại token tôi có thể sử dụng để gửi biểu mẫu."
)]
})
print(result["messages"][-1].content)
asyncio.run(solve_recaptcha_with_agent())
Đối với thực thi trực tiếp mà không cần vòng lặp tác nhân (khi bạn muốn kiểm soát chương trình):
from capsolver_agent.schema import create_executor
async def solve_recaptcha_direct():
executor = create_executor(api_key="YOUR_CAPSOLVER_API_KEY")
result = await executor.execute("solve_captcha", {
"captcha_type": "reCaptchaV2",
"website_url": "https://example.com/login",
"website_key": "6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI"
})
if result["success"]:
token = result["solution"]["token"]
print(f"reCAPTCHA đã được giải! Token: {token[:60]}...")
# Gửi token này dưới dạng 'g-recaptcha-response' trong yêu cầu POST biểu mẫu
return token
else:
print(f"Thất bại: {result['error']}")
return None
Token trả về nên được gửi dưới dạng trường g-recaptcha-response trong yêu cầu POST biểu mẫu. Tài liệu giải reCAPTCHA v2 cung cấp thêm chi tiết về các mẫu gửi token.
Chế độ Token là phương pháp nhanh nhất cho reCAPTCHA v2 - thời gian giải trung bình là 5-12 giây mà không có chi phí trình duyệt. Đối với các tác nhân LangChain đã biết thông số trang đích, điều này cung cấp việc xóa CAPTCHA tức thì mà không cần khởi động phiên bản trình duyệt.
reCAPTCHA v2 không hiển thị hoạt động giống nhau về mặt API - cùng loại nhiệm vụ reCaptchaV2 xử lý cả hai biến thể:
# reCAPTCHA v2 không hiển thị - gọi API giống nhau
result = await executor.execute("solve_captcha", {
"captcha_type": "reCaptchaV2",
"website_url": "https://example.com/checkout",
"website_key": "6Ld_SITE_KEY_HERE"
# Không cần cờ bổ sung - CapSolver xử lý không hiển thị tự động
})
Sự khác biệt nằm ở cách chèn token. reCAPTCHA không hiển thị thường liên kết với sự kiện nhấp vào nút hoặc gửi biểu mẫu. Sau khi nhận token, kích hoạt hàm gọi lại:
# Trong bối cảnh Playwright/trình duyệt sau khi giải:
await page.evaluate(f"""() => {{
document.getElementById('g-recaptcha-response').innerHTML = '{token}';
// Kích hoạt hàm gọi lại liên kết
if (typeof ___grecaptcha_cfg !== 'undefined') {{
const clients = ___grecaptcha_cfg.clients;
for (const key in clients) {{
const client = clients[key];
// Tìm và gọi hàm gọi lại
if (client && client.L && client.L.L && client.L.L.callback) {{
client.L.L.callback('{token}');
}}
}}
}}
}}""")
Hướng dẫn xác định hàm gọi lại reCAPTCHA giải thích cách tìm hàm gọi lại chính xác cho bất kỳ trang nào.
Khi tác nhân LangChain điều khiển trình duyệt và gặp reCAPTCHA động, sử dụng solve_on_page() để phát hiện và điền token tự động:
import asyncio
from capsolver_core import create_capsolver
from playwright.async_api import async_playwright
async def auto_solve_recaptcha(target_url: str):
"""Phát hiện và giải reCAPTCHA trên bất kỳ trang nào."""
cap = create_capsolver(api_key="YOUR_CAPSOLVER_API_KEY")
async with async_playwright() as p:
browser = await p.chromium.launch(headless=True)
page = await browser.new_page()
await page.goto(target_url)
await page.wait_for_load_state("networkidle")
# Một cuộc gọi xử lý mọi thứ: phát hiện → giải → điền lại
results = await cap.solve_on_page(page)
for r in results:
if r.solution:
print(f"Đã giải {r.info.type}: token={r.solution.token[:50]}...")
print(f"Token đã được điền vào trang: {r.filled}")
else:
print(f"Không thể giải {r.info.type}: {r.error}")
# Sau khi giải, trang sẵn sàng - gửi biểu mẫu
submit_button = page.locator('button[type="submit"]')
if await submit_button.count() > 0:
await submit_button.click()
await page.wait_for_navigation()
print(f"Biểu mẫu đã được gửi. URL hiện tại: {page.url}")
await browser.close()
await cap.aclose()
asyncio.run(auto_solve_recaptcha("https://example.com/login"))
Chế độ Trình duyệt đặc biệt mạnh mẽ vì nó đọc thông số reCAPTCHA trực tiếp từ DOM sống - không cần trích xuất khóa trang thủ công. SDK xác định loại CAPTCHA, đọc data-sitekey, giải và viết token lại vào trường g-recaptcha-response tự động.
Nhận Mã Khuyến Mãi Của Bạn: Sử dụng mã WEBS tại Bảng điều khiển CapSolver để nhận thêm 5% khuyến mãi cho mỗi lần nạp tiền. Lý tưởng cho các nhà phát triển LangChain xây dựng các tác nhân xử lý các thách thức reCAPTCHA.
Kết hợp giải reCAPTCHA với các công cụ khác cho quy trình sản xuất hoàn chỉnh:
import asyncio
from langchain_openai import ChatOpenAI
from langgraph.prebuilt import create_react_agent
from capsolver_agent.langchain import get_langchain_tools
async def production_agent():
capsolver_tools = get_langchain_tools(api_key="YOUR_CAPSOLVER_API_KEY")
llm = ChatOpenAI(model="gpt-4o", temperature=0)
agent = create_react_agent(llm, tools=capsolver_tools)
# Nhiệm vụ đa bước yêu cầu giải reCAPTCHA
result = await agent.ainvoke({
"messages": [("user",
"Tôi cần truy cập tài nguyên được bảo vệ. "
"Đầu tiên, giải reCAPTCHA v2 tại https://example.com/gate "
"(khóa trang: 6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI), "
"sau đó cho tôi biết token để tôi có thể tiếp tục yêu cầu của mình."
)]
})
return result["messages"][-1].content
asyncio.run(production_agent())
Đối với các tác nhân cần xử lý nhiều phiên bản reCAPTCHA trên các trang khác nhau, các công cụ giống nhau xử lý cả v2 và v3 - chỉ cần thay đổi tham số captcha_type từ reCaptchaV2 thành reCaptchaV3.
Trang sản phẩm CapSolver liệt kê tất cả các loại CAPTCHA được hỗ trợ và mức giá của chúng, giúp bạn ước tính chi phí cho triển khai tác nhân LangChain.
Giải reCAPTCHA trong LangChain yêu cầu gói capsolver-agent với phần mở rộng LangChain, cung cấp các triển khai BaseTool bản địa. Chế độ Token xử lý các khóa trang đã biết trong 5-12 giây mà không cần trình duyệt, trong khi chế độ Trình duyệt phát hiện và điền token reCAPTCHA trên bất kỳ trang nào. CapSolver cung cấp cơ sở hạ tầng giải AI, hỗ trợ cả biến thể hộp kiểm tra và không hiển thị của reCAPTCHA qua giao diện thống nhất.
Bắt đầu bằng cách xác định khóa trang trên trang đích của bạn, sau đó tích hợp get_langchain_tools() vào tác nhân ReAct của bạn. Vòng lặp suy luận của tác nhân tự nhiên quyết định khi gọi giải reCAPTCHA, làm cho việc xử lý xác minh trở thành một phần trong quy trình tự động hóa của bạn.
CapSolver đạt tỷ lệ thành công 95-99% cho các thách thức reCAPTCHA v2. Dịch vụ giải AI xử lý cả biến thể hộp kiểm tra và không hiển thị. Các lần thất bại không bị tính phí, và phản hồi lỗi có cấu trúc cho phép tác nhân tự động thử lại.
Thời gian giải trung bình cho reCAPTCHA v2 là 5-12 giây. Điều này bao gồm thời gian mạng đến dịch vụ CapSolver và quá trình nhận dạng AI. Đối với các quy trình nhạy cảm với thời gian, SDK hỗ trợ thời gian chờ có thể cấu hình và khoảng thời gian kiểm tra.
Có. Truyền enterprise: true trong tham số khi gọi solve_captcha. reCAPTCHA Enterprise sử dụng cùng loại nhiệm vụ v2/v3 nhưng có thể yêu cầu các tham số bổ sung như token s. Dịch vụ CapSolver xử lý các biến thể Enterprise một cách mượt mà.
Không. Chế độ Token hoạt động mà không cần trình duyệt — bạn cung cấp khóa trang và URL, và nhận lại một token. Chế độ Trình duyệt (yêu cầu Playwright) là tùy chọn và được sử dụng khi bạn muốn phát hiện và điền tự động trên các trang đang chạy. Hầu hết tích hợp LangChain sử dụng Chế độ Token để đơn giản và nhanh chóng.
Token reCAPTCHA hết hạn sau khoảng 120 giây. Yêu cầu token gần thời điểm gửi biểu mẫu nhất có thể. Nếu quy trình của bạn có độ trễ giữa việc giải và gửi, hãy triển khai mẫu "giải ngay trước khi gửi" thay vì giải sớm trong quy trình.
Khám phá lý do tại sao việc xử lý xác minh lưu lượng là thành phần thiếu sót trong cơ sở hạ tầng tác nhân AI. Học cách tích hợp các giải pháp mạnh mẽ cho các tác nhân tự động.

- Các tác nhân AI cần có khả năng chống CAPTCHA mạnh mẽ để duy trì hoạt động liên tục trong các nhiệm vụ tự động. - Việc triển khai các chiến lược kiểm tra lưu lượng có cấu trúc giúp giảm thiểu sự gián đoạn do các cơ chế kiểm soát rủi ro gây ra. - Sử dụng API giải CAPTCHA đáng tin cậy đảm bảo xử lý hiệu quả các thách thức phức tạp. - Thiết kế cơ sở hạ tầng phù hợp tách biệt logic cốt lõi của tác nhân khỏi quản lý bảo vệ bot.
