Cách tích hợp CapSolver với Composio AI Tự động hóa trình duyệt

Anh Tuan
How to use CapSolver
17-Aug-2026
TL;DR
- Bao bọc toàn bộ quy trình trang Playwright — mở, giải quyết, áp dụng kết quả, gửi và xác minh — trong một công cụ tùy chỉnh của Composio mà SDK Agent của OpenAI có thể gọi từ các chỉ thị bằng ngôn ngữ tự nhiên.
- Ví dụ bao gồm hai loại thử thách: reCAPTCHA v2 với token trả về và nhận dạng CAPTCHA hình ảnh với ImageToTextTask, được đăng ký như các công cụ riêng biệt trong một phiên.
- Quy trình kết nối trực tiếp với API OpenAI chính thức và sử dụng Playwright cho tự động hóa trình duyệt.
- Hai lỗi tích hợp phổ biến là khóa Composio thiếu quyền
sessions: write, gây ra lỗi 403, và tham số đầu tiên của công cụ thiếu ghi chú BaseModel Pydantic, gây ra ValidationError.
1. Giới thiệu
Hướng dẫn này tích hợp CapSolver với Composio như một công cụ cho agent hoàn thành quy trình reCAPTCHA v2. Thay vì chỉ trả về token, công cụ chạy toàn bộ chuỗi trang và coi phản hồi thực tế của trang là điều kiện thành công. SDK Agent của OpenAI quyết định khi nào gọi công cụ, trong khi tự động hóa trình duyệt Playwright duy trì ngữ cảnh trang được sử dụng để gửi và xác minh.
Sử dụng mẫu này chỉ cho các quy trình hợp pháp, hợp lý, có trách nhiệm và được người dùng ủy quyền. Khả năng kỹ thuật không cấp quyền truy cập vào dữ liệu riêng tư, bị hạn chế, nhạy cảm hoặc không được ủy quyền; xem lại hướng dẫn tự động hóa AI trước khi triển khai.
Quy trình:
text
Chạy script
-> SDK Agent của OpenAI quyết định công cụ nào cần gọi
-> Công cụ tùy chỉnh của Composio: complete_recaptcha_v2
-> Playwright mở trang
-> capsolver.solve(...) trả về gRecaptchaResponse
-> Áp dụng token vào g-recaptcha-response
-> Playwright gửi và chờ trang
-> Đọc trang và xác định chấp nhận
-> Công cụ trả về {"accepted": ..., "message": ...}
-> Agent báo cáo kết quả từ accepted
Các thành phần có trách nhiệm như sau:
| Thành phần | Trách nhiệm |
|---|---|
| SDK Agent của OpenAI | Hiểu chỉ thị bằng ngôn ngữ tự nhiên, quyết định khi nào gọi công cụ, thực thi và tổ chức phản hồi |
| Composio | Đăng ký hàm Python chuẩn làm công cụ có thể gọi bởi Agent |
| Playwright | Mở trang, áp dụng kết quả, gửi biểu mẫu và đọc trạng thái trang kết quả |
| SDK CapSolver | Trả về kết quả CAPTCHA thông qua cuộc gọi solve() duy nhất |
2. Bắt đầu nhanh
bash
pip install composio composio-openai-agents openai-agents capsolver pydantic playwright
playwright install chromium
Mỗi phụ thuộc phục vụ một vai trò cụ thể:
| Gói | Mục đích |
|---|---|
| composio | Tạo phiên và đăng ký hoặc tải công cụ tùy chỉnh |
| composio-openai-agents | Chuyển đổi công cụ Composio thành đối tượng mà OpenAI Agents có thể gọi |
| openai-agents | Cung cấp Agent, Runner và bộ nhớ đa lần |
| capsolver | Cung cấp SDK chính thức và trả về kết quả qua solve() |
| pydantic | Định nghĩa lược đồ đầu vào của công cụ |
| playwright | Mở trang, áp dụng kết quả, gửi biểu mẫu và đọc phản hồi |
3. Cấu hình
python
# Khóa API.
COMPOSIO_API_KEY = "ak_..."
OPENAI_API_KEY = "sk-..." # Khóa API OpenAI chính thức của bạn.
os.environ["OPENAI_API_KEY"] = OPENAI_API_KEY # SDK OpenAI đọc khóa từ môi trường.
# Cấu hình CapSolver và Composio.
capsolver.api_key = "CAP-..."
composio = Composio(
api_key=COMPOSIO_API_KEY,
provider=OpenAIAgentsProvider(),
)
Ghi chú cấu hình:
OPENAI_API_KEYphải được ghi vào môi trường vì SDK đọc khóa từ đó;OpenAIAgentsProviderlàm cho các công cụ trả về bởisession.tools()tương thích với Agent; khóa Composio cần quyềnsessions: writehoặc việc tạo phiên sẽ trả về 403.
Hiện tại nhà cung cấp OpenAI của Composio và SDK Agent của OpenAI giải thích biên giới nhà cung cấp và agent được sử dụng bởi cấu hình này.
Nhận mã ưu đãi CapSolver của bạn
Tăng ngân sách tự động hóa của bạn ngay lập tức!
Sử dụng mã ưu đãi CAP26 khi nạp tiền vào tài khoản CapSolver để nhận thêm 5% ưu đãi cho mỗi lần nạp — không giới hạn.
Nhận mã ngay trong Bảng điều khiển CapSolver
4. Triển khai chính
Điều kiện dừng: công cụ chỉ báo cáo thành công khi trang chứa văn bản thành công mong đợi. Khối
finallyđóng trình duyệt trong cả hai trường hợp thành công và thất bại.
python
import os
from typing import List, cast
import capsolver
from agents import Agent, Runner, SQLiteSession
from composio import Composio
from composio.core.models.custom_tool import CustomTool
from composio.core.models.tool_router import ToolRouterExperimentalConfig
from composio_openai_agents import OpenAIAgentsProvider
from playwright.sync_api import sync_playwright
from pydantic import BaseModel, Field
# Khóa API.
COMPOSIO_API_KEY = "ak_..."
OPENAI_API_KEY = "sk-..." # Khóa API OpenAI chính thức của bạn.
os.environ["OPENAI_API_KEY"] = OPENAI_API_KEY
# Cấu hình CapSolver và Composio.
capsolver.api_key = "CAP-..."
composio = Composio(
api_key=COMPOSIO_API_KEY,
provider=OpenAIAgentsProvider(),
)
# Lược đồ đầu vào cho công cụ tùy chỉnh; Composio yêu cầu BaseModel Pydantic ở đây.
class CompleteRecaptchaInput(BaseModel):
target_url: str = Field(
default="https://www.google.com/recaptcha/api2/demo",
description="Địa chỉ URL trang chứa demo reCAPTCHA v2",
)
website_key: str = Field(
default="6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",
description="Khóa website reCAPTCHA v2 từ trang hiện tại",
)
# Đăng ký toàn bộ luồng như một công cụ Composio mà agent có thể gọi.
# Ghi chú kiểu tham số đầu tiên là bắt buộc cho Composio để suy diễn lược đồ.
@composio.experimental.tool(preload=True)
def complete_recaptcha_v2(input: CompleteRecaptchaInput, _ctx):
"""Mở trang bằng Playwright, giải reCAPTCHA v2, gửi và xác minh."""
with sync_playwright() as p:
browser = p.chromium.launch(headless=False) # Đặt headless=True để ẩn cửa sổ.
page = browser.new_page()
try:
page.goto(input.target_url)
# Yêu cầu CapSolver giải reCAPTCHA v2.
solution = capsolver.solve(
{
"type": "ReCaptchaV2TaskProxyLess",
"websiteURL": input.target_url,
"websiteKey": input.website_key,
}
)
token = solution.get("gRecaptchaResponse")
page.evaluate(
"""
(token) => {
const textarea = document.getElementById('g-recaptcha-response');
if (textarea) {
textarea.value = token;
}
}
""",
token,
)
page.click("#recaptcha-demo-submit")
page.wait_for_load_state("networkidle")
result_page = page.content()
# Thành công chỉ khi trang thực sự hiển thị văn bản thành công
accepted = "Verification Success" in result_page
return {
"accepted": accepted,
"message": (
"Verification Success"
if accepted
else "Trang không báo Verification Success"
),
}
finally:
browser.close()
def main():
experimental: ToolRouterExperimentalConfig = {
"custom_tools": cast(List[CustomTool], [complete_recaptcha_v2]),
}
session = composio.sessions.create(
user_id="playwright-recaptcha-demo-user",
experimental=experimental,
sandbox={"enable": False}, # Chạy công cụ trong quá trình này, không phải trong sandbox.
)
agent = Agent(
name="Trợ lý reCAPTCHA Playwright",
instructions=(
"Khi người dùng yêu cầu chạy demo, gọi complete_recaptcha_v2 "
"với giá trị mặc định. Báo cáo thành công chỉ khi accepted là true."
),
model="gpt-5.2",
tools=session.tools(),
)
# Bộ nhớ cho cuộc trò chuyện nhiều lần
memory = SQLiteSession("conversation")
print("Demo Composio + reCAPTCHA v2 Playwright đang chạy...")
user_input = (
"Gọi complete_recaptcha_v2 ngay bây giờ với target_url và website_key mặc định. Không hỏi xác nhận."
)
result = Runner.run_sync(
starting_agent=agent,
input=user_input,
session=memory,
)
print(f"Trợ lý: {result.final_output}\n")
if __name__ == "__main__":
main()
5. Nhận dạng CAPTCHA hình ảnh với ImageToTextTask
Mẫu tương tự có thể xử lý CAPTCHA hình ảnh tiêu chuẩn bằng cách đăng ký công cụ Composio thứ hai. Ví dụ này sử dụng BotDetect CAPTCHA Demo: phần tử hình ảnh là #demoCaptcha_CaptchaImage, đầu vào là #captchaCode, và nút xác minh là #validateCaptchaButton.

