Puppeteer বা Selenium -এ এন্টি-ক্যাপচা প্লাগইন কিভাবে ব্যবহার করবেন
Puppeteer এবং Selenium ব্রাউজার অটোমেশনের জন্য দুটি প্রধান ইঞ্জিন এবং আমাদের প্লাগইন তাদের মধ্যে অবিচ্ছিন্নভাবে একীভূত হয়। এই প্রবন্ধে আমরা দেখাবো কিভাবে এটি যথাক্রমে NodeJS এবং Python প্রোগ্রামিং ভাষার জন্য Puppeteer এবং Selenium-এ ব্যবহার করতে হয়। আপনি যদি দুটির মধ্যে বেছে নেন, আমরা এটির স্থানীয় পরিবেশের কারনে NodeJS+Puppeteer দৃঢ়ভাবে সুপারিশ করে থাকি।
১। নির্ভরতা ইনস্টল করুন। NodeJS-এর জন্য নিচে দেওয়া npm প্যাকেজগুলি ইন্সটল করুন, Python-এর জন্য প্যাকেজগুলি ইনস্টল করুন এবং এক্সিকিউটেবল "chromedriver" ডাউনলোড করুন এই পেজ থেকে। ড্রাইভার সংস্করণটি আপনার সিস্টেমে ইনস্টল করা Chrome সংস্করণের সাথে মেলে।
npm install adm-zip puppeteer puppeteer-extra puppeteer-extra-plugin-stealth
২। ক্রোম-এর জন্য জিপ সংস্করণে প্লাগইন ডাউনলোড করুন, এটি আপনার প্রকল্প ফোল্ডারে আনজিপ করুন। প্রকৃত সংস্করণগুলি এখানে অবস্থিত। আপনি এটি প্রোগ্রামগতভাবেও করতে পারেনঃ
//npm install adm-zip
const https = require('https')
const fs = require('fs');
const AdmZip = require("adm-zip");
const pluginURL = 'https://antcpt.com/anticaptcha-plugin.zip';
(async () => {
// প্লাগইনটি ডাউনলোড করুন
await new Promise((resolve) => {
https.get(pluginURL, resp => resp.pipe(fs.createWriteStream('./plugin.zip').on('close', resolve)));
})
// আনজিপ করুন
const zip = new AdmZip("./plugin.zip");
await zip.extractAllTo("./plugin/", true);
})();
৩। এরপর, ./plugin/js/config_ac_api_key.js ফাইলে আপনার API কী কনফিগার করুন। আপনি গ্রাহক এরিয়া -তে আপনার API কী খুঁজে পেতে পারেন। এটি কাজ করার জন্য আপনার কিছু ইতিবাচক ভারসাম্য প্রয়োজন।
const apiKey = 'API_KEY_32_BYTES';
if (fs.existsSync('./plugin/js/config_ac_api_key.js')) {
let confData = fs.readFileSync('./plugin/js/config_ac_api_key.js', 'utf8');
confData = confData.replace(/antiCapthaPredefinedApiKey = ''/g, `antiCapthaPredefinedApiKey = '${apiKey}'`);
fs.writeFileSync('./plugin/js/config_ac_api_key.js', confData, 'utf8');
} else {
console.error('plugin configuration not found!')
}
৪। প্লাগইন দিয়ে ব্রাউজার শুরু করুন। Puppeteer-এর ক্ষেত্রে আমরা 'puppeteer-extra' প্যাকেজের জন্য 'puppeteer-extra-plugin-stealth' সুপারিশ করে থাকি, যা ওয়েব-স্বয়ংক্রিয় Chromium ব্রাউজারের সমস্ত চিহ্ন লুকিয়ে রাখে।
//npm install puppeteer puppeteer-extra puppeteer-extra-plugin-stealth
const puppeteer = require('puppeteer-extra');
const StealthPlugin = require('puppeteer-extra-plugin-stealth');
puppeteer.use(StealthPlugin());
(async () => {
const browser = await puppeteer.launch({
headless: false,
ignoreDefaultArgs: [
"--disable-extensions",
"--enable-automation"
],
args: [
'--disable-web-security',
'--disable-features=IsolateOrigins,site-per-process',
'--allow-running-insecure-content',
'--disable-blink-features=AutomationControlled',
'--no-sandbox',
'--mute-audio',
'--no-zygote',
'--no-xshm',
'--window-size=1920,1080',
'--no-first-run',
'--no-default-browser-check',
'--disable-dev-shm-usage',
'--disable-gpu',
'--enable-webgl',
'--ignore-certificate-errors',
'--lang=en-US,en;q=0.9',
'--password-store=basic',
'--disable-gpu-sandbox',
'--disable-software-rasterizer',
'--disable-background-timer-throttling',
'--disable-backgrounding-occluded-windows',
'--disable-renderer-backgrounding',
'--disable-infobars',
'--disable-breakpad',
'--disable-canvas-aa',
'--disable-2d-canvas-clip-aa',
'--disable-gl-drawing-for-tests',
'--enable-low-end-device-mode',
'--disable-extensions-except=./plugin',
'--load-extension=./plugin'
]
});
const page = await browser.newPage();
})();
৫। একটি টার্গেট পেজে নেভিগেট করুন এবং প্রয়োজন হলে একটি ফর্ম পূরণ করুন। প্লাগইনটি স্বয়ংক্রিয়ভাবে রিক্যাপচা ধরে ফেলবে এবং এটি সমাধান করা শুরু করবে।
(async () => {
const url = 'https://anti-captcha.com/demo/?page=recaptcha_v2_textarea';
const login = 'Test login';
const password = 'Test password';
try {
await page.goto(url, {
waitUntil: "networkidle0"
});
} catch (e) {
console.error('err while loading the page: '+e);
}
// নেভিগেশান টাইমআউট ত্রুটি নিষ্ক্রিয় করুন
await page.setDefaultNavigationTimeout(0);
await page.$eval('#login', (element, login) => {
element.value = login;
}, login);
await page.$eval('#password', (element, password) => {
element.value = password;
}, password);
})();
৬। পরবর্তী অংশটি একটু কৌশলপূর্ণ। কিছু ওয়েব ফর্মগুলির জন্য ব্যবহারকারীকে Recaptcha সমাধান করার পরে একটি জমা বাটন টিপতে হবে, বাকিগুলো কলব্যাকগুলি ব্যবহার করে এবং সেগুলি স্বয়ংক্রিয়ভাবে জমা দেয়৷ প্রথম ক্ষেত্রে আমরা Recaptcha সমাধান করার পরেই সাবমিট বাটন টিপতে চাই। সঠিক সময়ে এটি করতে, নির্বাচক .antigate_solver.solved আসার জন্য অপেক্ষা করুন এবং তারপর জমা বাটন টিপুন।
// "মীমাংসিত" নির্বাচক আসার জন্য অপেক্ষা করুন
await page.waitForSelector('.antigate_solver.solved').catch(error => console.log('failed to wait for the selector'));
console.log('{{ $t('articles.how-to-integrate.code-comments.recaptcha-solved') }}');
// সাবমিট বাটন টিপুন
await Promise.all([
page.click('#submitButton'),
page.waitForNavigation({ waitUntil: "networkidle0" })
]);
console.log('টাস্ক সম্পন্ন করা হয়েছে, রিক্যাপচা সহ ফর্ম বাইপাস করা হয়েছে');
এই যে, ফর্ম পূরণ করা হয়েছে, Recaptcha সমাধান এবং বাইপাস করা হয়েছে। সম্পূর্ণ কোড নমুনাঃ
// first run the following to install required npm packages:
//
// npm install adm-zip follow-redirects puppeteer puppeteer-extra puppeteer-extra-plugin-stealth
//
//
const https = require('follow-redirects').https;
const fs = require('fs');
const AdmZip = require("adm-zip");
const apiKey = 'YOUR_API_KEY_HERE!';
const pluginURL = 'https://antcpt.com/anticaptcha-plugin.zip';
const url = 'https://anti-captcha.com/demo/?page=recaptcha_v2_textarea';
const login = 'Test login';
const password = 'Test password';
let page = null;
const puppeteer = require('puppeteer-extra');
const StealthPlugin = require('puppeteer-extra-plugin-stealth');
puppeteer.use(StealthPlugin());
(async () => {
// প্লাগইনটি ডাউনলোড করুন
await new Promise((resolve) => {
https.get(pluginURL, resp => resp.pipe(fs.createWriteStream('./plugin.zip').on('close', resolve)));
})
// আনজিপ করুন
const zip = new AdmZip("./plugin.zip");
await zip.extractAllTo("./plugin/", true);
// কনফিগারেশন ফাইলে API কী সেট করুন
await new Promise((resolve, reject) => {
if (fs.existsSync('./plugin/js/config_ac_api_key.js')) {
let confData = fs.readFileSync('./plugin/js/config_ac_api_key.js', 'utf8');
confData = confData.replace(/antiCapthaPredefinedApiKey = ''/g, `antiCapthaPredefinedApiKey = '${apiKey}'`);
fs.writeFileSync('./plugin/js/config_ac_api_key.js', confData, 'utf8');
resolve();
} else {
console.error('plugin configuration not found!')
reject();
}
});
// ব্রাউজার লঞ্চ অপশন সেট করুন
const options = {
headless: false,
ignoreDefaultArgs: [
"--disable-extensions",
"--enable-automation"
],
args: [
'--disable-web-security',
'--disable-features=IsolateOrigins,site-per-process',
'--allow-running-insecure-content',
'--disable-blink-features=AutomationControlled',
'--no-sandbox',
'--mute-audio',
'--no-zygote',
'--no-xshm',
'--window-size=1920,1080',
'--no-first-run',
'--no-default-browser-check',
'--disable-dev-shm-usage',
'--disable-gpu',
'--enable-webgl',
'--ignore-certificate-errors',
'--lang=en-US,en;q=0.9',
'--password-store=basic',
'--disable-gpu-sandbox',
'--disable-software-rasterizer',
'--disable-background-timer-throttling',
'--disable-backgrounding-occluded-windows',
'--disable-renderer-backgrounding',
'--disable-infobars',
'--disable-breakpad',
'--disable-canvas-aa',
'--disable-2d-canvas-clip-aa',
'--disable-gl-drawing-for-tests',
'--enable-low-end-device-mode',
'--disable-extensions-except=./plugin',
'--load-extension=./plugin'
]
}
try {
// প্লাগইন দিয়ে ব্রাউজার চালু করুন
const browser = await puppeteer.launch();
page = await browser.newPage();
} catch (e) {
console.log('could not launch browser: '+e.toString())
return;
}
// টার্গেট পেজে নেভিগেট করুন
try {
await page.goto(url, {
waitUntil: "networkidle0"
});
} catch (e) {
console.error('err while loading the page: '+e);
}
// নেভিগেশান টাইমআউট ত্রুটি নিষ্ক্রিয় করুন
await page.setDefaultNavigationTimeout(0);
// ফর্ম পূরণ করুন
await page.$eval('#login', (element, login) => {
element.value = login;
}, login);
await page.$eval('#password', (element, password) => {
element.value = password;
}, password);
// "মীমাংসিত" নির্বাচক আসার জন্য অপেক্ষা করুন
await page.waitForSelector('.antigate_solver.solved').catch(error => console.log('failed to wait for the selector'));
console.log('{{ $t('articles.how-to-integrate.code-comments.recaptcha-solved') }}');
// সাবমিট বাটন টিপুন
await Promise.all([
page.click('#submitButton'),
page.waitForNavigation({ waitUntil: "networkidle0" })
]);
console.log('recaptcha সমাধান করা হয়েছে');
})();
বোনাসঃ হেডলেস মোডে প্লাগইন চালানোর একটি কৌশল আছে, কারণ ক্রোম প্লাগইনগুলির সাথে ব্রাউজার অটোমেশন সমর্থন করে না। Xvfb নামক ইউটিলিটি ব্যবহার করুন যা আপনার অ্যাপ্লিকেশনের জন্য ভার্চুয়াল ডেস্কটপ প্রদান করে।
# প্যাকেজ ইনস্টল করুন
apt-get install -y xvfb
# ডিসপ্লে ভেরিয়েবল সেট করুন
export DISPLAY=:0
# ব্যাকগ্রাউন্ডে Xvfb daemon চালু করুন (শুধুমাত্র একবার)
/usr/bin/Xvfb :0 -screen 0 1024x768x24 &
# এটি আসার জন্য একটু অপেক্ষা করুন (শুধুমাত্র একবার)
sleep 5
# "node" বা "python" স্ক্রিপ্টে প্রিফিক্স "xvfb-run" যোগ করুন
xvfb-run node myscript.js
# বা
xvfb-run python myscript.py