CAPSOLVER
Blog
Cara Menambahkan Pemecah CAPTCHA ke Steel Browser yang Di-host Sendiri

Cara Menambahkan Pemecah CAPTCHA ke Steel Browser yang Di-Hosting Sendiri

Logo of CapSolver

Aloísio Vítor

How to use CapSolver

23-Oct-2026

TL;DR

  • Steel Local menyediakan sesi browser, tetapi matriks fitur resminya tidak mencantumkan kemampuan pemecahan CAPTCHA bawaan.
  • Hubungkan Python ke URL WebSocket yang dikembalikan oleh instance Steel self-hosted Anda, lalu teruskan halaman Playwright saat ini ke SDK CAPTCHA.
  • Contoh di bawah dijalankan pada server Steel lokal nyata dan membaca parameter reCAPTCHA v2 dari halaman pengembangan.
  • Deteksi parameter tidak memerlukan kunci API CapSolver; pemecahan berbayar memerlukan kredensial Anda sendiri dan tidak diuji dalam contoh ini.
  • Pertahankan sesi browser tetap hidup selama langkah CAPTCHA, verifikasi hasil aplikasi, lalu lepaskan sesi setelahnya.

Browser self-hosted dapat menavigasi ke halaman yang benar tetapi tetap membuat alur kerja Anda tertahan di CAPTCHA. Jika Anda menjalankan Steel secara lokal, menambahkan flag pemecahan milik layanan cloud saja tidak cukup: deployment lokal dan cloud memiliki kapabilitas yang berbeda.

Panduan ini menunjukkan di mana solver CAPTCHA ditempatkan dalam Steel Browser self-hosted, dengan satu pemeriksaan koneksi Python kecil. Contoh menggunakan halaman pengembangan lokal dan kunci uji publik reCAPTCHA milik Google. Contoh ini tidak menargetkan situs pihak ketiga dan tidak memerlukan model AI.

Apa yang dilakukan Steel Browser dan di mana posisi solver

Steel Browser adalah API browser untuk pengembang yang membangun agen web dan aplikasi automasi. Steel mengelola sesi browser yang dapat dikontrol klien melalui alat automasi yang sudah dikenal. Repositori resmi Steel mendokumentasikan self-hosting dan koneksi dari Playwright, Puppeteer, dan Selenium.

Bagi pengembang yang menjalankan alur kerja formulir terotorisasi, pembagian tugasnya jelas. Steel menyediakan browser. Playwright menavigasi dan berinteraksi dengan halaman. Solver CAPTCHA menangani tantangan yang didukung ketika muncul. Alur kerja Anda kemudian memeriksa apakah aplikasi menerima tindakan yang dimaksud.

Tutorial ini menggunakan CapSolver Core SDK untuk langkah CAPTCHA tersebut. SDK dapat memeriksa halaman Playwright dan mengekspos operasi pemecahan terpisah. Tidak perlu menambahkan LLM hanya untuk menghubungkan komponen-komponen ini.

Skenario yang berguna adalah job browser self-hosted yang memang membutuhkan operasi CAPTCHA. Untuk pengujian rutin pada perangkat lunak yang Anda miliki, pengaturan uji milik vendor CAPTCHA biasanya sudah cukup. Gunakan jalur solver ketika alur kerja terotorisasi Anda benar-benar membutuhkannya, bukan membuat setiap navigasi browser bergantung pada permintaan berbayar.

Mengapa Steel Local memerlukan langkah CAPTCHA terpisah

Steel Local tidak menyertakan fitur pemecahan CAPTCHA bawaan seperti produk cloud-nya. Matriks fitur lokal-versus-cloud Steel secara eksplisit membedakan kedua deployment.

Perbedaan tersebut memengaruhi implementasi. Tutorial cloud mungkin mengaktifkan pemecahan saat pembuatan sesi, sedangkan integrasi self-hosted harus menyediakan operasi yang hilang tersebut. Jangan berasumsi bahwa field konfigurasi cloud akan mengaktifkan fitur di server lokal.

