Cara Memecahkan reCAPTCHA v3 di Python dan Menetapkan Action

reCAPTCHA v3 tidak pernah menampilkan tantangan. Ia berjalan di latar belakang dan memberikan token kepada situs, yang kemudian diverifikasi situs di sisi server. Bagi kode Anda, itu berarti tidak ada yang perlu diklik dan tidak ada yang perlu dilihat, sehingga seluruh pekerjaannya adalah menghasilkan token yang akan diterima situs. Di Python hal itu adalah recaptcha metode yang akan Anda gunakan untuk v2, dengan flag versi.
Bagian yang membuat orang tersandung adalah action.
Penyiapan
# Python 3.10 or newer. pip install capskip
from capskip import CapSkip
solver = CapSkip(
host="127.0.0.1",
port=8080,
recaptchaTimeout=300, # seconds, shared with Turnstile and GeeTest
)CapSkip berjalan di komputer Anda sendiri, jadi aplikasi desktop harus terbuka sebelum semua ini bisa berfungsi.
Panggilan dasar
result = solver.recaptcha(
sitekey="6Lc...YOUR_SITEKEY",
url="https://example.com/checkout",
version="v3",
action="submit",
)
print(result["code"]) # the v3 tokenAda dua hal yang berbeda dari v2. version="v3" diperlukan, dan action harus cocok dengan apa pun yang diteruskan halaman ke grecaptcha.execute. Jika Anda menghilangkannya, nilai defaultnya adalah verify.
Mengapa action itu penting
Action v3 adalah label yang dilekatkan situs pada setiap interaksi terlindungi, sehingga login dan checkout dapat dinilai secara terpisah. Backend situs itu sendiri biasanya memeriksa bahwa action pada token yang dikembalikan cocok dengan action yang diharapkannya untuk endpoint tersebut.
Kirim yang salah dan token itu secara teknis tetap valid tetapi datang dengan label untuk interaksi yang berbeda, yang ditolak mentah-mentah oleh banyak backend. Baca nilai sebenarnya dari halaman alih-alih menebak:
import re
import requests
html = requests.get("https://example.com/checkout").text
# Sites usually call execute() with the action as a literal string.
match = re.search(r"execute\([^,]+,\s*\{\s*action:\s*['\"]([^'\"]+)", html)
action = match.group(1) if match else "verify"
result = solver.recaptcha(
sitekey=sitekey, url=page_url, version="v3", action=action,
)Nilai yang umum adalah login, submit, homepage dan checkout, tetapi keduanya adalah string sembarang yang dipilih oleh siapa pun yang membangun situs itu.
Enterprise v3
Enterprise adalah flag ortogonal, bukan produk terpisah, jadi ia ditumpuk di atasnya:
result = solver.recaptcha(
sitekey=sitekey,
url=page_url,
version="v3",
enterprise=1,
action="submit",
)Anda dapat membedakan Enterprise dari yang standar melalui skrip yang dimuat halaman. Enterprise memuat enterprise.js, standar menarik api.js. Menebak salah menyebabkan pemecahan gagal alih-alih mengembalikan token yang buruk, sehingga memeriksanya murah.
Mengirimkan token
import requests
response = requests.post(
"https://example.com/checkout",
data={
"g-recaptcha-response": result["code"],
"order_id": "...",
},
)Beberapa integrasi v3 menggunakan nama kolom yang berbeda, atau mengirim token sebagai JSON, karena tidak ada widget formulir standar yang membatasinya. Periksa apa yang dilakukan JavaScript halaman itu sendiri sebelum berasumsi g-recaptcha-response.
Pemecahan massal
Python adalah satu-satunya SDK CapSkip yang AsyncCapSkip adalah klien async yang sesungguhnya, bukan alias, sehingga ia benar-benar menjalankan pekerjaan secara tumpang tindih:
import asyncio
from capskip import AsyncCapSkip
async def main():
solver = AsyncCapSkip()
tokens = await asyncio.gather(*[
solver.recaptcha(sitekey=sitekey, url=u, version="v3", action="submit")
for u in urls
])
return [t["code"] for t in tokens]
asyncio.run(main())Kesalahan
from capskip import (
ValidationException, NetworkException, ApiException, TimeoutException,
)
try:
result = solver.recaptcha(sitekey=sitekey, url=page_url, version="v3")
except ValidationException:
pass # missing sitekey or url
except NetworkException:
pass # CapSkip is not running
except ApiException:
pass # rejected sitekey or pageurl
except TimeoutException:
pass # exceeded recaptchaTimeoutPertanyaan yang sering diajukan
Apa yang terjadi jika saya tidak menyertakan action?
Nilai defaultnya adalah verify. Cara itu berhasil di situs yang tidak pernah memeriksa action, dan gagal di situs yang memeriksanya. Karena membaca nilai sebenarnya dari halaman hanya butuh beberapa baris, hal itu layak dilakukan daripada mengandalkan nilai bawaan.
Bisakah saya memeriksa skornya sebelum mengirim?
Tidak. Skor berada di Google dan hanya diungkapkan kepada pemilik situs ketika backend mereka memverifikasi token. Dari sisi klien Anda hanya mendapat token dan tidak lebih, jadi tidak ada cara untuk memeriksa atau menyaring berdasarkan skor sebelum Anda mengirim.
Berapa lama token v3 berlaku?
Sekitar dua menit, dan sekali pakai, sama seperti v2. Pecahkan tepat sebelum permintaan yang membutuhkannya alih-alih menumpuk kumpulan token.
Ringkasan
Teruskan version="v3", atur action ke apa pun yang sebenarnya digunakan halaman, tambahkan enterprise=1 saat halaman dimuat enterprise.js, dan kirim tokennya dengan cepat karena ia kedaluwarsa dalam sekitar dua menit.
Bahasa lain dibahas di halaman pemecah reCAPTCHA v3 , spesifik Enterprise ada di halaman pemecah Enterprise , dan cakupan Python yang lebih luas ada di halaman pemecah CAPTCHA Python halaman. Anda dapat melihat token v3 asli dihasilkan di demo v3, dan CapSkip sendiri adalah pemecah captcha tanpa batas yang berjalan secara lokal.
