Cara Memecahkan CAPTCHA di Zapier Tanpa Terkena Timeout

Langkah captcha di Zapier gagal karena alasan yang sama sekali tidak berkaitan dengan CAPTCHA: langkah Code hanya mendapat 10 atau 30 detik secara default, sementara satu proses pemecahan butuh waktu lebih lama dari itu. Kirim dan poll dalam satu langkah, dan Anda kena timeout. Bentuk yang berhasil adalah dua langkah dengan jeda di antaranya, ditambah solver yang bisa dijangkau dari server Zapier, yang berarti mode Server, bukan alamat loopback. Keduanya hanya perubahan lima menit begitu Anda tahu di situlah masalahnya.
Apa yang Anda butuhkan
- Akun Zapier pada paket apa pun yang menyertakan Code by Zapier.
- CapSkip yang berjalan dalam mode Server di mesin yang bisa dijangkau Zapier, dengan IP publik statis. Lihat pengaturan koneksi.
- Validasi key dinyalakan, dan sebuah API key diterbitkan untuk Zap ini.
- Sitekey dan URL halaman dari formulir yang dilindungi, dari langkah trigger mana pun yang menyediakannya.
Mode Server bukan pilihan opsional di sini
Setiap panduan lain di blog ini memulai solver di 127.0.0.1:8080, dan di mesin Anda sendiri itu memang tepat. Zapier tidak berada di mesin Anda. Zap Anda berjalan di infrastruktur Zapier, jadi request ke 127.0.0.1 dari langkah Code akan tertuju ke container milik Zapier sendiri dan tidak mendapat apa pun.
Pengaturan koneksi CapSkip punya mode kedua untuk keperluan ini. Lokal mengikat ke 127.0.0.1 dan hanya bisa dijangkau dari perangkat itu. Server mengikat ke alamat jaringan atau IP publik Anda, sehingga platform terkelola bisa memanggilnya lewat API yang sama, yang kompatibel dengan 2captcha. IP publik statis disarankan, karena alamat itu masuk ke dalam Zap Anda dan Anda tidak ingin alamatnya berpindah-pindah.
Ini tetap perangkat keras Anda dan tetap tanpa hitungan pemakaian. Mode Server mengubah tempat solver mendengarkan, bukan siapa pemiliknya dan bukan cara penagihannya. Yang berubah adalah tingkat paparannya, jadi nyalakan validasi key sebelum Anda membuka port, dan beri Zap itu key-nya sendiri agar bisa Anda cabut tanpa mengganggu yang lain.
Timeout yang menentukan bentuk Zap Anda
Code by Zapier menjalankan Python atau JavaScript Anda dengan batas waktu runtime. Di Starter batas itu 10 detik. Di Pro, Team, dan Company batasnya 30 detik. Zapier juga menawarkan extended runtime yang menaikkan langkah Code sampai 10 menit, dan itu Anda atur di langkah itu sendiri.
Sekarang bandingkan angka itu dengan satu proses pemecahan. CAPTCHA gambar biasanya hitungan detik. reCAPTCHA v2 umumnya terjawab antara 15 sampai 45 detik, dan panduan polling menyarankan menunggu kira-kira 15 sampai 20 detik sebelum pemeriksaan pertama. Jadi loop submit lalu poll tidak muat di dalam 10 detik, biasanya juga tidak muat di dalam 30 detik, dan muat dengan nyaman di dalam extended runtime.
Itu memberi Anda dua rancangan, dan mana yang tepat bergantung pada apakah extended runtime dinyalakan:
- Dua langkah plus satu jeda. Berjalan di semua paket. Kirim, tunggu, poll. Riwayat Zap terbaca jelas dan proses pemecahan yang lambat tidak mematikan run tersebut.
- Satu langkah dengan extended runtime. Lebih sedikit bagian yang bergerak, dan seluruh proses pemecahan berada di satu tempat. Perlu runtime yang lebih panjang diaktifkan pada langkah itu.
Langkah 1: kirim CAPTCHA dan simpan ID-nya
Tambahkan Code by Zapier sebagai aksi, pilih Python, dan petakan sitekey serta URL halaman ke kolom input langkah tersebut. Nilai input selalu tiba sebagai string di input_data, dan itu tidak masalah di sini karena semua yang Anda kirim memang berupa string.
# Code by Zapier, Python. requests is available; nothing to install.
SOLVER = "http://YOUR_SERVER_IP:8080"
r = requests.post(SOLVER + "/in.php", data={
"key": input_data["api_key"],
"method": "userrecaptcha",
"googlekey": input_data["sitekey"],
"pageurl": input_data["pageurl"],
"json": 1,
})
body = r.json()
if body["status"] != 1:
raise Exception("Submit rejected: " + body["request"])
# Hand the id to the next step.
output = {"captcha_id": body["request"]}Melempar exception adalah langkah yang tepat ketika submit ditolak. Zapier menandai run itu sebagai error dan menampilkan pesannya di riwayat Zap, dan itu lebih baik daripada mengoper string error ke rantai berikutnya lalu menemukannya tiga langkah kemudian.
Langkah 2: beri jeda, lalu poll untuk mengambil token
Tambahkan langkah Delay by Zapier dan gunakan Delay For dengan interval singkat. Dua puluh detik adalah batas bawah yang masuk akal untuk reCAPTCHA v2, karena melakukan polling lebih cepat dari itu hanya akan mengembalikan CAPCHA_NOT_READY dan menghabiskan jatah waktu langkah Code Anda untuk request yang memang tidak akan pernah berhasil.
Lalu tambahkan langkah Code kedua yang melakukan polling. Buat loop-nya tetap kecil: beberapa percobaan dengan sleep di antaranya muat di dalam 30 detik, dan jika jawabannya belum siap juga, Zap akan error dan Anda bisa menyalakan Autoreplay alih-alih berdiam di loop yang lebih panjang.
# Code by Zapier, Python. Second step, after Delay For 20 seconds.
import time
SOLVER = "http://YOUR_SERVER_IP:8080"
params = {
"key": input_data["api_key"],
"action": "get",
"id": input_data["captcha_id"],
"json": 1,
}
token = None
# Five tries at 5s stays inside a 30 second step.
for _ in range(5):
body = requests.get(SOLVER + "/res.php", params=params).json()
if body["status"] == 1:
token = body["request"]
break
if body["request"] != "CAPCHA_NOT_READY":
raise Exception(body["request"])
time.sleep(5)
if not token:
raise Exception("Not solved yet. Lengthen the delay ahead of this step.")
output = {"token": token}CAPCHA_NOT_READY ditulis tanpa huruf T, dan itu memang ejaan dari API-nya, bukan salah ketik di artikel ini. Setiap respons lain yang Anda terima adalah error sungguhan dan seharusnya menghentikan Zap. Daftar lengkapnya ada di dokumentasi API CapSkip.
Versi satu langkah
Dengan extended runtime diaktifkan pada langkah itu, kedua bagian tadi melebur menjadi satu aksi dan Delay-nya hilang. Kodenya adalah dua blok di atas dengan loop poll yang diperlebar, dan satu-satunya yang perlu diawasi adalah batas loop Anda sendiri harus tetap di bawah runtime yang Anda konfigurasi, agar langkah itu memunculkan pesan yang Anda tulis sendiri, bukan malah dimatikan di tengah request.
Satu peringatan agar Anda tidak membuat jendelanya kelewat lebar: token yang sudah terpecahkan punya masa hidup sendiri yang terbatas. Token reCAPTCHA hanya sekali pakai dan berhenti diterima setelah kira-kira dua menit, jadi Zap yang memecahkan lalu mengantre selama lima menit akan mengirimkan sesuatu yang sudah tidak lagi diterima situs tersebut. Masa berlaku token membahas angka pastinya. Pecahkan selambat mungkin di dalam alur Zap, dan letakkan langkah yang memakai token itu tepat setelahnya.
Menggunakan Webhooks by Zapier sebagai gantinya
Anda bisa melakukan submit dengan Webhooks by Zapier tanpa kode sama sekali. Pilih Custom Request atau POST, arahkan ke /in.php, dan kirim field yang sama sebagai form data. Responsnya kembali sebagai {"status": 1, "request": "<id>"} dan Zapier mengurainya menjadi field yang bisa Anda petakan ke langkah berikutnya.
{
"key": "YOUR_API_KEY",
"method": "userrecaptcha",
"googlekey": "YOUR_SITEKEY",
"pageurl": "https://example.com/page-with-recaptcha",
"json": 1
}Yang jadi canggung adalah bagian poll-nya. Webhook hanya melakukan satu request, jadi Anda butuh Delay dan Filter untuk memutuskan apakah jawabannya sudah datang, dan Zap tidak bisa dengan mudah berputar kembali untuk mencoba lagi. Langkah Code lebih enak dibaca untuk bagian itu. Gunakan Webhooks untuk submit jika Anda lebih suka mengeklik daripada mengetik, dan Code untuk poll dalam kedua kasus.
Kesalahan umum dan artinya
| Apa yang Anda lihat | Penyebab | Perbaiki |
|---|---|---|
| Kode Anda kena timeout | Submit dan poll dalam satu langkah dengan batas 10 atau 30 detik | Pisahkan menjadi dua langkah dengan Delay, atau aktifkan extended runtime |
| Connection refused atau request yang menggantung | Langkah itu memanggil 127.0.0.1, yang merupakan container milik Zapier sendiri | Alihkan solver ke mode Server dan gunakan IP publiknya |
| ERROR_KEY_DOES_NOT_EXIST | Validasi key menyala dan key untuk Zap ini belum terdaftar | Terbitkan key untuk Zap itu di pengaturan aplikasi |
| CAPCHA_NOT_READY di setiap percobaan | Polling dimulai terlalu awal, atau loop-nya terlalu pendek | Perpanjang Delay sebelum langkah poll |
| ERROR_GOOGLEKEY | Field sitekey tiba dalam keadaan kosong dari trigger | Periksa pemetaannya di kolom input langkah tersebut |
| Token ditolak oleh situs target | Token kedaluwarsa di antara proses pemecahan dan pemakaiannya | Geser proses pemecahan lebih akhir, tepat di sebelah langkah yang mengirimnya |
FAQ
Bisakah saya menginstal SDK CapSkip di dalam langkah Code?
Tidak. Code by Zapier berjalan di sandbox dengan kumpulan library yang tetap dan tanpa instalasi paket, jadi SDK Python dan Node tidak bisa dipakai. Sandbox itu memang menyertakan library requests, dan API-nya kompatibel dengan 2captcha lewat dua endpoint, jadi kode di atas sudah mencakup semua yang akan dikerjakan SDK. Jika sebagian pipeline Anda berjalan di tempat yang Anda kendalikan sendiri, halaman SDK pemecahan CAPTCHA membahas keempat client resminya.
Zapier itu layanan terkelola. Bagaimana ia bisa menjangkau solver di mesin saya?
Lewat mode Server. Solver mengikat ke alamat jaringan atau IP publik Anda alih-alih alamat loopback, dan Zapier memanggilnya seperti API publik lainnya. Beri IP publik statis agar alamat di dalam Zap Anda tetap valid, nyalakan validasi key sebelum Anda membuka port, dan terbitkan key tersendiri untuk Zap itu.
Berapa lama sebaiknya langkah Delay disetel?
Mulai dari 20 detik untuk reCAPTCHA v2 dan sekitar 5 detik untuk GeeTest. CAPTCHA gambar kembali cukup cepat sehingga satu langkah dengan poll satu detik biasanya sudah cukup. Lebih lama tidak otomatis lebih aman, karena token mulai menua sejak detik ia diterbitkan, jadi turunkan jedanya sampai Anda sesekali melihat percobaan ulang, bukan naikkan sampai Anda tidak pernah melihatnya.
Sebaiknya saya pakai Zapier atau alat yang di-host sendiri untuk ini?
Zapier adalah pilihan tepat ketika sisa workflow Anda memang sudah ada di sana. Jika pekerjaan CAPTCHA-nya adalah acara utamanya, alat yang Anda host sendiri sepenuhnya menghindari batas runtime dan bisa berbicara dengan solver lewat alamat privat. Panduan n8n membahas bentuk seperti itu, dan node Wait miliknya tidak punya batas serupa.
Versi singkatnya
Jalankan solver dalam mode Server agar Zapier bisa menjangkaunya, kirim di satu langkah Code, beri jeda sekitar 20 detik, lalu poll di langkah kedua. Nyalakan extended runtime jika Anda lebih suka satu langkah saja. Buat seluruh alurnya tetap ringkas, karena token kedaluwarsa jauh lebih cepat daripada riwayat Zap Anda. Biayanya tetap datar rancangan mana pun yang Anda pilih: pemecah captcha yang berjalan di mesin yang sudah Anda miliki tidak menagih Anda per pemecahan, jadi Zap yang jalan empat ratus kali sehari berbiaya persis sama dengan Zap yang jalan empat kali.
