Menu

Puppeteer বা Selenium -এ এন্টি-ক্যাপচা প্লাগইন কিভাবে ব্যবহার করবেন

Puppeteer এবং Selenium ব্রাউজার অটোমেশনের জন্য দুটি প্রধান ইঞ্জিন এবং আমাদের প্লাগইন তাদের মধ্যে অবিচ্ছিন্নভাবে একীভূত হয়। এই প্রবন্ধে আমরা দেখাবো কিভাবে এটি যথাক্রমে NodeJS এবং Python প্রোগ্রামিং ভাষার জন্য Puppeteer এবং Selenium-এ ব্যবহার করতে হয়। আপনি যদি দুটির মধ্যে বেছে নেন, আমরা এটির স্থানীয় পরিবেশের কারনে NodeJS+Puppeteer দৃঢ়ভাবে সুপারিশ করে থাকি।

১। নির্ভরতা ইনস্টল করুন। NodeJS-এর জন্য নিচে দেওয়া npm প্যাকেজগুলি ইন্সটল করুন, Python-এর জন্য প্যাকেজগুলি ইনস্টল করুন এবং এক্সিকিউটেবল "chromedriver" ডাউনলোড করুন এই পেজ থেকে। ড্রাইভার সংস্করণটি আপনার সিস্টেমে ইনস্টল করা Chrome সংস্করণের সাথে মেলে।

Node.js
Python
npm install adm-zip puppeteer puppeteer-extra puppeteer-extra-plugin-stealth
pip3 install selenium

২। ক্রোম-এর জন্য জিপ সংস্করণে প্লাগইন ডাউনলোড করুন, এটি আপনার প্রকল্প ফোল্ডারে আনজিপ করুন। প্রকৃত সংস্করণগুলি এখানে অবস্থিত। আপনি এটি প্রোগ্রামগতভাবেও করতে পারেনঃ

Node.js
Python
//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);
})();
import urllib.request
import zipfile

url = 'https://antcpt.com/anticaptcha-plugin.zip'
#  প্লাগইনটি ডাউনলোড করুন
filehandle, _ = urllib.request.urlretrieve(url)
# আনজিপ করুন
with zipfile.ZipFile(filehandle, "r") as f:
    f.extractall("plugin")

৩। এরপর, ./plugin/js/config_ac_api_key.js ফাইলে আপনার API কী কনফিগার করুন। আপনি গ্রাহক এরিয়া -তে আপনার API কী খুঁজে পেতে পারেন। এটি কাজ করার জন্য আপনার কিছু ইতিবাচক ভারসাম্য প্রয়োজন।

Node.js
Python
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!')
}
from pathlib import Path
import zipfile

# `+t('articles.how-to-integrate.code-comments.set-api-key')+`
api_key = "API_KEY_32_BYTES"
file = Path('./plugin/js/config_ac_api_key.js')
file.write_text(file.read_text().replace("antiCapthaPredefinedApiKey = ''", "antiCapthaPredefinedApiKey = '{}'".format(api_key)))

# `+t('articles.how-to-integrate.code-comments.zip-back')+`
zip_file = zipfile.ZipFile('./plugin.zip', 'w', zipfile.ZIP_DEFLATED)
for root, dirs, files in os.walk("./plugin"):
        for file in files:
            path = os.path.join(root, file)
            zip_file.write(path, arcname=path.replace("./plugin/", ""))
zip_file.close()

৪। প্লাগইন দিয়ে ব্রাউজার শুরু করুন। Puppeteer-এর ক্ষেত্রে আমরা 'puppeteer-extra' প্যাকেজের জন্য 'puppeteer-extra-plugin-stealth' সুপারিশ করে থাকি, যা ওয়েব-স্বয়ংক্রিয় Chromium ব্রাউজারের সমস্ত চিহ্ন লুকিয়ে রাখে।

Node.js
Python
//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();
})();
from selenium import webdriver

options = webdriver.ChromeOptions()
options.add_extension('./plugin.zip')

browser = webdriver.Chrome('./chromedriver', options=options)

৫। একটি টার্গেট পেজে নেভিগেট করুন এবং প্রয়োজন হলে একটি ফর্ম পূরণ করুন। প্লাগইনটি স্বয়ংক্রিয়ভাবে রিক্যাপচা ধরে ফেলবে এবং এটি সমাধান করা শুরু করবে।

Node.js
Python
(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);
    }
    // `+t('articles.how-to-integrate.code-comments.disable-timeouts')+`
    await page.setDefaultNavigationTimeout(0);

    await page.$eval('#login', (element, login) => {
        element.value = login;
    }, login);
    await page.$eval('#password', (element, password) => {
        element.value = password;
    }, password);

})();
browser.get('https://anti-captcha.com/demo/?page=recaptcha_v2_textarea')

# filling form
browser.find_element_by_css_selector('#login').send_keys('Test login')
browser.find_element_by_css_selector('#password').send_keys('Test password')