Yêu cầu ImageToTextTask gửi hình ảnh Base64 qua body. Khác với các nhiệm vụ dựa trên token, nhiệm vụ này trả về văn bản đã nhận diện trực tiếp và không cần vòng lặp kiểm tra riêng.
5.1 Đọc Hình ảnh dưới dạng Base64
python
image_src = page.locator("#demoCaptcha_CaptchaImage").get_attribute("src")
if not image_src or "," not in image_src:
raise RuntimeError("Không tìm thấy URL dữ liệu hình ảnh CAPTCHA hợp lệ")
base64_image = image_src.split(",", 1)[1] # Loại bỏ phần đầu "data:image/...;base64,"
5.2 Triển khai Công cụ Tùy chỉnh
python
class CompleteImageCaptchaInput(BaseModel):
target_url: str = Field(
default="https://captcha.com/demos/features/captcha-demo.aspx",
description="Địa chỉ URL trang demo CAPTCHA hình ảnh",
)
module: str = Field(
default="common",
description="Mô-đun nhận dạng ImageToTextTask của CapSolver",
)
@composio.experimental.tool(preload=True)
def complete_image_captcha(input: CompleteImageCaptchaInput, _ctx):
"""Mở trang bằng Playwright, nhận dạng CAPTCHA hình ảnh, gửi và xác minh."""
with sync_playwright() as p:
browser = p.chromium.launch(headless=False)
page = browser.new_page()
try:
page.goto(input.target_url)
page.wait_for_selector("#demoCaptcha_CaptchaImage", state="visible")
# src hình ảnh đã là URL dữ liệu; loại bỏ phần đầu để lấy Base64.
image_src = page.locator("#demoCaptcha_CaptchaImage").get_attribute("src")
if not image_src or "," not in image_src:
raise RuntimeError("Không tìm thấy URL dữ liệu hình ảnh CAPTCHA hợp lệ")
base64_image = image_src.split(",", 1)[1]
solution = capsolver.solve(
{
"type": "ImageToTextTask",
"websiteURL": input.target_url,
"module": input.module,
"body": base64_image,
}
)
captcha_text = solution.get("text")
if not isinstance(captcha_text, str) or not captcha_text:
raise RuntimeError("CapSolver không trả về văn bản đã nhận diện")
page.fill("#captchaCode", captcha_text) # Ghi kết quả vào #captchaCode.
page.click("#validateCaptchaButton")
page.wait_for_load_state("networkidle")
result_page = page.content()
# Trang demo hiển thị "Correct!" khi thành công, "Incorrect!" khi thất bại.
accepted = "Correct!" in result_page
return {
"accepted": accepted,
"recognized_text": captcha_text,
"message": "Correct!" if accepted else "Trang không báo Correct!",
}
finally:
browser.close()
Tổng quan luồng:
text
Playwright mở trang CAPTCHA
-> Chờ #demoCaptcha_CaptchaImage hiển thị
-> Đọc src (URL dữ liệu) và loại bỏ phần đầu để lấy Base64
-> capsolver.solve(ImageToTextTask) trả về văn bản
-> page.fill ghi kết quả vào #captchaCode
-> page.click kích hoạt #validateCaptchaButton
-> page.content kiểm tra Correct! hoặc Incorrect!
-> finally đóng trình duyệt
5.3 Chọn Mô-đun Nhận dạng Phù hợp
Tham số module là tùy chọn và mặc định là common. Nếu CAPTCHA chứa chỉ số, sử dụng number. Các phong cách đặc biệt có thể sử dụng mô-đun độc lập được tài liệu khi phù hợp.