Jalur yang digunakan di sini adalah:

  1. Membuat sesi pada instance Steel lokal Anda.
  2. Membaca websocketUrl milik sesi tersebut.
  3. Menghubungkan Playwright ke browser yang sudah dikelola Steel.
  4. Meneruskan halaman dalam sesi itu ke SDK CAPTCHA.
  5. Melanjutkan alur kerja aplikasi hanya setelah memeriksa hasilnya.
  6. Melepaskan sesi Steel.

Hindari meluncurkan browser lain yang tidak terkait pada langkah ketiga. Browser kedua bukan sesi yang dikembalikan Steel, sehingga mudah saja Anda memeriksa satu halaman sementara job utama Anda tertahan di halaman lain.

Menyiapkan server lokal dan lingkungan Python

Mulailah dengan instance Steel Local yang berjalan khusus dan Python 3.12. Setup yang telah diverifikasi menggunakan Steel API 0.5.3 dari revisi repositori 8362bbd, Playwright 1.64.0, dan capsolver-core 0.1.1 di macOS.

Ikuti instruksi setup lokal dari repositori sesuai deployment Anda. Untuk server berbasis sumber yang digunakan di sini, API dijalankan dengan HOST=127.0.0.1, PORT=3300, dan CDP_REDIRECT_PORT=9323. Ini adalah pilihan port lingkungan uji, bukan default yang wajib. Pastikan API pengembangan Anda hanya dapat diakses dari klien yang dimaksud.

Pasang dependensi Python di lingkungan terisolasi:

bash Copy
python -m pip install "playwright==1.64.0" "capsolver-core==0.1.1" "httpx==0.28.1"

Steel yang memulai browser, sehingga klien ini tidak meluncurkan instance Chromium lain. Metode koneksi CDP Playwright CDP connection method menempel pada browser berbasis Chromium yang sudah ada dan mengekspos konteks default-nya.

Klien juga memerlukan akses ke alamat WebSocket yang dikembalikan. Jika Steel berjalan di container atau mesin lain, pastikan alamat tersebut dapat dijangkau dari Python; 127.0.0.1 mengacu pada mesin yang membuat koneksi.

Tidak diperlukan kredensial CapSolver untuk pemeriksaan deteksi di bawah ini. Pemecahan nyata memerlukan kunci API valid milik Anda dan sumber daya akun. Pemecahan berbayar, pengisian token kembali, dan penerimaan oleh aplikasi tidak dieksekusi dalam panduan ini. Simpan langkah validasi terpisah itu di checklist deployment Anda.

Menghubungkan Steel ke SDK dan memeriksa widget pengembangan

Script membuat sesi Steel nyata, menghubungkan ke browser-nya, dan membaca widget pengembangan melalui SDK resmi. Simpan sebagai steel_sdk_check.py dan jalankan dengan Python.

Contoh ini menggunakan default server lokal pada port 3300. Setel STEEL_URL jika server Anda menggunakan alamat lain. Gunakan instance khusus: pembuatan dan pelepasan sesi akan mengubah sesi browser aktif pada instance tersebut.

Halaman diberikan melalui route Playwright, jadi tidak diperlukan web server pada port 8765. Script widget Google tetap memerlukan akses jaringan. Site key publik didokumentasikan di panduan pengujian reCAPTCHA Google dan ditujukan untuk pengembangan, bukan produksi.

python Copy
import asyncio
import json
import os

import httpx
from capsolver_core import create_capsolver
from playwright.async_api import async_playwright

STEEL_URL = os.environ.get("STEEL_URL", "http://127.0.0.1:3300")
TEST_URL = "http://127.0.0.1:8765/"
HTML = """<!doctype html><html><head><title>Steel CAPTCHA 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>"""


