Playwright ile CAPTCHA çözücü kullanın

solvethree tarafından3 dk okuma

Önce reCAPTCHA Enterprise görevini çözün, ardından Playwright'ta uygulamanızın formu üzerinden solution.token değerini gönderin. Bu tarayıcı isteğinde aynı proxy'yi ve döndürülen tarayıcı kimliğini kullanın.

Aşağıdaki örnek, bilinen bir token alanı ve Gönder düğmesi içeren, size ait bir HTTPS formunu hedefler. Bu, SDK'dan forma açık bir aktarımdır; tarayıcı eklentisi değildir.

Bu sayfada

Bağımlılıkları ve size ait sayfayı hazırlayın

  1. 1.

    Node.js 22+, Playwright ve Chromium'u yükleyin

    playwright paketini ve Chromium tarayıcı ikili dosyasını yükleyin. Resmî solvethree JavaScript SDK'sını indirilebilir solvethree-sdk-0.1.0.tgz paketini kullanarak yükleyin; doğrudan indirme yoluyla kurulum komutu Node.js entegrasyon talimatlarında yer alır.

  2. 2.

    solvethree'de ana makine adını yapılandırın

    Size ait HTTPS sayfasının ana makine adı için çalışma alanınızda kullanılabilir, etkin bir reCAPTCHA profili bulunmalıdır. Örneği çalıştırmadan önce bunu konsolda ayarlayın. Bir görevde ana makine adı ve eylem göndermek profili oluşturmaz.

  3. 3.

    Üç ortam değişkenini ayarlayın

    TARGET_URL değişkenini size ait HTTPS sayfasının tam URL'sine, SOLVETHREE_PROXY değişkenini proxy URL'sine ve SOLVETHREE_API_KEY değişkenini çalışma alanınızın API anahtarına ayarlayın. Betiği sunucu tarafında çalıştırın; API anahtarını sayfanın JavaScript koduna koymayın. Örnek login eylemini kullanır; uygulamanız farklı bir eylem kullanıyorsa bunu değiştirmeniz gerekir.

  4. 4.

    Örnek formu sağlayın

    Sayfada g-recaptcha-response adlı bir textarea ve erişilebilir adı tam olarak Submit olan bir düğme bulunmalıdır. Formunuz farklıysa çalıştırmadan önce aşağıda açıklanan aktarımı uyarlayın.

Görevin proxy'si ve Playwright'ın tarayıcı proxy'si ayrı ayrı yapılandırılır. Tarayıcı bağlamındaki bir proxy, SDK'nın sunucu tarafındaki API isteklerini otomatik olarak yönlendirmez. Bu örnek göreve bir proxy sağlar ve tarayıcının hedefe yönelik trafiği için aynı proxy'yi yeniden kullanır.

Çözün, ardından Playwright üzerinden gönderin

Playwright + Node.js · size ait bir HTTPS formunu çözme
// Install playwright and the official solvethree SDK first.
import { chromium } from 'playwright';
import { Solvethree } from '@solvethree/sdk';

const target = new URL(process.env.TARGET_URL); // Your configured HTTPS page.
const proxy = new URL(process.env.SOLVETHREE_PROXY);
const client = new Solvethree({ apiKey: process.env.SOLVETHREE_API_KEY });
const result = await client.solve({
  site: target.hostname, action: 'login', proxy: process.env.SOLVETHREE_PROXY,
});
const browser = await chromium.launch();
try {
  const context = await browser.newContext({
    proxy: {
      server: `${proxy.protocol}//${proxy.host}`,
      username: decodeURIComponent(proxy.username),
      password: decodeURIComponent(proxy.password),
    },
    userAgent: result.solution.userAgent,
    extraHTTPHeaders: { 'sec-ch-ua': result.solution.secChUa },
  });
  const page = await context.newPage();
  await page.goto(target.href);
  // This example form has this field and a button named Submit.
  // Adapt the selectors/callback to your own application's form contract.
  await page.locator('[name="g-recaptcha-response"]').waitFor({ state: 'attached' });
  await page.locator('[name="g-recaptcha-response"]').evaluate((field, token) => {
    field.value = token;
    field.dispatchEvent(new Event('input', { bubbles: true }));
  }, result.solution.token);
  await Promise.all([
    page.waitForResponse(response =>
      response.request().method() === 'POST' &&
      new URL(response.url()).origin === target.origin),
    page.getByRole('button', { name: 'Submit', exact: true }).click(),
  ]);
  // Check your application's success response here.
} finally {
  await browser.close();
}

