Cara Memecahkan reCAPTCHA v3 di Python dan Menetapkan Action

solve recaptcha v3 in python - How to Solve reCAPTCHA v3 in Python and Set an 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 token

Ada 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 recaptchaTimeout

Pertanyaan 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.