async def main():
    async with httpx.AsyncClient(base_url=STEEL_URL, timeout=90) as api:
        response = await api.post("/v1/sessions", json={"headless": True})
        response.raise_for_status()
        session = response.json()
        try:
            async with async_playwright() as playwright:
                browser = await playwright.chromium.connect_over_cdp(session["websocketUrl"])
                try:
                    context = browser.contexts[0]
                    page = await context.new_page()
                    await page.route(TEST_URL, lambda route: route.fulfill(
                        content_type="text/html", body=HTML))
                    await page.goto(TEST_URL)
                    await page.wait_for_function(
                        "() => !!window.___grecaptcha_cfg && "
                        "Object.keys(window.___grecaptcha_cfg.clients || {}).length > 0",
                        timeout=30000)
                    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({"session_id": session["id"],
                                      "captcha_parameters": result}))
                    assert result and result[0]["type"] == "reCaptchaV2"
                finally:
                    await browser.close()
        finally:
            released = await api.post(f"/v1/sessions/{session['id']}/release")
            released.raise_for_status()
            print(json.dumps({"released": released.json().get("success")}))


if __name__ == "__main__":
    asyncio.run(main())

Pemeriksaan yang dijalankan mengembalikan satu descriptor reCaptchaV2 dengan URL halaman lokal dan site key uji publik. Respons pelepasan terakhir melaporkan true. Observasi tersebut memverifikasi sesi Steel nyata, koneksi CDP, akses halaman, dan jalur pembacaan parameter SDK.

Mereka tidak membuktikan bahwa CAPTCHA berbayar telah dipecahkan. Kunci pengembangan bukan tantangan produksi, dan script secara sengaja tidak meminta token solusi.

Kode mempertahankan halaman di konteks browser yang sudah ada milik Steel. Proses cleanup menutup koneksi klien dan meminta server melepaskan sesi bahkan jika deteksi gagal. Jika Anda mengadaptasinya ke layanan bersama, berikan satu komponen tanggung jawab atas umur sesi, alih-alih membiarkan job tak terkait melepaskan pekerjaan satu sama lain.

Menambahkan pemecahan pada halaman saat ini yang sama

Tambahkan pemanggilan pemecahan setelah halaman aplikasi terotorisasi Anda memuat CAPTCHA yang didukung, sementara koneksi browser dan klien SDK masih terbuka. Ganti fixture pengembangan lokal dengan alur kerja aplikasi Anda sendiri; jangan gunakan kunci uji sebagai input produksi.

Buat klien SDK dengan opsi api_key seperti yang didokumentasikan, memuat kredensial dari konfigurasi rahasia yang disetujui. CapSolver menangani permintaan tantangan; Steel tetap memiliki sesi browser.

Baris berikut adalah pemanggilan mode browser resmi yang tidak diubah. Ini memerlukan kunci API yang dikonfigurasi, dan eksekusi berbayar melalui koneksi Steel ini tidak diuji dalam tutorial ini:

python Copy
results = await cap.solve_on_page(page)

Pertahankan pemanggilan tersebut di dalam konteks klien yang masih hidup. Meletakkannya setelah bagian cleanup dalam contoh akan merujuk ke browser dan klien yang sudah ditutup.

Periksa setiap hasil yang dikembalikan sebelum melanjutkan. SDK melaporkan error, kemungkinan solution, dan apakah pengisian balik terjadi melalui filled. Hasil kosong atau solusi yang hilang bukan bukti bahwa aplikasi Anda melewati CAPTCHA.

Mode token yang didokumentasikan Core SDK mencakup reCAPTCHA v2/v3 dan Cloudflare Turnstile. Jangan berasumsi pemanggilan yang sama memecahkan semua jenis tantangan yang tercantum di seluruh API CapSolver yang lebih luas. Dokumentasi tugas reCAPTCHA v2 menjelaskan persyaratan spesifik untuk jalur yang didukung itu.

Memeriksa alur kerja setelah langkah CAPTCHA

