যখন আপনার Playwright অটোমেশন প্রবাহের জন্য ব্যবহারিক API ইন্টিগ্রেশন নির্দেশিকা সহ একটি স্থিতিশীল ক্যাপচা সমাধানের পথ প্রয়োজন তখন এই পৃষ্ঠাটি ব্যবহার করুন৷
Death By Captcha (DBC) Playwright স্ক্রিপ্টগুলিকে ম্যানুয়াল ইন্টারঅ্যাকশনের পরিবর্তে API-র মাধ্যমে ক্যাপচা চ্যালেঞ্জ সমাধান করতে দেয়: আপনার স্ক্রিপ্ট পেজ থেকে চ্যালেঞ্জ প্যারামিটার বের করে, DBC থেকে সমাধান অনুরোধ করে, ফলাফল আবার পেজে বসিয়ে দেয় এবং ফ্লো চালিয়ে যায়। এই পেজটি কুইকস্টার্ট: ইনস্টলেশন, চালানো যোগ্য কোড উদাহরণ এবং সমর্থিত কাজের নোট।
Node.js:
npm install playwright deathbycaptcha-lib
Python:
pip install deathbycaptcha-official
ক্লায়েন্টে আপনার DBC অ্যাকাউন্টের ক্রেডেনশিয়াল ব্যবহার করুন। ফ্লো চালানোর আগে অ্যাকাউন্ট তৈরি করুন এবং মূল্য ও ব্যালেন্স দেখুন।
const { chromium } = require('playwright');
const { HttpClient } = require('deathbycaptcha-lib');
const client = new HttpClient(process.env.DBC_USERNAME, process.env.DBC_PASSWORD);
const DEMO_URL = 'https://www.google.com/recaptcha/api2/demo';
async function solveRecaptchaV2(pageUrl, sitekey) {
const balance = await new Promise((resolve, reject) =>
client.get_balance((b) => (b ? resolve(b) : reject(new Error('Could not read balance')))));
if (balance <= 0) throw new Error('No balance - top up before solving.');
return new Promise((resolve, reject) =>
client.decode(
{ extra: { type: 4, token_params: JSON.stringify({ googlekey: sitekey, pageurl: pageUrl }) } },
(solution) => (solution && solution.text ? resolve(solution.text) : reject(new Error('No solution yet - retry')))
));
}
(async () => {
const browser = await chromium.launch();
const page = await browser.newPage();
await page.goto(DEMO_URL, { timeout: 60000 });
// 1. extract the challenge parameters
const sitekey = await page.getAttribute('#recaptcha-demo', 'data-sitekey');
// 2. request the solution token from DBC (type 4 = reCAPTCHA v2 token)
const token = await solveRecaptchaV2(DEMO_URL, sitekey);
// 3. inject the token and trigger the page callback
await page.evaluate((t) => {
const el = document.getElementById('g-recaptcha-response');
if (!el) return;
el.style.display = 'block';
el.value = t;
el.dispatchEvent(new Event('input', { bubbles: true }));
el.dispatchEvent(new Event('change', { bubbles: true }));
const cfg = window.___grecaptcha_cfg;
if (!cfg || !cfg.clients) return;
for (const k of Object.keys(cfg.clients)) {
const c = cfg.clients[k];
for (const key of Object.keys(c)) {
const item = c[key];
if (item && typeof item.callback === 'function') return item.callback(t);
if (item && item.W && typeof item.W.callback === 'function') return item.W.callback(t);
}
}
}, token);
// 4. submit and wait for success
await page.click('#recaptcha-demo-submit');
await page.waitForSelector('.recaptcha-success', { timeout: 15000 });
console.log('solved');
await browser.close();
})();
সম্পূর্ণ চালানো যোগ্য সংস্করণ: অফিসিয়াল Node.js ক্লায়েন্ট রিপোজিটরিতে examples/playwright
| বিষয় | নোট |
|---|---|
| ক্যাপচা ধরন (API) | reCAPTCHA v2 ও v3, Cloudflare Turnstile, GeeTest, DataDome এবং ছবি/টেক্সট ক্যাপচা। |
| ব্যালান্স | সমাধানগুলি অ্যাকাউন্টের ব্যালেন্স থেকে পরিশোধিত হয়; ডিকোড করার আগে এটি পরীক্ষা করুন। |
| পুনরায় চেষ্টা | সমাধান না ফিরলে সাময়িক: অফিসিয়াল উদাহরণের মতো ব্যাকঅফ সহ আবার চেষ্টা করুন। |
| API বনাম এক্সটেনশন | এই ফ্লো আপনার স্ক্রিপ্টের ভেতরে API ব্যবহার করে; ব্রাউজার এক্সটেনশন হলো ম্যানুয়াল ব্রাউজিংয়ের নো-কোড পথ। |
| সমর্থিত ব্রাউজার | Playwright-এর মাধ্যমে Chromium, Firefox ও WebKit (নমুনা Chromium-এ যাচাই করা)। |
| এলাকা | কেন এটা গুরুত্বপূর্ণ | প্রস্তাবিত অনুশীলন |
|---|---|---|
| প্রক্সি ধারাবাহিকতা | টোকেন প্রবাহে যাচাইকরণের অমিলের ঝুঁকি হ্রাস করে। | অটোমেশন প্রসঙ্গে পাথ সারিবদ্ধভাবে সমাধান এবং জমা দিন। |
| সময়সীমার শৃঙ্খলা | সারি স্টল এবং ফ্ল্যাকি CI রান প্রতিরোধ করে। | ডিটারমিনিস্টিক ফলব্যাক হ্যান্ডলিং সহ আবদ্ধ পুনঃপ্রচার ব্যবহার করুন। |
| টাইপ-নির্দিষ্ট হ্যান্ডলিং | বিভিন্ন চ্যালেঞ্জ ক্লাসের জন্য বিভিন্ন পেলোড ক্ষেত্র প্রয়োজন। | API প্রকারের পৃষ্ঠাগুলি থেকে শুরু করুন এবং একবারে একটি প্রকার যাচাই করুন৷ |
Playwright ক্যাপচা সলভার রোলআউটের জন্য, প্রথমে একটি ক্যাপচা টাইপ যাচাই করুন, তারপর উৎপাদন স্কেলের জন্য নির্ভরযোগ্যতা এবং মূল্য যাচাই সহ কভারেজ প্রসারিত করুন।