Çözülen token'ı bir Playwright JSON isteğinde gönderin

solvethree tarafından4 dk okuma

Uygulamanın bilinen JSON POST isteğini yakalayın ve CAPTCHA alanını solution.token ile değiştirin. Uygulama isteğini JavaScript durumundan oluşturuyorsa bir textarea doldurmak işe yaramaz.

Aşağıdaki örnek, sahip olduğunuz bir uygulamanın aynı origin üzerindeki gönderim uç noktasını hedefler. İsteği yeniden oluşturmak yerine diğer JSON alanlarını ve istek üstbilgilerini korur.

Bu sayfada

Örneği uygulamanıza uyarlayın

  1. 1.

    Çözücüyü hazırlayın

    Node.js 22+, Playwright ve resmi JavaScript SDK'sını kullanın. SDK kurulum talimatlarını izleyin; npm kayıt deposunda bulunduğunu varsaymak yerine belgelerde belirtilen paket indirmesini kullanın. SOLVETHREE_API_KEY değerini tarayıcı kodunda değil, Node.js sürecinde tutun.

  2. 2.

    Siteyi ve proxy'yi yapılandırın

    TARGET_URL değerini size ait test sayfasının URL'si, SOLVETHREE_PROXY değerini ise bu sayfa için kullanılacak HTTP veya HTTPS proxy URL'si olarak ayarlayın. Örnek, sayfanın ana makine adı için login eylemini ister. Bu ana makine adı için etkin bir çalışma alanı profili gerekir; önce site profilini yapılandırın. Uygulamanız farklı bir eylem kullanıyorsa eylemi değiştirin.

  3. 3.

    Tam olarak hangi gönderimin yapılacağını belirleyin

    TARGET_SUBMIT_URL değerini, yolu da dahil olmak üzere JSON POST uç noktasına ayarlayın. Sayfayla aynı kökene sahip olmalıdır. Örnek, recaptchaToken içeren bir nesne ve erişilebilir adı tam olarak Submit olan bir düğme bekler. Uygulamaya özgü bu ayrıntıları birlikte değiştirin.

Test düzeneği olarak, bu uç noktaya JSON nesnesi gönderen ve incelenebilir bir yanıt döndüren bir sayfa kullanın. Değişmediklerini kontrol edebilmek için başka bir alan ve bir CSRF alanı ekleyin. Yalnızca aldığı veriyi geri döndüren yerel bir test düzeneği, JSON'un yeniden yazılmasını gösterebilir ancak CAPTCHA'nın kabul edildiğini doğrulamaz. Verilen örnek yine de gerçek bir çözüm gerçekleştirir ve proxy üzerinden erişilebilen, yapılandırılmış bir site gerektirir.

Çözün, isteği yakalayın ve gönderin

Playwright · bilinen tek bir JSON token parametresini değiştirme
import { chromium } 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 submit = new URL(process.env.TARGET_SUBMIT_URL);
if (submit.origin !== target.origin) throw new Error('Use this demo with a same-origin submission URL');
const browser = await chromium.launch();
try {
  const context = await browser.newContext({ proxy: proxyConfig, userAgent: result.solution.userAgent,
    extraHTTPHeaders: { 'sec-ch-ua': result.solution.secChUa } });
  const page = await context.newPage();
  await page.route(submit.href, async route => {
    if (route.request().method() !== 'POST') return route.continue();
    const body = route.request().postDataJSON();
    if (!body || typeof body !== 'object' || Array.isArray(body)) throw new Error('Expected the known JSON object');
    await route.continue({ postData: JSON.stringify({ ...body, recaptchaToken: result.solution.token }),
      headers: { ...route.request().headers(), 'content-type': 'application/json' } });
  });
  await page.goto(target.href);
  const outcome = page.waitForResponse(r => r.url() === submit.href && r.request().method() === 'POST');
  await page.getByRole('button', { name: 'Submit', exact: true }).click();
  console.log('Application HTTP status:', (await outcome).status());
  // recaptchaToken, the Submit button and this endpoint belong to this demo app.
  // Adapt them to the real application, retaining its session/CSRF data.
  await context.close();
} finally { await browser.close(); }