Ví dụ, sử dụng mã nguồn nguyên vẹn sau cho nhận dạng chỉ số:
python
solution = capsolver.solve({
"type": "ImageToTextTask",
"module": "number",
"images": [base64_image],
})
answers = solution["answers"]
Mô-đun number hỗ trợ nhiều hình ảnh trong một lần gửi, và images có thể chứa đến chín chuỗi Base64. Các tên mô-đun được hỗ trợ và trường hợp sử dụng được liệt kê trên trang ImageToTextTask của CapSolver.
6. Xử lý Sự cố
6.1 Tham số Đầu tiên của Công cụ Phải Là BaseModel
text
experimental.tool: tham số đầu tiên của "complete_recaptcha_v2" phải được ghi chú bằng lớp con BaseModel Pydantic. Nhận được: <class 'inspect._empty'>
Composio suy diễn lược đồ đầu vào từ ghi chú kiểu tham số đầu tiên, do đó input: CompleteRecaptchaInput không thể bỏ qua. Đây là ghi chú chức năng, không phải ghi chú kiểu tùy chọn. Tài liệu BaseModel Pydantic mô tả kiểu mô hình được sử dụng cho lược đồ.
6.2 Composio Trả về 403
Tạo phiên có thể trả về lỗi sau:
text
403 APIKey_InsufficientPermissions
Đường dẫn này yêu cầu quyền ghi "phiên"
Nguyên nhân là composio.sessions.create() yêu cầu quyền ghi cho khóa dự án, trong khi khóa hiện tại chỉ có quyền đọc. Khóa vẫn hợp lệ nhưng phạm vi không đủ, vì vậy phản hồi là 403 thay vì 401.
Các bước khắc phục:
- Mở bảng điều khiển Composio và truy cập cài đặt Khóa API cho dự án liên quan.
- Thay đổi quyền truy cập phiên của khóa hiện tại từ đọc sang ghi.
- Nếu không thể chỉnh sửa quyền, tạo khóa mới với
sessions: writevà thay thếCOMPOSIO_API_KEYở đầu đoạn mã. - Chạy đoạn mã lại. Nếu đạt được luồng tương tác mà không có 403, điều đó xác nhận quyền đã hoạt động.
7. Kết luận và CTA
Lõi của tích hợp này là quy trình kinh doanh đầy đủ được đóng gói dưới dạng một công cụ Composio:
text
Công cụ Composio = Các hành động trang Playwright + Kết quả CapSolver + Xác minh trạng thái trang
- Composio chuyển đổi hàm Python thành công cụ cho agent và xử lý suy diễn schema và thực thi.
- Playwright mở trang, áp dụng kết quả, gửi biểu mẫu và đọc trạng thái cuối cùng.
- CapSolver xử lý reCAPTCHA v2 và nhận dạng CAPTCHA hình ảnh cho quy trình này.
Chạy ví dụ chỉ trên các trang và quy trình bạn sở hữu hoặc được phép tự động hóa. Sử dụng biến môi trường hoặc quản lý bí mật để lưu trữ thông tin xác thực, dừng lại khi trang không đạt được trạng thái kinh doanh mong đợi và xem xét các lỗi lặp lại thay vì thử lại vô hạn.
Đối với quy trình làm việc của agent Composio được ủy quyền cần lớp hạ tầng CAPTCHA tập trung, hãy kiểm tra CapSolver với các trang do bạn kiểm soát và xác minh kết quả ứng dụng sau mỗi lần giải.
FAQ
Composio xử lý gì trong tích hợp này?
Composio đăng ký hàm Python dưới dạng công cụ tùy chỉnh có thể gọi bởi agent, tạo phiên, hiển thị schema công cụ và định tuyến thực thi từ agent OpenAI.
Tại sao tham số đầu tiên của công cụ phải là BaseModel của Pydantic?
Composio sử dụng ghi chú này để suy diễn schema đầu vào của công cụ. Bỏ qua sẽ ngăn việc xây dựng schema và gây ra lỗi xác thực trước khi quy trình trình duyệt bắt đầu.
Công cụ reCAPTCHA v2 dừng lại sau khi CapSolver trả về token?
Không. Mã không thay đổi áp dụng token, gửi biểu mẫu demo, đọc HTML kết quả và chỉ báo thành công khi trang chứa văn bản "Verification Success" mong đợi.
ImageToTextTask có cần vòng lặp kiểm tra riêng không?
Không. Trong quy trình này, SDK chính thức trả về văn bản đã nhận dạng trực tiếp. Công cụ sau đó điền vào ô nhập, gửi trang và kiểm tra "Correct!" như điều kiện dừng.
Quy trình này có thể sử dụng trên bất kỳ trang web nào không?
Không. Sử dụng chỉ cho tự động hóa hợp pháp, hợp lý, có trách nhiệm và được người dùng ủy quyền. Tôn trọng điều khoản trang, luật pháp áp dụng, giới hạn tốc độ và yêu cầu giảm thiểu dữ liệu.
Tuyên bố Tuân thủ: Thông tin được cung cấp trên blog này chỉ mang tính chất tham khảo. CapSolver cam kết tuân thủ tất cả các luật và quy định hiện hành. Việc sử dụng mạng lưới CapSolver cho các hoạt động bất hợp pháp, gian lận hoặc lạm dụng là hoàn toàn bị cấm và sẽ bị điều tra. Các giải pháp giải captcha của chúng tôi nâng cao trải nghiệm người dùng trong khi đảm bảo tuân thủ 100% trong việc giúp giải quyết các khó khăn về captcha trong quá trình thu thập dữ liệu công khai. Chúng tôi khuyến khích việc sử dụng dịch vụ của chúng tôi một cách có trách nhiệm. Để biết thêm thông tin, vui lòng truy cập Điều khoản Dịch vụ và Chính sách Quyền riêng tư.
Thêm

