Puppeteer ile CAPTCHA çözücü kullanın
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.
Puppeteer ve SDK'yı yükleyin
Node.js 22 veya üzerini kullanın. npm ile
puppeteerpaketini vehttps://solvethree.com/downloads/solvethree-sdk-0.1.0.tgzadresindeki resmî SDK tarball arşivini yükleyin. SDK,@solvethree/sdkolarak içe aktarılır; npm kayıt deposunda bir sürüm bulunduğunu varsaymak yerine indirme URL'sini kullanın. Örneği,.mjsuzantılı bir dosya gibi bir ES modülü olarak kaydedin. - 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
logineylemini kullanır; bunu uygulamanız için yapılandırılmış eylemle değiştirin. - 3.
Ortam değişkenlerini ayarlayın
TARGET_URLdeğişkenini size ait HTTPS formuna,SOLVETHREE_PROXYdeğişkenini HTTP veya HTTPS proxy URL'nize veSOLVETHREE_API_KEYdeğ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
// 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.tokendeğ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
inputolayı 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.
Kaynaklar ve API referansı
İlk görevinizi çalıştırın.
$5 çalışma alanı kredisiyle başlayın.