Cara mengintegrasikan CapSolver dengan Composio AI Otomasi Peramban

Emma Foster
How to use CapSolver
17-Aug-2026
TL;DR
- Wrap seluruh alur kerja halaman Playwright — buka, selesaikan, terapkan hasil, kirim, dan verifikasi — dalam alat kustom Composio yang dapat dipanggil oleh SDK Agens AI OpenAI dari instruksi berbahasa alami.
- Contoh ini mencakup dua jenis tantangan: reCAPTCHA v2 dengan token yang dikembalikan dan pengenalan CAPTCHA gambar dengan ImageToTextTask, yang didaftarkan sebagai alat terpisah dalam satu sesi.
- Alur kerja terhubung langsung ke API OpenAI resmi dan menggunakan Playwright untuk otomasi browser.
- Dua kegagalan integrasi umum adalah kunci Composio tanpa izin
sessions: write, yang mengembalikan 403, dan parameter pertama alat tanpa anotasi BaseModel Pydantic, yang memicu ValidationError.
1. Pendahuluan
Panduan ini mengintegrasikan CapSolver dengan Composio sebagai alat agen yang menyelesaikan alur kerja reCAPTCHA v2. Alih-alih hanya mengembalikan token, alat ini menjalankan seluruh urutan halaman dan menganggap respons halaman sebagai kondisi keberhasilan. SDK Agens OpenAI menentukan kapan alat dipanggil, sementara otomasi browser Playwright mempertahankan konteks halaman yang digunakan untuk pengiriman dan verifikasi.
Gunakan pola ini hanya untuk alur kerja yang sah, wajar, bertanggung jawab, dan diizinkan pengguna. Kemampuan teknis tidak memberikan izin untuk mengakses data pribadi, terbatas, sensitif, atau tidak diizinkan; tinjau panduan otomasi AI sebelum deployment.
Alur kerja:
text
Jalankan skrip
-> SDK Agens OpenAI menentukan alat yang dipanggil
-> Alat kustom Composio: complete_recaptcha_v2
-> Playwright membuka halaman
-> capsolver.solve(...) mengembalikan gRecaptchaResponse
-> Terapkan token ke g-recaptcha-response
-> Playwright mengirim dan menunggu halaman
-> Baca halaman dan tentukan diterima
-> Alat mengembalikan {"accepted": ..., "message": ...}
-> Agen melaporkan hasil dari accepted
Komponen memiliki tanggung jawab berikut:
| Komponen | Tanggung Jawab |
|---|---|
| SDK Agens OpenAI | Memahami instruksi berbahasa alami, menentukan kapan alat dipanggil, menjalankannya, dan mengatur respons |
| Composio | Mendaftarkan fungsi Python standar sebagai alat yang dapat dipanggil agen |
| Playwright | Membuka halaman, menerapkan hasil, mengirim formulir, dan membaca status halaman yang dihasilkan |
| SDK CapSolver | Mengembalikan hasil CAPTCHA melalui panggilan solve() tunggal |
2. Mulai Cepat
bash
pip install composio composio-openai-agents openai-agents capsolver pydantic playwright
playwright install chromium
Setiap dependensi memiliki peran spesifik:
| Paket | Tujuan |
|---|---|
| composio | Membuat sesi dan mendaftarkan atau memuat alat kustom |
| composio-openai-agents | Mengonversi alat Composio menjadi objek yang dapat dipanggil oleh OpenAI Agents |
| openai-agents | Menyediakan Agent, Runner, dan memori multi-turn SQLite |
| capsolver | Menyediakan SDK resmi dan mengembalikan hasil melalui solve() |
| pydantic | Mendefinisikan skema input alat |
| playwright | Membuka halaman, menerapkan hasil, mengirim formulir, dan membaca respons |
3. Konfigurasi
python
# Kunci API.
COMPOSIO_API_KEY = "ak_..."
OPENAI_API_KEY = "sk-..." # Kunci API OpenAI resmi Anda.
os.environ["OPENAI_API_KEY"] = OPENAI_API_KEY # SDK OpenAI membaca kunci dari lingkungan.
# Konfigurasi CapSolver dan Composio.
capsolver.api_key = "CAP-..."
composio = Composio(
api_key=COMPOSIO_API_KEY,
provider=OpenAIAgentsProvider(),
)
Catatan konfigurasi:
OPENAI_API_KEYharus ditulis ke lingkungan karena SDK membaca dari sana;OpenAIAgentsProvidermembuat alat yang dikembalikan olehsession.tools()kompatibel dengan Agent; dan kunci Composio memerlukan izinsessions: writeatau pembuatan sesi mengembalikan 403.
Penyedia OpenAI Composio dan SDK Agens OpenAI saat ini menjelaskan batas penyedia dan agen yang digunakan oleh konfigurasi ini.
Tukarkan Kode Bonus CapSolver Anda
Meningkatkan anggaran otomasi Anda secara instan!
Gunakan kode bonus CAP26 saat menambahkan dana ke akun CapSolver Anda untuk mendapatkan tambahan 5% bonus pada setiap penambahan dana — tanpa batas.
Tukarkan sekarang di Dashboard CapSolver Anda
4. Implementasi Inti
Kondisi berhenti: alat hanya melaporkan keberhasilan jika halaman mengandung teks keberhasilan yang diharapkan. Blok
finallymenutup browser di jalur keberhasilan dan kegagalan.
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
# Kunci API.
COMPOSIO_API_KEY = "ak_..."
OPENAI_API_KEY = "sk-..." # Kunci API OpenAI resmi Anda.
os.environ["OPENAI_API_KEY"] = OPENAI_API_KEY
# Konfigurasi CapSolver dan Composio.
capsolver.api_key = "CAP-..."
composio = Composio(
api_key=COMPOSIO_API_KEY,
provider=OpenAIAgentsProvider(),
)
# Skema input untuk alat kustom; Composio memerlukan BaseModel Pydantic di sini.
class CompleteRecaptchaInput(BaseModel):
target_url: str = Field(
default="https://www.google.com/recaptcha/api2/demo",
description="URL halaman yang berisi demo reCAPTCHA v2",
)
website_key: str = Field(
default="6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",
description="Kunci website reCAPTCHA v2 dari halaman saat ini",
)
# Daftarkan seluruh alur sebagai satu alat Composio yang dapat dipanggil agen.
# Anotasi tipe parameter pertama diperlukan oleh Composio untuk menerka skema.
@composio.experimental.tool(preload=True)
def complete_recaptcha_v2(input: CompleteRecaptchaInput, _ctx):
"""Buka halaman dengan Playwright, selesaikan reCAPTCHA v2, kirim, dan verifikasi."""
with sync_playwright() as p:
browser = p.chromium.launch(headless=False) # Atur headless=True untuk menyembunyikan jendela.
page = browser.new_page()
try:
page.goto(input.target_url)
# Minta CapSolver untuk menyelesaikan tantangan 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()
# Keberhasilan hanya jika halaman benar-benar menunjukkan teks keberhasilan
accepted = "Verification Success" in result_page
return {
"accepted": accepted,
"message": (
"Verification Success"
if accepted
else "Halaman tidak melaporkan 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}, # Jalankan alat dalam proses ini, bukan sandbox.
)
agent = Agent(
name="Asisten reCAPTCHA Playwright",
instructions=(
"Ketika pengguna meminta menjalankan demo, panggil complete_recaptcha_v2 "
"dengan nilai defaultnya. Laporkan keberhasilan hanya ketika accepted bernilai true."
),
model="gpt-5.2",
tools=session.tools(),
)
# Memori untuk percakapan multi-turn
memory = SQLiteSession("conversation")
print("Demo Composio + reCAPTCHA v2 Playwright berjalan sekali...")
user_input = (
"Panggil complete_recaptcha_v2 sekarang dengan target_url dan website_key defaultnya. "
"Jangan tanyakan konfirmasi."
)
result = Runner.run_sync(
starting_agent=agent,
input=user_input,
session=memory,
)
print(f"Assistant: {result.final_output}\n")
if __name__ == "__main__":
main()
5. Pengenalan CAPTCHA Gambar dengan ImageToTextTask
Pola yang sama dapat menangani CAPTCHA teks gambar standar dengan mendaftarkan alat Composio kedua. Contoh ini menggunakan BotDetect CAPTCHA Demo: elemen gambar adalah #demoCaptcha_CaptchaImage, inputnya adalah #captchaCode, dan tombol validasinya adalah #validateCaptchaButton.

Permintaan ImageToTextTask mengirimkan gambar Base64 melalui body. Berbeda dengan tugas berbasis token, tugas ini mengembalikan teks yang dikenali secara langsung dan tidak memerlukan loop polling terpisah.
5.1 Baca Gambar sebagai Base64
python
image_src = page.locator("#demoCaptcha_CaptchaImage").get_attribute("src")
if not image_src or "," not in image_src:
raise RuntimeError("Tidak ditemukan URL Data CAPTCHA yang valid")
base64_image = image_src.split(",", 1)[1] # Hilangkan awalan "data:image/...;base64,"
5.2 Implementasi Alat Kustom
python
class CompleteImageCaptchaInput(BaseModel):
target_url: str = Field(
default="https://captcha.com/demos/features/captcha-demo.aspx",
description="URL halaman demo CAPTCHA gambar",
)
module: str = Field(
default="common",
description="Modul recognition ImageToTextTask CapSolver",
)
@composio.experimental.tool(preload=True)
def complete_image_captcha(input: CompleteImageCaptchaInput, _ctx):
"""Buka halaman dengan Playwright, kenali CAPTCHA gambar, kirim, dan verifikasi."""
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 gambar sudah berupa URL data; hilangkan awalan untuk dapatkan Base64.
image_src = page.locator("#demoCaptcha_CaptchaImage").get_attribute("src")
if not image_src or "," not in image_src:
raise RuntimeError("Tidak ditemukan URL Data CAPTCHA yang valid")
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 tidak mengembalikan teks yang dikenali")
page.fill("#captchaCode", captcha_text) # Isi teks yang dikenali.
page.click("#validateCaptchaButton")
page.wait_for_load_state("networkidle")
result_page = page.content()
# Halaman demo menunjukkan "Correct!" pada keberhasilan, "Incorrect!" pada kegagalan.
accepted = "Correct!" in result_page
return {
"accepted": accepted,
"recognized_text": captcha_text,
"message": "Correct!" if accepted else "Halaman tidak melaporkan Correct!",
}
finally:
browser.close()
Ringkasan alur:
text
Playwright membuka halaman CAPTCHA
-> Tunggu #demoCaptcha_CaptchaImage menjadi terlihat
-> Baca src (URL data) dan hapus awalan untuk dapatkan Base64
-> capsolver.solve(ImageToTextTask) mengembalikan teks
-> page.fill menulis hasil ke #captchaCode
-> page.click mengaktifkan #validateCaptchaButton
-> page.content memeriksa Correct! atau Incorrect!
-> finally menutup browser
5.3 Pilih Model Pengenalan yang Tepat
Parameter module opsional dan defaultnya common. Jika CAPTCHA berisi hanya angka, gunakan number. Gaya khusus dapat menggunakan model independen yang terdokumentasi saat sesuai.

Sebagai contoh, gunakan sumber kode yang tidak berubah untuk pengenalan hanya angka:
python
solution = capsolver.solve({
"type": "ImageToTextTask",
"module": "number",
"images": [base64_image],
})
answers = solution["answers"]
Model number mendukung beberapa gambar dalam satu pengiriman, dan images dapat berisi hingga sembilan string Base64. Nama model yang didukung dan kasus penggunaan tercantum di halaman ImageToTextTask CapSolver yang terkait.
6. Pemecahan Masalah
6.1 Parameter Pertama Alat Harus Berupa BaseModel
text
experimental.tool: parameter pertama dari "complete_recaptcha_v2" harus
dianotasi dengan subclass BaseModel Pydantic. Dapat: <class 'inspect._empty'>
Composio menerka skema input dari anotasi tipe parameter pertama, jadi input: CompleteRecaptchaInput tidak boleh dilewati. Ini adalah anotasi fungsional, bukan tipet yang opsional. Referensi BaseModel Pydantic menjelaskan tipe model yang digunakan untuk skema.
6.2 Composio Mengembalikan 403
Pembuatan sesi dapat mengembalikan kesalahan berikut:
text
403 APIKey_InsufficientPermissions
Rute ini memerlukan akses tulis "sessions"
Penyebabnya adalah bahwa composio.sessions.create() memerlukan akses tulis proyek untuk sesi, sementara kunci saat ini hanya memiliki akses baca. Kunci valid, tetapi skopnya tidak memadai, sehingga responsnya 403 alih-alih 401.
Langkah penyelesaian:
- Buka dashboard Composio dan pergi ke pengaturan API Keys untuk proyek yang relevan.
- Ubah izin sesi kunci saat ini dari baca menjadi tulis.
- Jika izin tidak dapat diedit, buat kunci baru dengan
sessions: writedan gantiCOMPOSIO_API_KEYdi bagian atas skrip. - Jalankan skrip kembali. Mencapai alur interaktif tanpa 403 memastikan bahwa izin aktif.
7. Kesimpulan dan CTA
Inti dari integrasi ini adalah alur kerja bisnis lengkap yang dikemas sebagai satu alat Composio:
text
Alat Composio = Tindakan halaman Playwright + Hasil CapSolver + Verifikasi state halaman
- Composio mengonversi fungsi Python menjadi alat agen dan menangani inferensi skema serta eksekusi.
- Playwright membuka halaman, menerapkan hasil, mengirim formulir, dan membaca state akhir.
- CapSolver menangani reCAPTCHA v2 dan pengenalan CAPTCHA gambar untuk alur kerja ini.
Jalankan contoh hanya pada halaman dan proses yang Anda miliki atau diizinkan untuk otomasi. Gunakan variabel lingkungan atau manajer rahasia untuk kredensial, hentikan saat halaman tidak mencapai state bisnis yang diharapkan, dan tinjau kegagalan berulang alih-alih mengulang tak terbatas.
Untuk alur kerja agen Composio yang diizinkan yang membutuhkan lapisan infrastruktur CAPTCHA yang fokus, uji CapSolver dengan halaman yang Anda kendalikan sendiri dan verifikasi hasil aplikasi setelah setiap penyelesaian.
FAQ
Apa yang dikelola oleh Composio dalam integrasi ini?
Composio mendaftarkan fungsi Python sebagai alat kustom yang dapat dipanggil agen, membuat sesi, mengekspos skema alat, dan mengarahkan eksekusi dari agen OpenAI.
Mengapa parameter alat pertama harus berupa Pydantic BaseModel?
Composio menggunakan anotasi ini untuk menurunkan skema input alat. Menghilangkannya mencegah pembuatan skema dan memicu kesalahan validasi sebelum alur kerja browser dimulai.
Apakah alat reCAPTCHA v2 berhenti setelah CapSolver mengembalikan token?
Tidak. Kode yang tidak berubah menerapkan token, mengirim formulir demo, membaca HTML hasil, dan melaporkan keberhasilan hanya ketika halaman mengandung teks Verifikasi Berhasil yang diharapkan.
Apakah ImageToTextTask memerlukan loop polling terpisah?
Tidak. Dalam alur kerja ini, SDK resmi mengembalikan teks yang dikenali secara langsung. Alat kemudian mengisi input, mengirim halaman, dan memeriksa teks "Benar!" sebagai kondisi berhenti.
Apakah alur kerja ini dapat digunakan di situs apa pun?
Tidak. Gunakan hanya untuk otomasi yang sah, wajar, bertanggung jawab, dan diizinkan pengguna. Hormati ketentuan situs, hukum yang berlaku, batas kecepatan, dan persyaratan minimisasi data.
Pernyataan Kepatuhan: Informasi yang diberikan di blog ini hanya untuk tujuan informasi. CapSolver berkomitmen untuk mematuhi semua hukum dan peraturan yang berlaku. Penggunaan jaringan CapSolver untuk kegiatan ilegal, penipuan, atau penyalahgunaan sangat dilarang dan akan diselidiki. Solusi penyelesaian captcha kami meningkatkan pengalaman pengguna sambil memastikan kepatuhan 100% dalam membantu menyelesaikan kesulitan captcha selama pengambilan data publik. Kami mendorong penggunaan layanan kami secara bertanggung jawab. Untuk informasi lebih lanjut, silakan kunjungi Syarat Layanan dan Kebijakan Privasi.
Lebih lanjut

Cara menginstal CapSolver MCP dari Registri MCP Resmi
Cari CapSolver MCP di Registry MCP Resmi, pasang versi 0.1.3 dengan uvx atau pip, konfigurasi klien lokal, dan verifikasi alat stdio.

Khadija Santos
18-Sep-2026

Alat CAPTCHA AI Pydantic: Input yang Diketik dan Hasil Pemecah
Tambahkan alat CAPTCHA ke Pydantic AI menggunakan adapter CapSolver resmi, uji eksekusi alat secara lokal, dan kelola input yang ditentukan tipe serta hasil penyelesaian yang terstruktur.

Emma Foster
18-Sep-2026

MCP vs CLI untuk Agen AI: Biaya Konteks dan Penanganan Kegagalan
Membandingkan antarmuka MCP dan CLI untuk agen AI dalam hal penemuan alat, biaya konteks, keamanan, debugging, penanganan kegagalan, dan arsitektur hibrid.

Nikolai Smirnov
18-Sep-2026

Cara Mengatasi Banyak Widget CAPTCHA dalam Agen Browser Kecerdasan Buatan
Menangani beberapa widget CAPTCHA di satu halaman dengan pemilikan formulir yang jelas, parameter solver, pengalihan hasil, dan pemeriksaan tindakan agen AI yang diinginkan.

Lucas Mitchell
15-Sep-2026

Agen AI vs Skrip: Bagaimana Memilih untuk Otomasi Web
Pilih antara agen AI, skrip, dan otomatisasi web hibrid berdasarkan ketidakpastian tugas, kemampuan pengujian, biaya, dan kontrol yang diperlukan untuk eksekusi yang andal.

Lucas Mitchell
11-Sep-2026

Server MCP CapSolver Sekarang Tersedia untuk Agens AI
Pasang Server MCP CapSolver dari PyPI dan berikan agen AI yang kompatibel lima alat untuk penanganan CAPTCHA yang diizinkan melalui Protokol Konteks Model.

Emma Foster
10-Sep-2026


