Python için Playwright ile CAPTCHA çözümü gönderin

solvethree tarafından3 dk okuma

Önce CAPTCHA'yı çözün, ardından aynı proxy'yi ve döndürülen tarayıcı kimliğini kullanarak bir Playwright bağlamı oluşturun. solution.token değerini, uygulamanızın gerçekten gönderdiği alan üzerinden gönderin.

Aşağıdaki örnek, kontrolünüzdeki bir sayfada form gönderir. Uygulamanın POST yanıtını bekler; reCAPTCHA'yı yakalamaz veya evrensel bir CAPTCHA geri çağırımına dayanmaz.

Bu sayfada

Hedefi ve ortamı hazırlayın

Python 3.10+ kullanın, Playwright'ı ve Chromium tarayıcısını kurun ve resmî solvethree Python SDK wheel paketini yükleyin. Çalışma alanı API anahtarını tarayıcı JavaScript'inde değil, Python sürecinde tutun.

  • TARGET_URL: form sayfanızın tam URL'si. Örnek, çözüm isteği için bu URL'nin ana makine adını çıkarır.
  • SOLVETHREE_PROXY: gerekiyorsa kimlik doğrulama bilgilerini de içeren proxy URL'si. Çözüm ve tarayıcı trafiği için aynı proxy kullanılır.
  • SOLVETHREE_API_KEY: çalışma alanı API anahtarınız.

Hedef ana makine adı için çalışma alanınızın erişebildiği etkin bir profil gerekir. Örneği çalıştırmadan önce site profilini kurun. Örnekteki login eylemini entegrasyonunuzun gerektirdiği eylemle değiştirin; ana makine adı ve eylem göndermek profil oluşturmaz. İstek varsayılan olarak reCAPTCHA Enterprise v3 kullanır.

Çözün, Chromium'u yapılandırın ve gönderin

Python Playwright · gerçek bir form gönderimi
# Install playwright and the official Python SDK; run playwright install chromium.
import asyncio
import os
from urllib.parse import urlsplit, unquote
from playwright.async_api import async_playwright
from solvethree import Solvethree

async def main():
    target = os.environ["TARGET_URL"]
    proxy = urlsplit(os.environ["SOLVETHREE_PROXY"])
    client = Solvethree(os.environ["SOLVETHREE_API_KEY"])
    task = {"site": urlsplit(target).hostname, "action": "login", "proxy": os.environ["SOLVETHREE_PROXY"]}
    result = await asyncio.to_thread(client.solve, task, timeout=180)
    solution = result["solution"]
    async with async_playwright() as playwright:
        browser = await playwright.chromium.launch()
        try:
            netloc = proxy.netloc.rsplit("@", 1)[-1]
            context = await browser.new_context(
                proxy={"server": f"{proxy.scheme}://{netloc}", "username": unquote(proxy.username or ""), "password": unquote(proxy.password or "")},
                user_agent=solution["userAgent"], extra_http_headers={"sec-ch-ua": solution["secChUa"]})
            page = await context.new_page()
            await page.goto(target)
            field = page.locator('[name="g-recaptcha-response"]')
            await field.wait_for(state="attached")
            await field.evaluate("(field, token) => { field.value=token; field.dispatchEvent(new Event('input',{bubbles:true})); }", solution["token"])
            async with page.expect_response(lambda r: r.request.method == "POST" and urlsplit(r.url).netloc == urlsplit(target).netloc) as outcome:
                await page.get_by_role("button", name="Submit", exact=True).click()
            print("Application HTTP status:", (await outcome.value).status)
            # Check the application's actual response; adapt form/CSRF/session setup.
            await context.close()
        finally:
            await browser.close()

asyncio.run(main())

Solvethree senkrondur. client.solve çağrısını asyncio.to_thread üzerinden yapmak, oluşturma ve sorgulama işleminin Playwright'ın olay döngüsünü engellemesini önler. Hazır bir sonuç döndürür veya istisna fırlatır; SDK'nın yerel asenkron istemcisi yoktur.

Tarayıcı bağlamı solution.userAgent ve solution.secChUa kullanır. Örnek ayrıca proxy sunucusunu kullanıcı adı ve parolasından ayırır; kimlik bilgilerinin kodlamasını Playwright'a aktarmadan önce çözer. Bu görev tek bir proxy kullandığından aday seçimi adımı yoktur.

  1. 1.

    Uygulamanın token girdisiyle eşleştirin

    Örnek, alanın DOM'a eklenmesini bekler, solution.token değerini atar ve bir input olayı tetikler. Alanın görünür olmasını gerektirmez. Uygulamanız farklı bir alan gönderiyorsa veya token durumunu başka bir yerden okuyorsa bu aktarımı giden istekle eşleşecek şekilde uyarlayın.

  2. 2.

    Formun oturum gereksinimlerini ekleyin

    Örnek, yeni bir tarayıcı bağlamıyla başlar. Göndermeden önce uygulamanızın gerektirdiği oturum, form hazırlığı veya CSRF işlemlerini ekleyin.

  3. 3.

    Doğru POST isteğini bekleyin

    Yanıtı bekleme işlemi, Submit düğmesine tıklanmadan önce kaydedilir. Eşleşme koşulu, hedef URL'nin ağ konumuna yapılan bir POST ile eşleşir. Sayfa oraya başka POST istekleri de gönderiyorsa koşulu gönderim uç noktanızla sınırlandırın.

Uygulama yanıtını okuyun

Yazdırılan HTTP durumu, eşleşen bir yanıtın geldiğini doğrular. Gönderimin kabul edilip edilmediğini belirlemek için uygulamanın yanıt gövdesini veya oluşan sayfa durumunu kontrol edin. Hazır bir solvethree görevi, çözümün üretildiği anlamına gelir; hedefin bunu kabul ettiği anlamına gelmez.

Uygulama, hazır bir token'ı reddediyor.

Başka bir çözüm için ödeme yapmadan önce giden form isteğini inceleyin.

Şunu deneyin: Görev kimliği veya eski bir değer yerine solution.token içerdiğini doğrulayın. Gönderimin çözümde kullanılan proxy'yi, döndürülen kullanıcı aracısını ve istemci ipuçlarını kullandığını ve amaçlanan hedefe yapıldığını kontrol edin.

Yanıtı bekleme işlemi ilgisiz bir isteği yakalıyor.

Yakalanan POST URL'sini gerçek form uç noktasıyla karşılaştırın.

Şunu deneyin: Yanıt eşleşme koşulunu, aynı ağ konumuna yapılan her POST ile eşleştirmek yerine o uç noktaya özel hâle getirin.

Çözüm çağrısı, tarayıcıdan gönderim yapılmadan önce istisna fırlatıyor.

HTTP isteği hatası ile nihai olarak başarısız olmuş bir görevi birbirinden ayırın.

Şunu deneyin: Başarılı olmayan HTTP yanıtlarını ayrı ele alın. Başarısız bir görevde errorCode ve error alanlarını inceleyin ve değişmemiş girdilerle yeniden denemek yerine nedeni giderin. SDK'nın solve metodu başarısızlıkta zaten durur.

İlk görevinizi çalıştırın.

$5 çalışma alanı kredisiyle başlayın.

Çalışma alanı oluşturun
Python için Playwright ile CAPTCHA çözümü gönderin · solvethree