Alur kerja hanya lengkap ketika aplikasi mencapai keadaan yang dimaksud. Respons token, field yang terisi, dan pengiriman formulir yang berhasil adalah observasi yang berbeda.

Untuk aplikasi yang Anda kontrol, pilih sinyal keberhasilan yang konkret seperti pesan konfirmasi atau respons yang diharapkan. Tunggu sinyal itu setelah tindakan formulir normal. Jika tidak muncul, periksa respons aplikasi daripada mengirim permintaan pemecahan berulang tanpa memahami kegagalannya.

Pertahankan identitas halaman tetap stabil selama operasi. Jangan menavigasi pergi, menutup tab, atau melepaskan sesi ketika pemecahan sedang berlangsung. Jika aplikasi memuat ulang widget, periksa tantangan saat ini lagi alih-alih menggunakan ulang parameter dari status halaman sebelumnya.

Glosarium CAPTCHA menjelaskan konsep verifikasi, sementara panduan tentang token dan cookie CAPTCHA membantu membedakan berbagai output. Baik cookie browser maupun string token tidak boleh menggantikan pemeriksaan keberhasilan aplikasi Anda.

Menangani langkah pertama yang gagal

Mulailah troubleshooting dari operasi pertama yang gagal agar masalah koneksi tidak berubah menjadi permintaan solver yang tidak perlu.

Gejala Yang perlu diperiksa
Pembuatan sesi gagal Pastikan API Steel berjalan dan periksa status HTTP serta log server.
Koneksi CDP gagal Periksa apakah websocketUrl dapat dijangkau dari proses Python dan memang milik sesi saat ini.
Widget tidak pernah terinisialisasi Periksa akses browser ke script pengembangan Google dan pastikan halaman yang diharapkan dimuat.
Deteksi tidak mengembalikan descriptor Periksa halaman saat ini dan jenis CAPTCHA yang didukung sebelum mencoba pemecahan berbayar.
Solusi dikembalikan tetapi alur kerja macet Periksa pengisian balik, tindakan aplikasi normal, dan respons aplikasi.
Job lain kehilangan sesi browser Tinjau kepemilikan sesi dan pemanggilan release sebelum berbagi instance lokal.

Jaga log diagnostik tetap kecil. Catat tahap dan error yang sudah disamarkan, bukan kunci API, token respons, atau seluruh storage browser. Uji satu halaman terlebih dahulu, dan tambahkan perilaku retry hanya setelah mengidentifikasi kegagalan sementara yang memang masuk akal diatasi dengan retry.

Menyelesaikan integrasi self-hosted

Integrasi Steel Local memerlukan penyerahan yang jelas dari halaman browser terkelola ke operasi CAPTCHA. Pemeriksaan koneksi yang berfungsi menetapkan penyerahan tersebut tanpa membuat permintaan berbayar. Sebelum menggunakannya di produksi, validasi pemecahan dengan kredensial Anda sendiri dan verifikasi hasil aplikasi di lingkungan terotorisasi.

Pertahankan sesi tetap terbuka untuk pekerjaan yang dimilikinya, lalu lepaskan ketika pekerjaan itu selesai. Ini memberi Anda batas yang berguna untuk troubleshooting dan peningkatan paket di masa depan.

Bangun Alur Kerja Automasi Andal dengan CapSolver

Hubungkan CapSolver pada langkah CAPTCHA yang didukung di alur kerja Steel Anda. Mulailah dari jalur deteksi yang sudah diverifikasi, lalu validasi operasi berkredensial Anda sebelum meningkatkan beban kerja.

Try CapSolver. Gunakan kode bonus CAP26 untuk bonus 5% sesuai ketentuan kampanye.

CapSolver CAP26 campaign offering a 5 percent bonus

FAQ

T: Apakah Steel Browser self-hosted memecahkan CAPTCHA secara otomatis?

Tidak. Perbandingan resmi Steel tidak mencantumkan pemecahan CAPTCHA bawaan untuk Steel Local. Fitur pemecahan pada produk cloud adalah kapabilitas terpisah.