solve, görevi bir kez oluşturur ve görev hazır olana veya hata fırlatana kadar durumunu sorgular. Tarayıcı yalnızca bu çağrı başarılı olduktan sonra başlatılır. Tarayıcı bağlamı, URL kodlamalı kimlik bilgileri de dahil olmak üzere ilk proxy'yi ve döndürülen solution.userAgent ile solution.secChUa değerlerini kullanır.

Form, görev kimliğini değil solution.token değerini alır. Token textarea'sının görünür olması gerekmediğinden örnek, alanın DOM'a eklenmesini bekler. Token'ı atar, bir input olayı tetikler ve ardından Gönder'e tıklar.

  • TARGET_URL uygulamanıza aittir. Çözücü görevi, bu URL'nin ana makine adını site olarak alır; Playwright ise tam URL'ye gider.
  • login, örnekteki eylemdir. Bunu uygulamanızın kullandığı eylemle değiştirin.
  • [name="g-recaptcha-response"], örnekteki token alanının seçicisidir. Uygulamanız token'ı başka bir alanda veya istek parametresinde bekliyorsa bunu değiştirin.
  • Submit, örnekteki düğmenin erişilebilir adıdır. Bu yer bulucuyu değiştirin veya uygulamanızın gerçek gönderim yolunu kullanın.
  • Input olayı, bu demonun aktarımının bir parçasıdır. Gerçek bir uygulama ayrıca bir geri çağrı, uygulama durumu güncellemesi, CSRF değeri veya mevcut oturum gerektirebilir. Token doldurmak için evrensel bir geri çağrı yoktur.

Form token'ı kabul etmezse

Başka bir çözüm için ödeme yapmadan önce, Playwright'ın istek ve yanıt gözlemleme özelliğini kullanarak giden uygulama isteğini inceleyin. Hazır bir görev, bir çözümün mevcut olduğu anlamına gelir; gönderimin kabul edilip edilmediğini uygulamanın yanıtı gösterir.

Gönderilen token eksik veya değişmemiş.

Yalnızca textarea'nın değerini değil, gerçek istek parametresini inceleyin.

Şunu deneyin: solution.token değerini uygulamanın gerçek gönderim yolu üzerinden iletin. Uygulama isteğini ayrı bir durumdan oluşturuyorsa demo alanını güncellemek işe yaramaz.

İstek token'ı içeriyor ancak reddediliyor.

Gönderimin proxy'sini, kullanıcı aracısını, istemci ipuçlarını, hedef ana makine adını ve eylemini çözüm işlemindekilerle karşılaştırın. Uygulamanın oturum ve CSRF gereksinimlerini kontrol edin.

Şunu deneyin: Çözüm işlemi ve gönderim için aynı proxy'yi kullanın, döndürülen tarayıcı kimliğini uygulayın ve göndermeden önce uygulamanın form gereksinimlerini karşılayın.

Betik, tarayıcıyı açmadan önce başarısız oluyor.

HTTP isteği hatasını, başarısızlıkla sonlanmış bir görevden ayırt edin. Başarısız bir görev için errorCode ve error alanlarını inceleyin.

Şunu deneyin: Değişmemiş girdileri tekrar tekrar göndermek yerine bildirilen girdi, profil veya bağlantı sorununu düzeltin. SDK başarısızlık durumunda hata fırlatır; token doldurma adımına devam etmeyin.

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

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

Çalışma alanı oluşturun
Playwright ile CAPTCHA çözücü kullanın · solvethree