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

solvethree tarafından3 dk okuma

Resmî JavaScript SDK'sını kullanarak bir reCAPTCHA v3 Enterprise token'ı alın, ardından solution.token değerini Puppeteer üzerinden formunuza iletin. SDK görevi çözer; çözümü tarayıcıya uygulamaz veya tarayıcı eklentisi sağlamaz.

Aşağıdaki örnek, g-recaptcha-response textarea'sı ve gönder düğmesi içeren, size ait bir HTTPS formunu hedefler. Bunlar demonun form gereksinimleridir; reCAPTCHA korumalı sayfalar için evrensel bir arayüz değildir.

Bu sayfada

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

  1. 1.

    Puppeteer ve SDK'yı yükleyin

    Node.js 22 veya üzerini kullanın. npm ile puppeteer paketini ve https://solvethree.com/downloads/solvethree-sdk-0.1.0.tgz adresindeki resmî SDK tarball arşivini yükleyin. SDK, @solvethree/sdk olarak içe aktarılır; npm kayıt deposunda bir sürüm bulunduğunu varsaymak yerine indirme URL'sini kullanın. Örneği, .mjs uzantılı bir dosya gibi bir ES modülü olarak kaydedin.

  2. 2.

    Site profilini yapılandırın

    Size ait ana makine adını solvethree konsolunda ayarlayın ve profilinin çalışma alanınız için etkin olduğundan emin olun. Ana makine adı ve eylem göndermek bu profili oluşturmaz. Örnek login eylemini kullanır; bunu uygulamanız için yapılandırılmış eylemle değiştirin.

  3. 3.

    Ortam değişkenlerini ayarlayın

    TARGET_URL değişkenini size ait HTTPS formuna, SOLVETHREE_PROXY değişkenini HTTP veya HTTPS proxy URL'nize ve SOLVETHREE_API_KEY değişkenini çalışma alanı anahtarınıza ayarlayın. Anahtarı sayfanın JavaScript kodunda değil, Node.js sürecinde tutun. Örnek, hem çözüm işlemi hem de tarayıcıdan gönderim için tek bir proxy kullanır.

Görevin site değeri, tam sayfa URL'si değil, TARGET_URL içinden çıkarılan ana makine adıdır. reCAPTCHA için site, action ve proxy ya da proxyCandidates alanlarından tam olarak birini gönderin; type veya url alanı eklemeyin. Bu örnek, Puppeteer'ın aynı proxy'yi doğrudan kullanabilmesi için proxy kullanır.

Çözün, ardından Puppeteer'ı aynı kimlikle açın

Puppeteer + Node.js · size ait bir HTTPS formunu çözme
// Install puppeteer and the official solvethree SDK first.
import puppeteer from 'puppeteer';
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 puppeteer.launch({
  args: [`--proxy-server=${proxy.protocol}//${proxy.host}`],
});
try {
  const page = await browser.newPage();
  if (proxy.username) await page.authenticate({
    username: decodeURIComponent(proxy.username),
    password: decodeURIComponent(proxy.password),
  });
  await page.setUserAgent({ userAgent: result.solution.userAgent });
  await page.setExtraHTTPHeaders({ 'sec-ch-ua': result.solution.secChUa });
  await page.goto(target.href);
  // Adapt these selectors and any required callback to your own form.
  await page.waitForSelector('[name="g-recaptcha-response"]');
  await page.$eval('[name="g-recaptcha-response"]', (field, token) => {
    field.value = token;
    field.dispatchEvent(new Event('input', { bubbles: true }));
  }, result.solution.token);
  await Promise.all([
    page.waitForNavigation({ waitUntil: 'domcontentloaded' }),
    page.click('button[type="submit"]'),
  ]);
  // Check your application's success response here.
} finally {
  await browser.close();
}

client.solve, görevi bir kez oluşturur ve görev hazır olana veya hata fırlatana kadar durumunu sorgular. Bu örnek, Puppeteer'ı yalnızca çağrı döndükten sonra başlatır. Tarayıcı görevin proxy'sini kullanır, proxy kimlik bilgileri varsa kimlik doğrulaması yapar ve gezinmeden önce solution.userAgent ile solution.secChUa değerlerini uygular.

Token'ı gönderirken bu proxy'yi veya tarayıcı kimliğini ilgisiz değerlerle değiştirmeyin. Daha sonra proxyCandidates kullanmaya geçerseniz, tarayıcı için başarılı olan özgün proxy'yi seçmek üzere SDK'nın successfulProxy yardımcı işlevini kullanın.

Çözüm işlemi başarısız olursa değişmemiş girdilerle yeniden denemek yerine görevin errorCode ve error alanlarını inceleyin. HTTP isteği hataları, görevlerin başarısızlıkla sonlanmasından ayrıdır. finally bloğu, tarayıcı işlemlerinin ardından yerel tarayıcıyı kapatır; sayfaları kapatmak, uzaktaki görevi iptal etme mekanizması değildir.

Demonun form varsayımlarını değiştirin

  • [name="g-recaptcha-response"], demodaki textarea'yı seçer. Uygulamanız token'ı başka bir alan veya istek parametresi üzerinden alıyorsa bunu değiştirin. Gönderilecek değer görev kimliği değil, solution.token değeridir.
  • button[type="submit"], demonun gönder düğmesini seçer. Uygulamanızın gerçek kontrolünü veya gönderim mekanizmasını kullanın.
  • Örnek, token'ı atar ve bir input olayı tetikler. Bu, uygulamaya özgü bir geri çağrının yerini tutmaz. Gönderimden önce gerekli geri çağrıları, CSRF değerini, giriş alanlarını ve oturum kurulumunu ekleyin.
  • Sondaki başarı kontrolü yorumunu, uygulamanızın yanıtını veya ortaya çıkan durumu sınayan bir doğrulamayla değiştirin. Çözücü görevinin hazır olması, uygulamanın token'ı kabul ettiğini göstermez.

Çalışan bir tarayıcıyı yeniden kullanıyorsanız BrowserContext seçimini bilinçli yapın: yeni bir sayfa otomatik olarak ayrı bir oturum değildir. İlgisiz iş akışlarındaki sayfaları karıştırmak yerine formun oturum gereksinimlerini bir arada tutun.

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

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

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