Cách cài đặt CapSolver MCP từ MCP Registry chính thức
Tìm CapSolver MCP trong Cơ sở dữ liệu MCP Chính thức, cài đặt phiên bản 0.1.3 bằng uvx hoặc pip, cấu hình một client cục bộ và kiểm tra các công cụ stdio.

Anh Tuan
18-Sep-2026

Công cụ CAPTCHA AI Pydantic: Đầu vào có kiểu và Kết quả giải
Thêm công cụ CAPTCHA vào Pydantic AI bằng cách sử dụng adapter CapSolver chính thức, kiểm tra việc thực thi công cụ tại chỗ, và xử lý đầu vào có kiểu và kết quả giải quyết có cấu trúc.

Anh Tuan
18-Sep-2026

MCP so với CLI cho các tác nhân AI: Chi phí ngữ cảnh và Xử lý lỗi
So sánh các giao diện MCP và CLI cho các tác nhân AI theo các yếu tố khám phá công cụ, chi phí ngữ cảnh, bảo mật, gỡ lỗi, xử lý sự cố và kiến trúc lai.

Anh Tuan
18-Sep-2026

Cách xử lý nhiều khối CAPTCHA trong các tác nhân trình duyệt AI
Xử lý nhiều phần tử CAPTCHA trên một trang với sự sở hữu biểu mẫu rõ ràng, tham số giải quyết, định tuyến kết quả và kiểm tra hành động của đại diện AI mong muốn.

Lucas Mitchell
15-Sep-2026

Các Đại diện AI so với Các Kịch Bản: Cách Chọn Cho Tự Động Hóa Web
Chọn giữa các tác nhân AI, các tập lệnh và tự động hóa web lai dựa trên độ không chắc chắn của nhiệm vụ, khả năng kiểm thử, chi phí và các biện pháp kiểm soát cần thiết để thực thi đáng tin cậy.

Lucas Mitchell
11-Sep-2026

Máy chủ MCP của CapSolver đã có sẵn cho các tác nhân AI
Cài đặt Máy chủ CapSolver MCP từ PyPI và cung cấp cho các đại diện AI tương thích năm công cụ để xử lý CAPTCHA được ủy quyền qua Giao thức Bối cảnh Mô hình.

Anh Tuan
10-Sep-2026