৬। পরবর্তী অংশটি একটু কৌশলপূর্ণ। কিছু ওয়েব ফর্মগুলির জন্য ব্যবহারকারীকে Recaptcha সমাধান করার পরে একটি জমা বাটন টিপতে হবে, বাকিগুলো কলব্যাকগুলি ব্যবহার করে এবং সেগুলি স্বয়ংক্রিয়ভাবে জমা দেয়৷ প্রথম ক্ষেত্রে আমরা Recaptcha সমাধান করার পরেই সাবমিট বাটন টিপতে চাই। সঠিক সময়ে এটি করতে, নির্বাচক .antigate_solver.solved আসার জন্য অপেক্ষা করুন এবং তারপর জমা বাটন টিপুন।

Node.js
Python
// "মীমাংসিত" নির্বাচক আসার জন্য অপেক্ষা করুন
await page.waitForSelector('.antigate_solver.solved').catch(error => console.log('failed to wait for the selector'));
console.log('recaptcha সমাধান করা হয়েছে');

// সাবমিট বাটন টিপুন
await Promise.all([
    page.click('#submitButton'),
    page.waitForNavigation({ waitUntil: "networkidle0" })
]);
console.log('টাস্ক সম্পন্ন করা হয়েছে, রিক্যাপচা সহ ফর্ম বাইপাস করা হয়েছে ');
# "মীমাংসিত" নির্বাচক আসার জন্য অপেক্ষা করুন
webdriver.support.wait.WebDriverWait(browser, 120).until(lambda x: x.find_element_by_css_selector('.antigate_solver.solved'))
# articles.how-to-integrate.code-comments.press-submit
browser.find_element_by_css_selector('#submitButton').click()

এই যে, ফর্ম পূরণ করা হয়েছে, Recaptcha সমাধান এবং বাইপাস করা হয়েছে। সম্পূর্ণ কোড নমুনাঃ

Node.js
Python

Node.js-এ Anti-Captcha ব্রাউজার এক্সটেনশন কীভাবে ইন্টিগ্রেট করবেন

// 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('recaptcha সমাধান করা হয়েছে');

    // সাবমিট বাটন টিপুন
    await Promise.all([
        page.click('#submitButton'),
        page.waitForNavigation({ waitUntil: "networkidle0" })
    ]);
    console.log('recaptcha সমাধান করা হয়েছে');

})();

Python-এ Anti-Captcha ব্রাউজার এক্সটেনশন কীভাবে ইন্টিগ্রেট করবেন

import urllib.request
import zipfile
import os
from pathlib import Path
from selenium import webdriver

#  প্লাগইনটি ডাউনলোড করুন
url = 'https://antcpt.com/anticaptcha-plugin.zip'
filehandle, _ = urllib.request.urlretrieve(url)
# আনজিপ করুন
with zipfile.ZipFile(filehandle, "r") as f:
    f.extractall("plugin")

# কনফিগারেশন ফাইলে API কী সেট করুন
api_key = "YOUR_API_KEY_HERE!"
file = Path('./plugin/js/config_ac_api_key.js')
file.write_text(file.read_text().replace("antiCapthaPredefinedApiKey = ''", "antiCapthaPredefinedApiKey = '{}'".format(api_key)))

# প্লাগইন ডিরেক্টরি plugin.zip -এ পুনরায় জিপ করুন
zip_file = zipfile.ZipFile('./plugin.zip', 'w', zipfile.ZIP_DEFLATED)
for root, dirs, files in os.walk("./plugin"):
        for file in files:
            path = os.path.join(root, file)
            zip_file.write(path, arcname=path.replace("./plugin/", ""))
zip_file.close()

# ব্রাউজার লঞ্চ অপশন সেট করুন
options = webdriver.ChromeOptions()
options.add_extension('./plugin.zip')

# ব্রাউজার লঞ্চ অপশন সেট করুন
browser = webdriver.Chrome('./chromedriver', options=options)

# টার্গেট পেজে নেভিগেট করুন
browser.get('https://anti-captcha.com/demo/?page=recaptcha_v2_textarea')

# ফর্ম পূরণ করুন
browser.find_element_by_css_selector('#login').send_keys('Test login')
browser.find_element_by_css_selector('#password').send_keys('Test password')

# "মীমাংসিত" নির্বাচক আসার জন্য অপেক্ষা করুন
webdriver.support.wait.WebDriverWait(browser, 120).until(lambda x: x.find_element_by_css_selector('.antigate_solver.solved'))

# সাবমিট বাটন টিপুন
browser.find_element_by_css_selector('#submitButton').click()

বোনাসঃ হেডলেস মোডে প্লাগইন চালানোর একটি কৌশল আছে, কারণ ক্রোম প্লাগইনগুলির সাথে ব্রাউজার অটোমেশন সমর্থন করে না। Xvfb নামক ইউটিলিটি ব্যবহার করুন যা আপনার অ্যাপ্লিকেশনের জন্য ভার্চুয়াল ডেস্কটপ প্রদান করে।

Node.js
Python
# প্যাকেজ ইনস্টল করুন
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
# প্যাকেজ ইনস্টল করুন
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 python myscript.py