Playwright APIRequestContext'i bir CAPTCHA çözümüyle kullanın

solvethree tarafından3 dk okuma

Uygulamanın POST uç noktasını ve form alanlarını zaten biliyorsanız request.newContext() kullanın. Bu, Chromium'u başlatmadan bir HTTP istemcisi oluşturur. Yalnızca bir solvethree token'ı göndermek için tarayıcıdaki alanlarla etkileşim kurmanız gerekmez.

Uygulama çerezlere, CSRF verilerine veya başka form alanlarına ihtiyaç duyuyorsa bunları da sağlayın. SDK, CAPTCHA'yı çözer; uygulamanın oturum açma akışını yeniden oluşturmaz.

Bu sayfada

Bağımlılıkları ve hedef isteği hazırlayın

  1. 1.

    Bağımlılıkları yükleyin

    Node.js 22+ kullanın ve playwright paketini yükleyin. Resmî JavaScript SDK'sını, solvethree.com adresinde /downloads/ altında bulunan solvethree sürüm 0.1.0 tarball arşivinden yükleyin: solvethree-sdk-0.1.0.tgz. İçe aktarma adı @solvethree/sdk şeklindedir; paket kayıt deposunda yayımlanmış bir sürüm olduğunu varsaymayın.

  2. 2.

    Ortam değişkenlerini ayarlayın

    Node.js sürecine SOLVETHREE_API_KEY, SOLVETHREE_PROXY ve TARGET_URL değerlerini sağlayın. Çalışma alanı API anahtarını sunucu tarafında tutun. TARGET_URL, yalnızca CAPTCHA'yı gösteren sayfa değil, uygulamanın gerçek POST uç noktası olmalıdır. Yol, sorgu veya fragment içermeyen bir HTTP ya da HTTPS proxy URL'si kullanın.

  3. 3.

    Site profilini ve eylemi doğrulayın

    Hedef ana makine adı için çalışma alanınızın erişebildiği etkin bir profil gerekir. Çözüm işleminden önce bunu konsolda ayarlayın; ana makine adını iletmek profil oluşturmaz. Örnekte login eylemi kullanılır; hedef başka bir eylem bekliyorsa bunu değiştirin. İstek varsayılan olarak reCAPTCHA Enterprise v3 kullanır.

Örneği çalıştırmadan önce uygulamanın zorunlu form alanlarını ve oturum gereksinimlerini hazır bulundurun. Örnek yalnızca CAPTCHA yanıt alanını gönderir. Ana makine adı henüz yapılandırılmadıysa site profili kurulumu sayfasına bakın.

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

Playwright APIRequestContext · tarayıcı gerekmez
import { request } from 'playwright';
import { Solvethree } from '@solvethree/sdk';
const client = new Solvethree({ apiKey: process.env.SOLVETHREE_API_KEY });
const target = new URL(process.env.TARGET_URL);
const proxy = new URL(process.env.SOLVETHREE_PROXY);
const result = await client.solve({ site: target.hostname, action: 'login', proxy: process.env.SOLVETHREE_PROXY });
const proxyConfig = { server: `${proxy.protocol}//${proxy.host}`, username: decodeURIComponent(proxy.username), password: decodeURIComponent(proxy.password) };

const targetClient = await request.newContext({
  proxy: proxyConfig, timeout: 30000,
  extraHTTPHeaders: { 'User-Agent': result.solution.userAgent, 'sec-ch-ua': result.solution.secChUa },
  // storageState: 'your-application-session.json', // only if your flow needs it
});
try {
  const response = await targetClient.post(target.href, {
    form: { 'g-recaptcha-response': result.solution.token }, maxRedirects: 0,
  });
  console.log('Application HTTP status:', response.status());
  // Inspect the response and supply the application's actual fields/CSRF/session.
} finally { await targetClient.dispose(); }

client.solve() görevi bir kez oluşturur ve görev hazır olana kadar durumunu sorgular veya hata fırlatır. Örnek, hem çözüm hem de gönderim için aynı proxy'yi kullanır. Playwright için proxy sunucusunun adresini kimlik bilgilerinden ayırır ve kullanıcı adı ile parolanın kodlamasını çözer.