T: Apakah saya memerlukan akun Steel Cloud untuk contoh ini?

Tidak. Contoh terhubung ke instance lokal yang berjalan. Anda tetap bertanggung jawab untuk menjalankan dan mengoperasikan instance tersebut.

T: Mengapa terhubung melalui CDP alih-alih meluncurkan Playwright Chromium?

CDP menautkan Python ke browser yang dikelola Steel. Meluncurkan browser lain akan membuat sesi terpisah dari sesi yang ingin digunakan contoh ini.

T: Apakah pemeriksaan deteksi menghabiskan kredit CapSolver?
Pemeriksaan ini hanya membaca parameter widget dan tidak membuat permintaan penyelesaian berbayar. Panggilan penyelesaian terpisah memerlukan kredensial CapSolver yang valid.

T: Apakah alur penyelesaian berbayar lengkap sudah diuji di sini?

Belum. Run nyata hanya memverifikasi pembuatan sesi, koneksi CDP, deteksi SDK, dan pelepasan. Penyelesaian berbayar, pengisian kembali, dan penerimaan aplikasi masih memerlukan pengujian terpisah dengan kredensial.

T: Apakah ini merupakan kemitraan resmi dengan Steel atau integrasi native?

Bukan. Ini adalah contoh koneksi yang telah diuji menggunakan antarmuka browser publik Steel dan SDK resmi CapSolver. Ini tidak membentuk kemitraan atau jaminan kompatibilitas untuk rilis di masa mendatang.

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

Arsitektur Pengambilan Data Web Rust untuk Ekstraksi Data yang Skalabel
Arsitektur Pengambilan Data Web Rust untuk Ekstraksi Data yang Dapat Diskalakan

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.

web scraping
Logo of CapSolver

Emma Foster

22-Apr-2026

Menyelesaikan Captcha di Nanobot dengan CapSolver
Cara menyelesaikan Captcha di Nanobot dengan CapSolver

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

web scraping
Logo of CapSolver

Anh Tuan

26-Feb-2026

Data sebagai Layanan (DaaS): Apa Itu dan Mengapa Pentingnya pada 2026
Data sebagai Layanan (DaaS): Apa Itu dan Mengapa Penting pada 2026

Pahami Data sebagai Layanan (DaaS) pada 2026. Eksplor manfaatnya, kasus penggunaan, dan bagaimana DaaS mengubah bisnis dengan wawasan real-time dan skalabilitas.

web scraping
Logo of CapSolver

Anh Tuan

12-Feb-2026

RoxyBrowser dengan Integrasi CapSolver
Cara Menyelesaikan Captcha di RoxyBrowser dengan Integrasi CapSolver

Mengintegrasikan CapSolver dengan RoxyBrowser untuk mengotomatisasi tugas browser dan menghindari reCAPTCHA, Turnstile, dan CAPTCHA lainnya.

web scraping
Logo of CapSolver

Ethan Collins

04-Feb-2026

Easyspider CapSolver Captcha Integrasi
Cara Menyelesaikan Captcha di EasySpider dengan Integrasi CapSolver

EasySpider adalah alat pengambilan data web dan otomatisasi browser visual, tanpa kode, dan ketika dikombinasikan dengan CapSolver, dapat menyelesaikan CAPTCHA seperti reCAPTCHA v2 dan Cloudflare Turnstile secara andal, memungkinkan pengambilan data otomatis yang mulus di berbagai situs web.

web scraping
Logo of CapSolver

Emma Foster

04-Feb-2026

Relevance AI dengan CapSolver
Cara menyelesaikan reCAPTCHA v2 di Relevance AI dengan Integrasi CapSolver

Kembangkan alat Relevance AI untuk menyelesaikan reCAPTCHA v2 menggunakan CapSolver. Otomatisasi pengajuan formulir melalui API tanpa otomatisasi browser.

web scraping
Logo of CapSolver

Ethan Collins

03-Feb-2026