client.solve görevi oluşturur ve hazır olana ya da hata fırlatana kadar durumu sorgular. Ardından örnek, solution.userAgent, solution.secChUa ve çözüm için sağlanan aynı tek proxy ile bir tarayıcı bağlamı oluşturur. SDK, çözümü tarayıcıya uygulamaz; bunu yönlendirme işleyicisi yapar.

Tarayıcı bağlamı yenidir. Gönderim için kimlik doğrulama veya başka bir oturum hazırlığı gerekiyorsa gönderimden önce bunları bu bağlamda gerçekleştirin. Örnek, mevcut bir tarayıcı oturumunu içe aktarmaz.

İsteğin tamamını değil, token'ı değiştirin

Yönlendirme, gezinmeden önce kaydedilir ve yapılandırılmış gönderim URL'siyle sınırlandırılır. POST dışındaki istekler değiştirilmeden devam eder. POST isteklerinde işleyici mevcut JSON nesnesini okur, alanlarını kopyalar ve yalnızca recaptchaToken değerini değiştirir.

Böylece form değerleri ve CSRF verileri gibi gövde alanları korunur. İşleyici ayrıca istek başlıklarını kopyalar ve içerik türünü JSON olarak ayarlar. Uygulamanın mevcut oturum ve CSRF davranışını koruyun; çözülmüş bir token bunların hiçbirinin yerini tutmaz.

Yönlendirmeyi tüm istekleri kapsayacak şekilde genişletmeyin veya token'a benzeyen herhangi bir alanı değiştirmeyin. Size ait uygulamanın giden isteğini inceleyin ve gerçek alan adını kullanın. Bu örnek widget'ları keşfetmez, rastgele geri çağırma işlevlerini çalıştırmaz ve herhangi bir üçüncü taraf sayfasını desteklemez. Playwright'ın ağ belgeleri, istek yakalama mekanizmasını açıklar.

Uygulama yanıtını kontrol edin

Yanıtı bekleme işlemi tıklamadan önce başlar ve gönderim URL'si ile POST yöntemiyle eşleşir. Günlüğe kaydedilen durum, solvethree görevine değil uygulamanın yanıtına aittir. Bu yanıtın gövdesini veya uygulamanın işlem sonrasındaki durumunu, uygulamanın kendi başarı ölçütlerine göre inceleyin. Ne görevin hazır olması ne de tek başına başarılı bir HTTP durum kodu, uygulamanın token'ı kabul ettiğini kanıtlar.

Yanıtı bekleme işlemi hiç tamamlanmıyor.

Tam olarak Submit düğmesinin yapılandırılmış URL'ye POST isteği gönderip göndermediğini kontrol edin.

Şunu deneyin: Düğme bulucusunu, uç noktayı veya yöntemi uygulamayla eşleşecek şekilde düzeltin. Yakalama kapsamını ilgisiz trafiği içerecek şekilde genişletmeyin.

Yönlendirme JSON nesnesini okuyamıyor.

İstek gövdesini ve içerik türünü inceleyin.

Şunu deneyin: Bu işleyiciyi yalnızca bilinen JSON nesnesi uç noktası için kullanın. Form verileri, diziler ve diğer veri biçimleri farklı şekilde işlenmelidir.

Görev hazır, ancak uygulama gönderimi reddediyor.

Giden JSON'da solution.token değerini arayın; ardından oturum/CSRF verilerini, eylemi, döndürülen tarayıcı kimliğini ve proxy'yi kontrol edin.

Şunu deneyin: Başka bir çözüm için ödeme yapmadan önce uyumsuz isteği düzeltin. Tarayıcıyı çözümde kullanılan proxy'de tutun ve döndürülen kimliği kullanın.

Çözüm, tarayıcı açılmadan başarısız oluyor.

HTTP isteği hatasını, görevin nihai başarısızlık durumundan ayırt edin. Başarısız bir görevde errorCode ve error alanlarını inceleyin.

Şunu deneyin: Aynı girdilerle yeniden denemek yerine bildirilen girdi, profil veya bağlantı sorununu düzeltin. API hata yönetimi bölümüne bakın.

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

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

Çalışma alanı oluşturun
Çözülen token'ı bir Playwright JSON isteğinde gönderin · solvethree