İstek bağlamı, solution.userAgent ve solution.secChUa değerlerini başlık olarak uygular. Form, g-recaptcha-response alanında görev kimliğini değil, solution.token değerini gönderir. Proxy ile dönen kimliği birlikte kullanın; bunları ilgisiz tarayıcı başlıklarıyla değiştirmeyin veya token'ı farklı bir hedefe göndermeyin.

Formu, gerektiğinde kimlik bilgileri veya CSRF verileri de dahil olmak üzere uygulamanın gerçek alanlarıyla genişletin. Gerekli uygulama oturumuna zaten sahipseniz isteğe bağlı storageState ayarını etkinleştirin ve bu oturumun kaydedilmiş durumunu gösterecek şekilde ayarlayın.

APIRequestContext kendi çerez deposunu tutar; böylece aynı bağlam üzerinden yapılan istekler, bağlamın aldığı çerezleri korur. İlgisiz bir tarayıcı bağlamıyla otomatik olarak çerez paylaşmaz. Çerez paylaşmaları gerektiğinde, ön koşul olan oturum isteklerini ve son POST isteğini aynı bağlamda tutun. Gönderim tamamlandığında finally bloğu bağlamı temizler.

Yeniden çözmeden önce uygulamanın yanıtını kontrol edin

Örnek, uygulamanın HTTP durum kodunu günlüğe kaydeder; oturum açmanın başarılı olduğunu doğrulamaz. maxRedirects sıfıra ayarlandığında yönlendirmeyi takip etmek yerine ilk yanıtı görürsünüz. Yanıtın gövdesini, başlıklarını ve çerezlerini uygulamanın beklenen başarılı yanıtıyla karşılaştırarak inceleyin. Tek başına bir yönlendirme veya HTTP 200, işlemin başarılı olup olmadığını göstermeyebilir.

Görev hazır, ancak uygulama POST isteğini reddediyor.

Önce gönderilen isteği inceleyin: token alanı, ana makine adı ve eylem, proxy, dönen kimlik, zorunlu form alanları, CSRF değeri ve oturum çerezleri.

Şunu deneyin: Başka bir çözüm için ödeme yapmadan önce eksik veya uyumsuz istek verilerini düzeltin. Hazır bir görev, kullanılabilir bir çözüm sağlar; sonraki aşamada kabul edileceğini garanti etmez.

Çözüm işlemi başarısız bir görevle sonuçlanıyor.

errorCode ve error değerlerini okuyun; her başarısızlığı bir kredi sorunu olarak değerlendirmeyin.

Şunu deneyin: Bu görevin durumunu sorgulamayı bırakın ve bildirilen nedeni giderin. Başarısız çözüm işlemlerinin ücreti iade edilir. Hataları yorumlamak için API hata işleme sayfasını kullanın.

Görev oluşturma işlemi zaman aşımına uğruyor veya bağlantı kesiliyor.

Elinizde bir görev kimliği olup olmadığını veya requestId kullanıp kullanmadığınızı belirleyin. Bağlantı zaman aşımı, oluşturma işleminin başarısız olduğunu kanıtlamaz.

Şunu deneyin: Kimliği elinizdeyse mevcut görevi alın. Kurtarılabilir oluşturma istekleri için bir requestId sağlayın ve bunu tamamen aynı girdilerle yeniden kullanın; bu, mevcut görevi döndürür. Hemen ayrı bir çözüm işlemi başlatmayın.

Uygulama isteği bir HTTP hatası döndürüyor.

Hedefin yanıtını solvethree görev sonucundan ayrı olarak inceleyin.

Şunu deneyin: Başarısız yanıtın gövdesini başarılı bir yanıtın verisi olarak değerlendirmeden önce bu yanıtı ele alın. Nedenin token olduğunu varsaymak yerine uygulama isteğini veya bildirilen sunucu hatasını düzeltin.

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

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

Çalışma alanı oluşturun
Playwright APIRequestContext'i bir CAPTCHA çözümüyle kullanın · solvethree