
Emma Foster
Machine Learning Engineer
Diterbitkan Nov 12, 2026
Diperbarui Nov 12, 2026 · min baca

Sebuah job browser terjadwal menerima token Turnstile, tetapi halaman tidak pernah mencapai konfirmasi yang diharapkan. Dashboard penyelesai terlihat baik-baik saja sementara tim operasi masih melihat job gagal. Angka mana yang harus mereka percayai?
Kedua pengamatan bisa benar. Penyelesai telah mengembalikan hasil; aplikasi belum mengonfirmasi penyelesaian. Metrik penyelesai Cloudflare Turnstile yang berguna menunjukkan di mana kedua keluaran tersebut berbeda. CapSolver menyediakan respons task solving, sementara workflow browser Anda dan, jika tersedia, backend aplikasi yang dilindungi menyediakan bukti sisanya. Panduan ini menjelaskan apa yang harus dicatat untuk integrasi yang sudah ada dan telah diotorisasi serta bagaimana merangkum ekspor log yang disunting (redacted) dengan Python. Fokusnya pada pemantauan praktis untuk tim QA dan layanan otomasi enterprise, tanpa mengasumsikan akses pada analitik privat situs pihak ketiga.
Cakupan pemantauan Anda bergantung pada apakah Anda mengontrol situs web yang dilindungi, klien otomasi, atau keduanya.
Pemilik aplikasi dapat memeriksa aktivitas widget, validasi sisi server, dan operasi akhir aplikasi. Layanan otomasi yang bekerja pada perjalanan klien yang disetujui mungkin hanya dapat melihat respons penyelesainya dan keluaran browser. Sepakati dengan klien bukti backend apa yang tersedia sebelum memberi label hasil sebagai “tervalidasi”.
Analitik hasil challenge Cloudflare menjelaskan challenge yang diterbitkan dan diselesaikan, termasuk hasil interaktif dan non-interaktif. Itu adalah pengamatan widget. Mereka bukan laporan langsung tentang berapa banyak task yang diterima atau diselesaikan oleh penyelesai CAPTCHA eksternal Anda.
Pisahkan widget Turnstile dari full-page challenge Cloudflare dalam laporan. Jika tim tidak yakin checkpoint mana yang ditemui, gunakan panduan mengidentifikasi challenge Turnstile dan Cloudflare sebelum mengelompokkan percobaan. Menggabungkan jenis challenge yang berbeda membuat perubahan beban kerja terlihat seperti perubahan kualitas penyelesai.
Metrik hasil penyelesai harus menghitung task yang mengembalikan solusi yang diharapkan, dengan himpunan percobaan yang dikirim yang terdefinisi jelas.
Panduan resmi API CapSolver Turnstile mendokumentasikan AntiTurnstileTaskProxyLess, dengan websiteURL dan websiteKey sebagai input wajib. Metadata opsional mencakup nilai action dan cdata milik widget. Catat pengenal aman untuk konfigurasi yang digunakan, sehingga perubahan input dapat dibandingkan dengan kegagalan di kemudian hari.
CapSolver menggunakan createTask untuk mengirimkan task dan getTaskResult untuk mengambil hasilnya. Hasil Turnstile yang didokumentasikan mencakup status: ready dan solution.token. taskId saja bukan solusi yang telah lengkap. Referensi pengambilan hasil menjelaskan penanganan respons yang seharusnya sudah dilakukan oleh integrasi Anda yang ada.
Untuk pemantauan, simpan ID workflow dan ID task penyelesai secara terpisah. Satu operasi browser yang disetujui dapat membuat lebih dari satu percobaan solving. Hitung percobaan itu satu per satu untuk metrik penyelesai, tetapi hitung operasi asli satu kali saat melaporkan penyelesaian workflow.
Pilih tenggat observasi untuk setiap kohort percobaan dan laporkan task yang berhasil, gagal, dan belum terselesaikan bersama-sama. Kohort berarti kelompok permintaan terpilih yang sama, seperti task yang dikirim selama jam tertentu untuk satu workflow yang disetujui.
Untuk tingkat hasil yang konservatif, bagi jumlah hasil penyelesai yang sukses dengan semua percobaan yang dikirim dalam kohort tersebut. Tampilkan juga jumlah yang belum terselesaikan; tingkat hasil yang diukur saat masih banyak task yang berjalan bersifat sementara. Jika Anda malah menghitung tingkat task yang selesai, beri label pembaginya yang lebih sempit secara eksplisit.
Kelompokkan error pembuatan dan hasil menggunakan respons error terdokumentasi CapSolver. Konfigurasi yang ditolak dan solve yang gagal memerlukan investigasi berbeda. Keduanya dapat memengaruhi layanan yang dialami klien Anda, tetapi harus mempertahankan penyebab yang berbeda.
Validasi token mengukur apakah backend aplikasi yang dilindungi menerima token Turnstile melalui Siteverify.
Metrik validasi token Cloudflare menghitung permintaan Siteverify dan respons dengan success: true atau success: false. Ketika catatan tersebut tersedia, laporkan respons valid dibagi semua respons validasi dalam kohort yang dipilih. Simpan kegagalan jaringan tanpa respons dalam hitungan terpisah yang terlihat.
Glosarium token menjelaskan peran umum sebuah token. Dalam workflow ini, penerimaan token adalah peristiwa antara. Aplikasi masih harus memvalidasinya dan menyelesaikan operasinya sendiri.
Gunakan hasil aplikasi yang dapat diamati, seperti halaman konfirmasi yang diharapkan atau record yang diizinkan yang diminta. Beri label ini “workflow completed”, dengan pernyataan apa yang menegaskan penyelesaian tersebut.
Jangan menyimpulkan respons Siteverify dari widget hijau, status HTTP sukses, atau hilangnya challenge. Jika klien belum menyediakan bukti validasi, laporkan validasi token sebagai tidak tersedia. Observasi hilang yang jelas lebih berguna daripada tingkat keberhasilan perkiraan yang disajikan sebagai hasil pengukuran.
Untuk pelaporan ke klien, pertahankan alasan kegagalan asli ketika hasil akhir tetap tidak diketahui. “Penyelesai mengembalikan token; konfirmasi tidak teramati sebelum tenggat” memberi tahu engineer berikutnya di mana harus memulai.
Redeem Kode Bonus CapSolver Anda
Tingkatkan anggaran otomasi Anda secara instan!
Gunakan kode bonus CAP26 saat mengisi saldo akun CapSolver Anda untuk mendapatkan bonus 5% ekstra pada setiap pengisian — tanpa batas.
Redeem sekarang di Dashboard CapSolver
Pemantauan latensi harus membedakan waktu tunggu penyelesai, penundaan penyerahan (handoff) token, dan total waktu workflow.
Mulai pengukur waktu penyelesai ketika klien mengirim permintaan task, dan hentikan ketika klien menerima hasil yang diharapkan atau kegagalan terminal. Ini mengukur waktu berlalu yang diamati klien, termasuk jaringan dan penundaan polling. Ini tidak memisahkan waktu pemrosesan internal penyedia.
Lacak interval dari menerima token hingga mengirim permintaan aplikasi secara terpisah. Job browser yang menunggu dalam antrean setelah solving dapat membuat masalah token bahkan ketika penyelesai merespons dengan cepat.
Referensi validasi sisi server Cloudflare menyatakan bahwa token Turnstile kedaluwarsa setelah 300 detik dan hanya dapat digunakan sekali. Referensi yang sama menjelaskan error validasi dan pemeriksaan field respons yang relevan, termasuk hostname dan action yang diharapkan. Timestamp penerimaan Anda berguna untuk mendiagnosis penundaan handoff; itu bukan bukti sisa masa berlaku token yang tepat.
Tampilkan median dan persentil ekor lambat, seperti p95, untuk percobaan selesai yang sebanding. Tambahkan jumlah sampel dan jumlah timeout di sebelahnya. Grafik latensi yang hanya menampilkan keberhasilan dapat terlihat lebih cepat ketika permintaan terlambat yang paling lambat sudah timeout dan hilang dari perhitungan.
Biarkan uji lokal, cloud worker, keluarga halaman berbeda, dan versi integrasi yang berubah tetap dapat dibedakan. Bandingkan workflow yang sama sebelum dan sesudah deployment sebelum menyalahkan perubahan penyedia global.
Dashboard awal yang berguna menghubungkan setiap metrik ke peristiwa yang dapat Anda verifikasi.
| Metrik | Definisi yang disarankan | Apa yang membantu diselidiki |
|---|---|---|
| Tingkat hasil penyelesai | Hasil penyelesai yang diharapkan / semua percobaan solving yang dikirim, dengan jumlah belum terselesaikan | Kegagalan konstruksi permintaan atau solving |
| Tingkat validasi token | Respons Siteverify yang berhasil / semua respons Siteverify yang diterima, dengan kegagalan transport ditampilkan terpisah | Kegagalan validasi di aplikasi yang Anda operasikan |
| Penyelesaian workflow | Operasi selesai yang terkonfirmasi / semua operasi yang memenuhi syarat dan diberi challenge | Apakah tugas bisnis yang diminta selesai |
| Latensi penyelesai yang diamati klien | Permintaan dikirim hingga hasil atau kegagalan diterima, dipisah menurut hasil | Respons lambat, polling, dan efek jaringan |
| Penundaan handoff token | Token diterima hingga permintaan aplikasi dikirim | Antrean atau logika browser yang menunda penggunaan token |
| Biaya per operasi selesai | Biaya solving yang ditagihkan yang dapat diatribusikan / operasi yang diberi challenge dan selesai yang terkonfirmasi | Dampak percobaan tidak berhasil dan retry |
Ini adalah definisi tingkat aplikasi yang diusulkan, bukan klaim bahwa setiap field disediakan oleh respons API CapSolver. Hitung hanya apa yang didukung oleh log dan catatan penagihan Anda. Ketika penyebut penyelesaian bernilai nol, tampilkan biaya per operasi selesai sebagai tidak tersedia daripada memaksakan angka yang menyesatkan.
Python dapat merangkum ekspor yang disunting dari integrasi penyelesai Anda yang ada tanpa mengirim permintaan solving lain.
Contoh ini hanya menggunakan library standar Python 3; tidak perlu instalasi paket atau kredensial API. Ia mengukur record yang Anda sediakan. Ia tidak mengumpulkan task live, memvalidasi token, atau mengukur performa penyedia dengan sendirinya.
Ekspor snapshot pada tenggat observasi yang ditetapkan. Gunakan attempt_id internal bahkan ketika pembuatan task gagal sebelum API mengembalikan task ID. Sertakan setiap percobaan dalam kohort workflow yang Anda pilih, termasuk pembuatan yang gagal dan task yang masih pending. Jangan ekspor setiap respons polling sebagai percobaan terpisah.
Field CSV di bawah ini adalah skema pelaporan aplikasi, bukan parameter API CapSolver:
solver_result: gunakan ready hanya setelah integrasi Anda menerima hasil ready yang sukses dengan token yang diharapkan; gunakan failed untuk error terminal dan pending untuk pekerjaan yang belum terselesaikan pada tenggat snapshot.validation: gunakan passed atau failed hanya untuk respons validasi backend yang teramati. Gunakan unknown ketika bukti tidak tersedia, validasi belum berjalan, atau tidak ada respons yang tiba. Simpan detail error transport di log diagnostik terpisah.workflow_completed: gunakan yes hanya ketika hasil aplikasi yang diharapkan telah dikonfirmasi. Gunakan workflow_id yang sama di seluruh retry.Simpan dataset ilustratif ini sebagai attempts.csv. Lima record ini adalah contoh rekaan, bukan observasi produksi atau hasil benchmark:
attempt_id,workflow_id,solver_result,validation,workflow_completed
a1,w1,ready,passed,yes
a2,w2,failed,unknown,no
a3,w2,ready,passed,yes
a4,w3,ready,failed,no
a5,w4,pending,unknown,no
Simpan skrip berikut sebagai summarize_turnstile.py. Pengecekan ID ganda mencegah ekspor yang berisi baris polling berulang diam-diam menggandakan hitungan.
import csv
import json
import sys
from collections import Counter
def summarize(path):
with open(path, newline='', encoding='utf-8') as handle:
rows = list(csv.DictReader(handle))
seen = set()
completed = set()
workflows = set()
solver = Counter()
validation = Counter()
for row in rows:
attempt = row['attempt_id'].strip()
workflow = row['workflow_id'].strip()
if not attempt or attempt in seen or not workflow:
raise ValueError('Gunakan attempt ID unik, tidak kosong, dan workflow ID tidak kosong')
if row['solver_result'] not in {'ready', 'failed', 'pending'}:
raise ValueError('solver_result tidak valid')
if row['validation'] not in {'passed', 'failed', 'unknown'}:
raise ValueError('validation tidak valid')
if row['workflow_completed'] not in {'yes', 'no'}:
raise ValueError('workflow_completed tidak valid')
seen.add(attempt)
workflows.add(workflow)
solver[row['solver_result']] += 1
validation[row['validation']] += 1
if row['workflow_completed'] == 'yes':
completed.add(workflow)
def percent(numerator, denominator):
return round(100 * numerator / denominator, 2) if denominator else None
observed_validation = validation['passed'] + validation['failed']
return {
'attempts': len(rows),
'solver_ready': solver['ready'],
'solver_failed': solver['failed'],
'solver_pending': solver['pending'],
'solver_result_rate_pct': percent(solver['ready'], len(rows)),
'validation_observed': observed_validation,
'validation_unknown': validation['unknown'],
'validation_pass_rate_pct': percent(validation['passed'], observed_validation),
'workflows': len(workflows),
'workflows_completed': len(completed),
'workflow_completion_rate_pct': percent(len(completed), len(workflows)),
}
if __name__ == '__main__':
print(json.dumps(summarize(sys.argv[1]), indent=2))
Jalankan skrip dari direktori yang berisi kedua file:
python3 summarize_turnstile.py attempts.csv
Contoh tersebut menghasilkan:
{
"attempts": 5,
"solver_ready": 3,
"solver_failed": 1,
"solver_pending": 1,
"solver_result_rate_pct": 60.0,
"validation_observed": 3,
"validation_unknown": 2,
"validation_pass_rate_pct": 66.67,
"workflows": 4,
"workflows_completed": 2,
"workflow_completion_rate_pct": 50.0
}
Tiga dari lima percobaan menghasilkan hasil solver, sehingga tingkat hasil solver sampel adalah 60%. Dua dari tiga validasi yang teramati berhasil, memberikan 66,67%. Dua dari empat workflow unik selesai, memberikan 50%. Percobaan yang gagal dan percobaan ulang yang berhasil untuk w2 dihitung sebagai dua percobaan tetapi satu workflow yang selesai.
Jumlah yang masih tertunda membuat hasil 60% bersifat sementara. Bangun ulang snapshot setelah pekerjaan yang tertunda selesai; jangan menambahkan baris lain dengan ID percobaan yang sama. Jika tidak ada baris atau tidak ada validasi yang teramati, tingkat yang bersangkutan adalah null, bukan nol rekayasa.
Untuk laporan jendela waktu, pilih workflow terlebih dahulu dan sertakan percobaan yang relevan hingga batas waktu observasi. Memfilter baris percobaan secara sembarang dapat menghilangkan keberhasilan yang lebih awal atau percobaan ulang yang lebih akhir dan mengubah penyebut workflow. Simpan hitungan terpisah untuk workflow yang memenuhi syarat tetapi tidak pernah mencapai pengiriman ke solver; skrip kecil ini tidak dapat menghitung operasi yang tidak ada dalam inputnya.
Perhitungan lokal pada contoh dapat direproduksi tanpa kredensial. Untuk memantau layanan Anda, ganti sampel dengan rekaman yang telah disensor dari integrasi nyata Anda dan dokumentasikan kohort ekspor dan batas waktu observasi. Hindari menyertakan kunci API, token mentah, cookie, atau konten formulir pribadi.
Selidiki tahap pertama yang hasilnya berubah, dengan menggunakan kohort workflow yang sama sepanjang proses.
Jika kesalahan pembuatan tugas meningkat, periksa konfigurasi dan kredensial sebelum menambah jumlah percobaan ulang. Jika hasil solver tetap stabil tetapi kegagalan validasi meningkat, tinjau kategori kesalahan validasi dan waktu penyerahan token. Jika validasi tetap stabil tetapi penyelesaian aplikasi menurun, periksa asersi final, respons formulir, atau keluaran data yang diizinkan.
Sebagai contoh, penyedia QA mungkin menyadari bahwa rilis klien menambahkan operasi latar belakang antara penerimaan token dan pengiriman formulir. Perbandingan yang berguna adalah jeda penyerahan dan hasil validasi klien tersebut sebelum dan sesudah rilis. Persentase keberhasilan agregat di seluruh klien dapat menyembunyikan perjalanan yang terdampak.
Perlakukan skenario seperti ini sebagai jalur investigasi, bukan bukti penyebab. Periksa sejumlah kecil kegagalan yang telah diotorisasi dengan stempel waktu sebelum mengubah integrasi. Jaga batas percobaan ulang dan pertahankan percobaan asli sehingga percobaan ulang tidak menggembungkan hitungan penyelesaian.
Cloudflare menyediakan test sitekeys dan secret keys untuk pemeriksaan implementasi yang terkontrol. Gunakan itu untuk menguji cabang lolos dan gagal aplikasi Anda sendiri. Jauhkan pengujian token dummy dari laporan kinerja solver produksi: pengujian tersebut memverifikasi perilaku aplikasi, bukan kualitas penyelesaian di produksi.
Hindari menyimpan token solusi mentah, kunci API, cookie, atau konten halaman yang tidak perlu di log pemantauan. Identifier workflow, identifier tugas, stempel waktu, kategori hasil, dan label konfigurasi yang aman biasanya memberikan titik awal yang lebih baik.
Mulailah pemantauan Turnstile dengan tiga pertanyaan terpisah: apakah solver mengembalikan hasilnya, apakah aplikasi memvalidasi token di tempat bukti itu tersedia, dan apakah operasi yang disetujui selesai?
Tambahkan latensi dan biaya setelah definisi hasil-hasil tersebut stabil. Integrasi CapSolver yang sudah ada dapat menyediakan event tugas solver; aplikasi Anda menyediakan bukti penyelesaian. Menjaga pembagian itu tetap jelas membuat pemecahan masalah dan pelaporan ke klien lebih mudah tanpa membangun sistem pemantauan yang terlalu besar.
T: Metrik solver Cloudflare Turnstile mana yang harus saya lacak terlebih dahulu?
Lacak tingkat hasil solver, penyelesaian workflow, dan waktu hingga hasil yang diamati klien. Tambahkan hasil validasi Siteverify saat Anda mengoperasikan backend yang dilindungi atau memiliki akses resmi ke log-nya. Selalu tampilkan kegagalan dan percobaan yang belum terselesaikan.
T: Apakah tugas CapSolver yang siap berarti situs web menerima tokennya?
Tidak. Tugas siap dengan token yang diharapkan mengonfirmasi hasil solver. Validasi situs web dan operasi aplikasi final adalah peristiwa selanjutnya yang membutuhkan bukti tersendiri.
T: Bisakah saya mengukur keberhasilan validasi token di situs web yang bukan milik saya?
Hanya ketika pemilik memberikan bukti validasi yang terotorisasi. Jika tidak, laporkan hasil browser yang dapat Anda amati dan tandai validasi backend sebagai tidak tersedia.
T: Mengapa validasi Turnstile bisa gagal setelah respons solver yang cepat?
Penggunaan ulang token, pengiriman yang tertunda, atau masalah implementasi tetap dapat memengaruhi validasi. Periksa kesalahan yang sebenarnya dan waktu aplikasi; pengiriman token yang cepat tidak membuktikan bahwa setiap langkah berikutnya sudah benar.
T: Apakah tingkat keberhasilan contoh merupakan janji kinerja?
Tidak. Angka contoh mengilustrasikan penyebut yang berbeda. Ukur workflow resmi Anda sendiri dalam kondisi yang sebanding, dan pisahkan lalu lintas kunci uji dari observasi produksi.

Emma Foster
Machine Learning Engineer
Where machine learning meets practical AI tooling.
TENTANG PENULIS
Perkirakan biaya pemecahan masalah Cloudflare Turnstile dari penggunaan solver, waktu eksekusi browser, percobaan ulang, dan waktu engineer, disertai contoh anggaran terperinci yang jelas.

Perbaiki kesalahan proxy DNS dinamis AntiCloudflareTask. Pelajari mengapa sesi sticky 10 menit dapat menggunakan IP exit yang berbeda dan cara memverifikasi kedua jalur permintaan.
