دور زدن Recaptcha V2 با NodeJS و Puppeteer
چیزی که قرار است یاد بگیرید
- تنظیم NodeJS و Webstorm IDE در Ubuntu OS که تازه نصب شده است.
- نصب و ایمپورت کردن ماژولهای anticaptchaofficial و puppeteer npm.
- شما یاد خواهید گرفت که چگونه فرم این را با Recaptcha با اسکریپت NodeJS ارسال کنید.
- نحوه نوشتن یک اسکریپت puppeteer که کرومیوم را در حالت پسزمینه باز میکند و به آن صفحه حرکت میکند را بیاموزید.
- نحوه گرفتن اسکرینشات از صفحه و ذخیره آن روی دیسک را بیاموزید.
- نحوه پرکردن فیلدهای متنی فرم با استفاده از سلکتورهای CSS را بیاموزید.
- نحوه حل کردن Recaptcha v2، پرکردن ناحیه متنی مخفی، #g-recaptcha-response و ارسال فرم را بیاموزید.
- نکاتی درباره افزایش دانشتان درباره Javascript ES6 و NodeJS.
تنظیم NodeJS و Webstorm IDE در Ubuntu OS که تازه نصب شده است.
- سیستم عامل اوبونتو: نصب سیستم عامل اوبونتو یک الزام نیست، بلکه یک توصیه است. اجرای NodeJS از ویندوز نیز امکان پذیر است، اما ممکن است کد ما سازگار نباشد.
- Node JS: دانلود NodeJS برای سیستم عامل خود اینجا
- ویرایشگر کد: VS Code یا Atom توصیه می شود. هر دو IDE رایگان هستند.
Curl و nodejs را در اوبونتو نصب کنید:
apt update
apt install -y curl
curl -fsSL https://deb.nodesource.com/setup_18.x | bash -
apt install -y nodejs
نصب و ایمپورت کردن ماژولهای anticaptchaofficial و puppeteer npm.
ماژول های anti-captcha و Puppeteer npm را نصب کنید:
npm install @antiadmin/anticaptchaofficial puppeteer
یک فایل جدید index.js ایجاد کنید و موارد زیر را اضافه کنید. کلید خود را از تنظیمات API جایگزین «YOUR_API_KEY» کنید:
const ac = require("@antiadmin/anticaptchaofficial");
const pup = require("puppeteer");
ac.setAPIKey('YOUR_API_KEY');
نحوه نوشتن یک اسکریپت puppeteer که کرومیوم را در حالت پسزمینه باز میکند و به آن صفحه حرکت میکند را بیاموزید.
ابتدا کد زیر را برای حل کپچا اضافه کنید، سپس فرم را با لاگین و رمز عبور پر کنید، توکن g-response را با id="g-recaptcha-response" در textarea قرار دهید و فرم را ارسال کنید:
const login = 'mylogin';
const password = 'my strong password';
(async () => {
console.log('solving recaptcha ...');
let token = await ac.solveRecaptchaV2Proxyless('https://anti-captcha.com/demo?page=recaptcha_v2_textarea', '6LfydQgUAAAAAMuh1gRreQdKjAop7eGmi6TrNIzp');
if (!token) {
console.log('something went wrong');
return;
}
console.log('opening browser ..');
const browser = await pup.launch();
console.log('creating new tab ..');
const tab = await browser.newPage();
console.log('changing window size .. ');
await tab.setViewport({ width: 1360, height: 1000 });
console.log('opening target page ..');
await tab.goto('https://anti-captcha.com/demo?page=recaptcha_v2_textarea', { waitUntil: "networkidle0" });
console.log('filling login input ..');
await tab.$eval('#contentbox > form > div > div:nth-child(1) > span > input', (element, login) => {
element.value = login;
}, login);
console.log('filling password input');
await tab.$eval('#contentbox > form > div > div:nth-child(2) > span > input', (element, password) => {
element.value = password;
}, password);
console.log('setting recaptcha g-response ...');
await tab.$eval('#g-recaptcha-response', (element, token) => {
element.value = token;
}, token);
console.log('submitting form .. ');
await Promise.all([
tab.click('#contentbox > form > div > div.tac.padding20px > button'),
tab.waitForNavigation({ waitUntil: "networkidle0" })
]);
console.log('making a screenshot ...');
await tab.screenshot({ path: 'screenshot.png' });
console.log('closing browser .. ');
await browser.close();
})();
ممکن است توجه داشته باشید که ما ابتدا کپچا را حل می کنیم و تنها پس از آن به صفحه پیمایش می کنیم و نتیجه را پیست می کنیم. این برای Recaptcha کار می کند، زیرا می دانیم که سایت کلید و طول عمر توکن 120 ثانیه است.
اسکرین شات صفحه نهایی در screenshot.png ذخیره می شود. اگر میخواهید ببینید در مرورگر چه اتفاقی میافتد، حالت هدلس را خاموش کنید:
console.log('opening browser ..');
//const browser = await pup.launch();
const browser = await pup.launch({ headless: false });
نکاتی درباره افزایش دانشتان درباره Javascript ES6 و NodeJS.
شما یاد گرفتهاید که چگونه یک فرم را با Recaptcha V2 به سادهترین روش پیادهسازی دور بزنید - با استفاده از ناحیه متنی "g-recaptcha-response" به عنوان بخشی از فرم. ممکن است بخواهید دانش خود را گسترش دهید:
- با استفاده از NodeJS و Puppeteer فرم چگونه Recaptcha V2 را دور بزنیم را با یک تابع callback بیاموزید.
- دوره های توصیه شده NodeJS و Javascript ES6 توسط Maximilian Schwarzmüller: NodeJS - The Complete Guide و Accelerated ES6 Javascript Training