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

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

Logo of CapSolver

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 Copy
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 Copy
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 Copy
# 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_KEY phải được ghi vào môi trường vì SDK đọc khóa từ đó; OpenAIAgentsProvider làm cho các công cụ trả về bởi session.tools() tương thích với Agent; khóa Composio cần quyền sessions: write hoặc việc tạo phiên sẽ trả về 403.

Hiện tại nhà cung cấp OpenAI của ComposioSDK 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
Mã ưu đãi

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 Copy
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.

Hình ảnh CAPTCHA BotDetect, đầu vào và phần tử xác minh được kiểm tra trong trình duyệt

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 Copy
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 Copy
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 Copy
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ụ và giá trị độ chính xác của mô-đun ImageToTextTask của CapSolver

Ví dụ, sử dụng mã nguồn nguyên vẹn sau cho nhận dạng chỉ số:

python Copy
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 Copy
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 Copy
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:

  1. Mở bảng điều khiển Composio và truy cập cài đặt Khóa API cho dự án liên quan.
  2. Thay đổi quyền truy cập phiên của khóa hiện tại từ đọc sang ghi.
  3. Nếu không thể chỉnh sửa quyền, tạo khóa mới với sessions: write và thay thế COMPOSIO_API_KEY ở đầu đoạn mã.
  4. 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 Copy
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

Hướng dẫn Hệ thống đăng ký chính thức CapSolver MCP hiển thị bản ghi đăng ký, lệnh uvx, biến khóa API và trạng thái stdio đang hoạt động
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.

ai
Logo of CapSolver

Anh Tuan

18-Sep-2026

Công cụ CAPTCHA AI Pydantic: Nhập liệu có kiểu và Kết quả giải
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.

ai
Logo of CapSolver

Anh Tuan

18-Sep-2026

Các giao diện MCP và CLI kết nối với một dịch vụ công cụ trí tuệ nhân tạo (AI)
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.

ai
Logo of CapSolver

Anh Tuan

18-Sep-2026

Trình duyệt AI chọn mẫu đơn mong muốn, phân biệt widget CAPTCHA của nó và xác minh kết quả nộp.
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.

ai
Logo of CapSolver

Lucas Mitchell

15-Sep-2026

Các Đại diện AI so với Script: Cách chọn cho Tự động hóa Web với một sơ đồ về các quyết định chính
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.

ai
Logo of CapSolver

Lucas Mitchell

11-Sep-2026

Máy chủ MCP của CapSolver kết nối một tác nhân AI với năm công cụ tự động hóa
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.

ai
Logo of CapSolver

Anh Tuan

10-Sep-2026