
Lucas Mitchell
Automation Engineer
Diterbitkan Oct 22, 2026
Diperbarui Oct 22, 2026 · min baca

Sebuah skrip Patchright mungkin dapat melakukan navigasi dengan sukses, menemukan form, lalu berhenti pada widget reCAPTCHA. Mengganti library browser tidak otomatis menyediakan respons yang dibutuhkan widget dan aplikasi. Pada titik itu Anda memerlukan solver CAPTCHA, plus pengecekan bahwa aplikasi menerima hasilnya.
Tutorial solver CAPTCHA Patchright ini menghubungkan sesi browser Python ke CapSolver melalui Core SDK resminya. Detail pentingnya adalah environment JavaScript halaman: membaca DOM yang terlihat dan membaca konfigurasi reCAPTCHA yang dimiliki halaman adalah dua operasi berbeda. Contoh di bawah menangani perbedaan itu, menjaga hanya satu halaman tetap terbuka, dan memverifikasi deteksi di fixture pengembangan lokal. Gunakan pendekatan ini untuk halaman yang Anda miliki atau yang Anda punya izin untuk diautomasi.
Patchright adalah turunan Playwright yang dipelihara komunitas dengan antarmuka otomasi Python yang serupa. Repositori Python resmi mendokumentasikan dukungan Chromiumnya dan penggunaannya sebagai pengganti import untuk Playwright. Firefox dan WebKit tidak didukung oleh Patchright.
Developer memakai Patchright untuk mengontrol halaman, berinteraksi dengan elemen, dan menjalankan workflow browser. Solver menjadi relevan ketika CAPTCHA yang didukung mencegah workflow terotorisasi menyelesaikan form atau mencapai hasil yang diharapkan. Jika halaman Anda sudah dapat diakses, tidak ada alasan untuk mengirim permintaan solving berbayar.
Integrasi ini memiliki tiga tanggung jawab terpisah. Patchright mengelola navigasi dan lifecycle halaman. Solver membaca input tantangan yang didukung dan meminta solusi. Workflow aplikasi Anda yang memutuskan apakah form atau halaman berikutnya benar‑benar berhasil. Glosarium CAPTCHA menjelaskan mekanisme verifikasi di balik pemisahan ini.
Untuk pengujian rutin terhadap aplikasi Anda sendiri, utamakan pengaturan pengembangan dari vendor CAPTCHA. Pengecekan integrasi solver berbayar adalah tugas terpisah dari pengujian apakah validasi form biasa Anda berfungsi.
Deteksi reCAPTCHA mungkin memerlukan konfigurasi yang dibuat widget di environment JavaScript utama halaman. Opsi evaluate() yang didokumentasikan Patchright, isolated_context, secara bawaan bernilai True; global JavaScript milik halaman oleh karena itu bisa tidak ada dalam evaluasi biasa meskipun widget terlihat.
Dalam contoh terkontrol yang digunakan untuk panduan ini, evaluasi bawaan tidak dapat melihat window.___grecaptcha_cfg, sementara evaluasi dengan isolated_context=False bisa. SDK memerlukan akses ke state halaman tersebut untuk jalur reCAPTCHA ini. Timeout atau hasil deteksi kosong karenanya harus memicu pengecekan konteks sebelum Anda mengubah site key atau mengirim permintaan solving berulang.
Adapter di bawah meneruskan evaluasi SDK ke environment utama halaman. Adapter ini tidak memodifikasi file terinstal Patchright atau mengganti environment untuk setiap operasi browser. Navigasi dan locator biasa tetap pada raw_page; hanya objek halaman yang diberikan ke SDK yang memakai wrapper ini. Perlakukan sebagai contoh integrasi yang sudah diuji untuk versi yang tercantum di bawah, bukan klaim kemitraan resmi Patchright atau kompatibilitas universal.
Contoh ini memakai Python 3.12, Patchright 1.64.1, dan capsolver-core 0.1.1. Instal paket‑paketnya di environment terisolasi dan instal runtime Chromium Patchright. Kunci (pin) versi ini untuk pengecekan setup sehingga upgrade paket tidak diam‑diam mengubah perilaku.
python3 -m venv .venv
source .venv/bin/activate
python -m pip install "patchright==1.64.1" "capsolver-core==0.1.1"
python -m patchright install chromium
Contoh deteksi tidak memerlukan API key CapSolver. Solving aktual memerlukan key valid milik Anda dan resource akun yang cukup. Konfigurasikan klien dengan opsi terdokumentasi create_capsolver(api_key=...) dan simpan key di konfigurasi rahasia aplikasi Anda. Panduan Core SDK mendokumentasikan pembuatan klien, deteksi, solving, dan field hasil.
Pengecekan setup di bawah dieksekusi terhadap halaman lokal menggunakan public test key reCAPTCHA Google. Solving berbayar, pengisian balik token, dan penerimaan token yang tersolve oleh aplikasi tidak dijalankan untuk panduan ini. Jangan gunakan fixture ini sebagai tes tingkat keberhasilan produksi.
Pengecekan setup membuka satu fixture lokal, menunggu widget uji terinisialisasi, dan mencetak parameter CAPTCHA yang dikembalikan SDK resmi. Simpan sebagai patchright_sdk_check.py dan jalankan dengan Python di environment di atas.
URL lokal dilayani melalui route browser, sehingga tidak diperlukan web server terpisah. Script widget tetap dimuat dari Google dan memerlukan akses jaringan. Public site key berasal dari panduan pengujian reCAPTCHA Google; ini adalah key pengembangan, bukan kredensial privat.
import asyncio
import json
from capsolver_core import create_capsolver
from patchright.async_api import async_playwright
TEST_URL = "http://127.0.0.1:8765/"
HTML = """<!doctype html><html><head><title>CAPTCHA integration check</title></head>
<body><h1>Owned development page</h1>
<div class="g-recaptcha" data-sitekey="6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI"></div>
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
</body></html>"""
class MainWorldPage:
def __init__(self, page):
self._page = page
@property
def url(self):
return self._page.url
async def evaluate(self, expression, arg=None):
return await self._page.evaluate(expression, arg, isolated_context=False)
async def wait_for_selector(self, selector, **kwargs):
return await self._page.wait_for_selector(selector, **kwargs)
async def main():
async with async_playwright() as p:
browser = await p.chromium.launch(headless=True)
try:
raw_page = await browser.new_page()
await raw_page.route(
TEST_URL, lambda route: route.fulfill(content_type="text/html", body=HTML)
)
await raw_page.goto(TEST_URL)
page = MainWorldPage(raw_page)
for _ in range(60):
ready = await page.evaluate(
"() => !!window.___grecaptcha_cfg && "
"Object.keys(window.___grecaptcha_cfg.clients || {}).length > 0"
)
if ready:
break
await asyncio.sleep(0.5)
else:
raise RuntimeError("Test widget did not initialize")
async with create_capsolver() as cap:
infos = await cap.get_captcha_info(page)
result = [{"type": info.type.value, "url": info.website_url,
"site_key": info.website_key} for info in infos]
print(json.dumps({"captcha_parameters": result}))
assert result and result[0]["type"] == "reCaptchaV2"
finally:
await browser.close()
if __name__ == "__main__":
asyncio.run(main())
Eksekusi yang berhasil mengembalikan satu item dengan tipe reCaptchaV2, URL halaman lokal, dan public test site key. Hasil itu mengonfirmasi bahwa Patchright membuka halaman dan SDK dapat membaca widget yang telah terinisialisasi melalui adapter. Hasil tersebut tidak berisi token yang tersolve dan tidak membuktikan bahwa form produksi akan menerimanya.
Browser ditutup di blok finally, termasuk ketika pemuatan widget atau deteksi gagal. Klien SDK juga keluar dari konteks asynchronous‑nya. Pertahankan pembersihan ini saat memindahkan integrasi ke skrip yang lebih panjang, terutama ketika tantangan menyebabkan pengecualian.
Redeem Kode Bonus CapSolver Anda
Tingkatkan anggaran otomasi Anda secara instan!
Gunakan kode bonus CAP26 saat mengisi saldo akun CapSolver untuk mendapatkan bonus 5% ekstra pada setiap top up — tanpa batas.
Tukarkan sekarang di Dashboard CapSolver
Solving harus ditempatkan di dalam konteks browser dan SDK yang masih aktif, sebelum halaman ditutup atau bernavigasi pergi. Pada halaman aplikasi terotorisasi Anda, buat klien SDK dengan key milik Anda, bungkus halaman Patchright saat ini seperti di atas, dan gunakan pemanggilan browser-mode resmi.
Baris berikut adalah pemanggilan SDK resmi, tanpa perubahan. Baris ini memerlukan API key yang sudah dikonfigurasi; eksekusi berbayar dengan adapter Patchright ini tidak diuji di sini. Letakkan sementara cap dan page yang sudah di-wrap masih berada dalam scope, bukan menjalankannya sebagai skrip terpisah.
results = await cap.solve_on_page(page)
Inspeksi item yang dikembalikan sebelum melanjutkan. SDK mengekspose error, solution, dan filled sehingga Anda bisa membedakan percobaan gagal, solusi yang dikembalikan, dan pengisian balik token. Jangan submit form jika solusi yang diperlukan tidak ada atau hasil terkait melaporkan error.
Untuk reCAPTCHA v2, parameter task resmi menjelaskan hubungan antara URL halaman, site key, dan tipe task. Konfirmasikan bahwa tantangan yang terdeteksi sesuai dengan halaman yang dimaksud. Key yang disalin dari environment lain atau state halaman lama bukanlah input berguna hanya karena formatnya benar.
Keberhasilan aplikasi adalah pengecekan terpisah setelah solving dan pengisian balik. Workflow Anda mungkin masih perlu mengirimkan form atau menunggu callback spesifik halaman. Panduan verifikasi sisi server dari Google menjelaskan mengapa aplikasi harus memvalidasi respons. Definisikan sinyal keberhasilan dari aplikasi Anda sendiri, seperti pesan konfirmasi atau bagian hasil yang diharapkan, dan hentikan ketika sinyal tersebut tidak muncul.
Hindari menganggap respons HTTP, string token, atau filled=True sebagai bukti bahwa seluruh tugas browser berhasil. Jika halaman menolak respons, simpan ringkasan error yang berguna dan inspeksi penyebabnya sebelum mencoba lagi. Panduan tentang token dan cookie CAPTCHA memberikan konteks untuk menafsirkan output solver.
Troubleshooting harus dimulai dari langkah pertama yang gagal: pemuatan halaman, inisialisasi widget, akses konteks, solving, atau penerimaan aplikasi.
| Gejala | Periksa terlebih dahulu |
|---|---|
| Widget uji tidak pernah terinisialisasi | Konfirmasikan bahwa browser bisa memuat script Google dan widget ada di halaman yang dimaksud. |
| Widget terlihat tapi deteksi kosong | Konfirmasikan bahwa SDK menerima halaman yang sudah di-wrap dan akses environment utama berfungsi untuk versi yang Anda kunci. |
| SDK mengembalikan error | Baca error yang didokumentasikan, verifikasi kredensial dan input task, dan hindari mengulang permintaan tidak valid yang sama. |
| Solusi ada tetapi fill-back bernilai false | Inspeksi penanganan tantangan yang didukung dan state halaman sebelum mengirimkan apa pun. |
| Fill-back berhasil tetapi workflow berhenti | Periksa action form, perilaku callback, dan sinyal penolakan atau keberhasilan dari aplikasi itu sendiri. |
Mulailah dengan satu halaman dan satu percobaan. Tambahkan percobaan ulang yang dibatasi hanya setelah Anda memahami kegagalan mana yang bersifat sementara. Menggunakan ulang hasil sebelumnya setelah navigasi dapat mengaitkan solusi dengan state halaman yang salah, sementara mengulang tanpa analisis bisa menambah biaya tanpa memperbaiki masalah awal.
Perubahan Patchright dan perubahan SDK harus diuji bersama sebelum meng‑upgrade job otomasi. API yang familier tidak menjamin perilaku eksekusi identik untuk setiap ekstensi Playwright atau SDK. Pertahankan pengecekan deteksi kecil ini sebagai tes kompatibilitas, dan jalankan cek solving‑dan‑aplikasi yang terotorisasi secara terpisah di environment Anda sendiri sebelum digunakan di produksi.
Integrasi Patchright yang berguna menghubungkan halaman browser saat ini, task CAPTCHA yang didukung, dan hasil aplikasi yang dapat diamati. Verifikasi akses konteks halaman terlebih dahulu, lalu validasi solving berbayar dengan kredensial Anda sendiri, dan akhirnya cek bahwa aksi browser yang dimaksud telah selesai. Ini menjaga CapSolver tetap fokus pada langkah CAPTCHA tanpa mengasumsikan bahwa setiap masalah navigasi adalah tantangan yang bisa diselesaikannya.
Gunakan CapSolver ketika workflow Patchright terotorisasi Anda membutuhkan respons CAPTCHA yang didukung. Jadikan solving bersyarat pada tantangan yang benar‑benar muncul dan verifikasi hasilnya sebelum memperluas beban kerja.
T: Apakah Patchright menyelesaikan reCAPTCHA sendiri?
Tidak. Kontrol browser tidak menyediakan token solusi reCAPTCHA. Jika halaman terotorisasi Anda masih membutuhkan respons CAPTCHA, tambahkan langkah solving yang didukung atau gunakan konfigurasi pengujian pengembangan aplikasi.
T: Mengapa widget yang terlihat bisa menghasilkan hasil deteksi kosong?
Skrip mungkin membaca environment JavaScript yang berbeda dari tempat widget menginisialisasi konfigurasinya. Periksa inisialisasi dan akses environment utama sebelum berasumsi site key hilang.
T: Apakah ini integrasi resmi Patchright?
Tidak. Ini adalah contoh integrasi yang memakai paket resmi Patchright dan CapSolver SDK. Adapter kustom dan skrip deteksi dijalankan dengan versi yang tercantum; solving berbayar tidak diuji.
T: Apakah saya memerlukan API key untuk pengecekan setup lokal?
Tidak. Pengecekan setup hanya membaca parameter widget pengembangan publik. API key yang valid dan resource akun diperlukan untuk pemanggilan solving terpisah.
T: Bisakah saya memakai Firefox atau WebKit dengan contoh ini?
Tidak. Dokumen Patchright mendukung browser berbasis Chromium. Contoh tersebut menjalankan runtime Chromium-nya.
T: Apakah pengisian kembali token berarti bahwa formulir telah lolos verifikasi?
Tidak. Pengisian kembali token dan penerimaan aplikasi adalah dua hasil yang terpisah. Periksa respons aplikasi setelah tindakan yang diperlukan sebelum melanjutkan alur kerja Anda.

Lucas Mitchell
Automation Engineer
Helping browser automation recover and continue.
TENTANG PENULIS
Pelajari arsitektur pengambilan data web Rust yang dapat diskalakan dengan reqwest, scraper, pengambilan data asinkron, pengambilan data browser tanpa tampilan, rotasi proxy, dan penanganan CAPTCHA yang sesuai aturan.

Mengotomasi penyelesaian CAPTCHA dengan Nanobot dan CapSolver. Gunakan Playwright untuk menyelesaikan reCAPTCHA dan Cloudflare secara otomatis.
