
Nikolai Smirnov
Software Development Lead
Diterbitkan Nov 02, 2026
Diperbarui Nov 02, 2026 · min baca

ErrorId dari API; error Go yang nil tidak membuktikan layanan berhasil.chromedp adalah pustaka Go untuk mengontrol browser melalui Chrome DevTools Protocol. Pengembang menggunakannya untuk pengujian dan otomasi browser tanpa harus menambah pengendali Python atau JavaScript. Ketika sebuah tugas browser yang diizinkan menemui CAPTCHA yang didukung, aplikasi Go dapat memanggil solver dan tetap mengelola halaman yang sama.
CapSolver menyediakan SDK Go resmi dan API task terdokumentasi untuk langkah penyelesaian. Panduan ini menghubungkan tanggung jawab tersebut tanpa menampilkan pustaka browser sebagai solver. Pengecekan yang bisa dijalankan memakai fixture browser lokal milik sendiri dan permintaan API nyata dengan kunci placeholder yang sengaja tidak valid. Ini memverifikasi pengkabelan dan penanganan error, bukan penyelesaian berbayar.
Penyelesaian CAPTCHA berada di antara pengumpulan parameter challenge saat ini dan kelanjutan operasi browser yang memerlukan hasil tersebut.
Repositori resmi chromedp menyediakan pengendali browser. Program Go Anda membuka halaman yang diizinkan, membaca state yang relevan, dan memutuskan kapan challenge yang didukung perlu ditangani. Solver memasok output terdokumentasinya; chromedp tetap bertanggung jawab atas aksi halaman selanjutnya.
Sebuah CAPTCHA bukan bukti bahwa setiap operasi browser yang macet memerlukan permintaan penyelesaian. Field yang hilang, navigasi yang gagal, atau error aplikasi mungkin memerlukan perbaikan lain. Identifikasi challenge yang sebenarnya sebelum memilih jenis task.
Untuk sebuah form QA milik sendiri, urutannya lugas: buka form, identifikasi konfigurasi CAPTCHA‑nya, minta solusi ketika sesuai, terapkan melalui jalur integrasi yang diharapkan aplikasi, dan periksa konfirmasi form. Panduan ini tidak menyediakan callback universal atau skrip pengiriman untuk situs mana pun secara umum.
Gunakan modul Go terisolasi dan dependensi yang dipatok (pinned) agar pemanggilan API di artikel cocok dengan build Anda.
Lingkungan yang diuji menggunakan Go 1.27.3, github.com/chromedp/chromedp@v0.21.0, dan github.com/capsolver/capsolver-go@v0.0.0-20251204081438-e4e07af23eae. Chrome diinstal secara lokal dan dijalankan dalam konteks browser sementara terpisah.
Buat direktori kerja, inisialisasi modulnya dengan go mod init captcha-browser-check, lalu jalankan:
go get github.com/chromedp/chromedp@v0.21.0 github.com/capsolver/capsolver-go@v0.0.0-20251204081438-e4e07af23eae
Catatan rilis v0.21.0 menyebutkan bahwa Go 1.25 dan yang lebih baru didukung. Gunakan dokumentasi versi tersebut ketika menyesuaikan skrip browser lama. Mencampur contoh keluaran pointer lama dengan API action bertipe baru bisa menghasilkan error kompilasi sebelum permintaan browser atau solver mana pun dijalankan.
Dokumentasi resmi API saldo menyertakan metode Balance() pada SDK Go. Panggilan saldo berguna untuk memisahkan akses akun/API dari penyelesaian spesifik challenge. Ia tidak membuat task CAPTCHA.
Jalankan pengecekan kecil yang membuktikan Chrome dapat membaca halaman milik sendiri dan SDK Go dapat menerima respons API nyata.
Simpan ini sebagai main.go dan jalankan go run . dari modul yang sudah diinisialisasi. Atribut lokal FIXTURE_ONLY adalah data uji, bukan sitekey asli. Kunci API sengaja tidak valid, dan program mengharapkan layanan menolaknya.
package main
import (
"context"
"fmt"
"log"
"net/http"
"net/http/httptest"
"time"
"github.com/chromedp/chromedp"
capsolver "github.com/capsolver/capsolver-go"
)
func main() {
// Fixture lokal memeriksa pengkabelan browser. Ini bukan CAPTCHA nyata.
fixture := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, `<title>Owned QA fixture</title><div id="widget" data-sitekey="FIXTURE_ONLY"></div>`)
}))
defer fixture.Close()
ctx, cancel := chromedp.NewContext(context.Background())
defer cancel()
ctx, deadline := context.WithTimeout(ctx, 30*time.Second)
defer deadline()
if err := chromedp.Do(ctx, chromedp.Navigate(fixture.URL)); err != nil { log.Fatal(err) }
sitekey, err := chromedp.Run(ctx, chromedp.AttributeValue("#widget", "data-sitekey"))
if err != nil { log.Fatal(err) }
if !sitekey.Exists || sitekey.Value != "FIXTURE_ONLY" { log.Fatal("Fixture key not found") }; fmt.Println("Fixture key:", sitekey.Value)
// Kredensial yang sengaja tidak valid: memeriksa error API nyata, bukan akun.
solver := capsolver.CapSolver{ApiKey: "YOUR_API_KEY"}
result, err := solver.Balance()
if err != nil { log.Fatal(err) }
fmt.Println("API error:", result.ErrorId, result.ErrorCode)
if result.ErrorId == 0 { log.Fatal("Expected the placeholder credential to be rejected") }
}
Jalannya yang terverifikasi mencetak Fixture key: FIXTURE_ONLY, diikuti error API dengan ErrorId bernilai 1 dan ERROR_KEY_DOES_NOT_EXIST. Perlakukan kode tersebut secara persis sebagai respons yang diamati untuk pengecekan placeholder ini, bukan respons yang dijanjikan untuk setiap kredensial tidak valid.
Ini menetapkan akses browser lokal dan jalur permintaan‑respons nyata ke API. Tidak ada akun nyata yang dikueri, tidak ada challenge yang diselesaikan, dan tidak ada pengiriman form yang dilakukan.
Action AttributeValue saat ini mengembalikan AttributeResult yang berisi nilai atribut dan flag keberadaan.
Contoh tersebut memeriksa kedua field sebelum melanjutkan. Atribut yang hilang harus menghentikan pengumpulan parameter, bukan menjadi sitekey kosong dalam permintaan berbayar. Selector yang berfungsi pada fixture milik sendiri ini bukan selector universal untuk setiap integrasi CAPTCHA.
SDK yang diperiksa dapat mengembalikan respons layanan yang sudah di‑parse tanpa mengembalikan error Go.
Itulah mengapa contoh memeriksa result.ErrorId setelah menangani err. Kegagalan jaringan, kegagalan parsing JSON, dan respons valid yang mendeskripsikan error akun adalah kondisi yang berbeda. Baca respons yang dikembalikan secara persis alih‑alih menganggap err == nil berarti akun atau task berhasil.
Tukarkan Kode Bonus CapSolver Anda
Tingkatkan anggaran otomasi Anda secara instan!
Gunakan kode bonus CAP26 ketika mengisi saldo akun CapSolver Anda untuk mendapatkan bonus 5% tambahan pada setiap isi ulang — tanpa batas.
Tukarkan sekarang di Dashboard CapSolver
Gunakan referensi task CAPTCHA yang dipilih saat ini untuk membangun permintaan penyelesaian dari halaman yang benar‑benar Anda inspeksi.
Untuk reCAPTCHA v2, dokumentasi task resmi menentukan keluarga task dan field seperti websiteURL dan websiteKey. Gunakan ejaan dan kapitalisasi yang terdokumentasi. Jangan menyusun nama task dari ingatan atau menyalin contoh SDK lama tanpa memeriksa kontrak saat ini.
SDK Go resmi mengekspor Solve() untuk peta task. Implementasi produksi harus memasok kredensial asli secara aman, meneruskan parameter task terkini, dan memeriksa hasil atau error yang dikembalikan sesuai dengan versi SDK yang dipatok.
Pengecekan koneksi di atas sengaja bukan program penyelesaian berbayar yang lengkap. Sebelum menerapkan langkah penyelesaian, jalankan satu challenge yang diizinkan dengan akun Anda sendiri yang terdanai dan validasi hasilnya terhadap aplikasi milik sendiri. Langkah yang bergantung pada kredensial tersebut tidak dijalankan untuk artikel ini, jadi tidak ada tingkat keberhasilan atau penyelesaian end‑to‑end yang diklaim.
Simpan URL halaman, keluarga challenge, public key, dan parameter opsional yang diperlukan tetap terkait dengan operasi browser yang sama. Jika navigasi mengganti halaman atau meregenerasi challenge, inspeksi ulang input sebelum memulai percobaan lain.
Gunakan solusi dengan cara yang diharapkan aplikasi milik sendiri, lalu verifikasi bahwa perilaku aplikasi berubah seperti yang dimaksud.
Hasil berbasis token bukan instruksi untuk mengklik tombol verifikasi yang terlihat. Beberapa aplikasi menggunakan callback, yang lain mengikat hasil ke form, dan validasi sisi server terakhir tetap penting. Rujuk implementasi aplikasi alih‑alih menebak nama callback JavaScript.
Dokumentasi verifikasi respons Google untuk reCAPTCHA menjelaskan langkah verifikasi sisi server. Otomasi browser yang mencapai baris kode setelah penyelesaian bukan berarti server menerima respons tersebut.
Jaga agar kondisi keberhasilan pengujian Anda spesifik. Untuk form milik sendiri, inspeksi konfirmasi atau catatan uji. Untuk alur baca yang diizinkan, inspeksi konten yang diharapkan. Hindari menjadikan menghilangnya widget sebagai satu‑satunya sinyal selesai ketika aplikasi memiliki hasil yang lebih andal.
Diagnosis komponen yang gagal sebelum menjalankan ulang navigasi, pemeriksaan akun, dan penyelesaian secara bersamaan.
Error kompilasi menunjuk ke kompatibilitas kode dan dependensi. Kegagalan memulai browser menunjuk ke executable atau lingkungan runtime. Kunci yang hilang menunjuk ke inspeksi halaman. Error layanan menunjuk ke respons API yang terdokumentasi. Form yang ditolak setelah solusi menunjuk ke penerapan hasil dan aplikasi itu sendiri.
Untuk kegagalan kontrak input, panduan troubleshooting invalid-task-data menunjukkan cara membandingkan permintaan aktual dengan task yang dipilih. Lebih banyak percobaan browser tidak akan memperbaiki field yang salah eja dalam permintaan itu.
Simpan catatan diagnostik kecil yang berisi versi paket, tahap yang gagal, pengenal task bila tersedia, dan informasi error yang sudah disunting. Jangan log kunci akun asli atau token solusi penuh. Saat melakukan eskalasi, jelaskan apa yang sudah ditetapkan oleh pengecekan browser dan pengecekan API secara terpisah.
Biarkan chromedp tetap mengendalikan browser dan tempatkan pemanggilan solver yang terdokumentasi tepat pada langkah CAPTCHA. CapSolver menyediakan antarmuka penyelesaian; aplikasi Anda memiliki state halaman, keputusan error, dan pemeriksaan penyelesaian akhir.
T: Apakah chromedp menyertakan penyelesaian CAPTCHA?
chromedp adalah pengendali browser. Alur kerja ini menambahkan layanan solver terpisah untuk challenge yang didukung yang ditemui selama tugas yang diizinkan.
T: Apakah contoh ini menghabiskan kredit solver?
Tidak ada task berbayar yang dibuat. Contoh mengirim permintaan saldo dengan kunci placeholder yang sengaja tidak valid dan memeriksa error yang dihasilkan.
T: Mengapa API dapat menolak permintaan ketika error Go bernilai nil?
SDK mungkin berhasil menerima dan mengurai respons yang berisi error tingkat layanan. Periksa field error pada respons serta error Go.
T: Bisakah saya menggunakan FIXTURE_ONLY sebagai sitekey saya?
Tidak. Itu adalah data uji lokal yang digunakan untuk memverifikasi pembacaan atribut browser. Task penyelesaian nyata memerlukan public key terkini dari halaman yang diizinkan.
T: Apakah penyelesaian CAPTCHA berbayar lengkap sudah diuji di sini?
Belum. Cakupan yang terverifikasi adalah fixture browser chromedp dan penolakan API nyata. Penyelesaian berbayar dan penerimaan oleh aplikasi milik sendiri memerlukan akun Anda dan pengujian end‑to‑end terpisah.

Nikolai Smirnov
Software Development Lead
Building dependable software for complex automation.
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.
