Menu

Puppeteer یا Selenium میں Anti-Captcha پلگ ان استعمال کرنے کا طریقہ

Puppeteer اور Selenium براؤزر آٹومیشن کے دو اہم انجن ہیں اور ہمارا پلگ ان آسانی سے ان میں انضمام کرتا ہے۔ اس آرٹیکل میں ہم دکھائیں گے کہ اسے بالترتیب NodeJS اور Python پروگرامنگ زبانوں کے لیے Puppeteer اور Selenium میں کیسے استعمال کیا جائے۔ اگر آپ دونوں میں سے کسی ایک کا انتخاب کرتے ہیں تو ہم اس کے مقامی ماحول کے لحاظ سے NodeJS+Puppeteer کی بھرپور سفارش کرتے ہیں۔

1. ڈیپنڈنسیز انسٹال کریں۔ NodeJS کے لیے صرف ذیل میں دیئے گئے npm پیکجز کو انسٹال کریں، Python کے لیے پیکجز انسٹال کریں اور اس پیج سے ایگزیکیوٹ ایبل "chromedriver" ڈاؤن لوڈ کریں۔ ڈرائیور کا ورژن آپ کے سسٹم پر انسٹال Chrome ورژن سے میچ ہونا چاہیے۔

Javascript
Python
npm install adm-zip puppeteer puppeteer-extra puppeteer-extra-plugin-stealth

2. Chrome کے لیے ZIP ورژن میں پلگ ان ڈاؤن لوڈ کریں، اسے اپنے پروجیکٹ فولڈر میں ان زپ کریں۔ اصل ورژن یہاں موجود ہیں۔ آپ اسے پروگرامیٹیکلی بھی کر سکتے ہیں:

Javascript
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);
})();

3. اگلا، اپنی API کلید کو ./plugin/js/config_ac_api_key.js فائل میں کنفیگر کریں۔ آپ اپنی API کلید کسٹمرز کا علاقہ میں تلاش کر سکتے ہیں۔ اسے کام کرنے کے لیے آپ کو کچھ مثبت بیلنس کی ضرورت ہوگی۔

Javascript
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!')
}

4. پلگ ان کے ساتھ براؤزر شروع کریں۔ Puppeteer کے لیے ہم 'puppeteer-extra' پیکیج کے لیے 'puppeteer-extra-plugin-stealth' پلگ ان تجویز کرتے ہیں جو کہ ویب آٹومیٹڈ Chromium براؤزر کی تمام نشانیوں کو چھپاتا ہے۔

Javascript
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();
})();

5. مطلوبہ پیج پر جائیں اور اگر ضرورت ہو تو فارم پُر کریں۔ پلگ ان خود بخود Recaptcha دیکھ لے گا اور اسے حل کرنا شروع کر دے گا۔

Javascript
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);
    }
    // نیویگیشن ٹائم آؤٹ خرابیوں کو غیر فعال کریں
    await page.setDefaultNavigationTimeout(0);

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

})();

6. اگلا تھوڑا مشکل حصہ ہے۔ کچھ ویب فارمز کے لیے صارف سے Recaptcha کو حل کرنے کے بعد جمع کروانے کا بٹن دبانے کی ضرورت ہوتی ہے، دیگر کال بیکس کا استعمال کرتے ہیں اور انہیں خودکار طور پر جمع کرواتے ہیں۔ پہلی صورت میں ہم Recaptcha کے حل ہونے کے فوراً بعد Submit بٹن کو دبانا چاہتے ہیں۔ اسے صحیح وقت پر کرنے کے لیے، بس سلیکٹر .antigate_solver.solved کے آنے کا انتظار کریں اور پھر جمع کروائیں بٹن کو دبائیں۔

Javascript
Python
// “حل ہو گیا” سلیکٹر کے آنے کا انتظار کریں
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 والا فارم بائی پاس ہو گیا');

بس، فارم مکمل گیا، Recaptcha حل اور بائی پاس ہو جاتا ہے۔ مکمل کوڈ کے نمونے:

Javascript
Python
// 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 حل ہو گیا');

})();

بونس: پلگ ان کو ہیڈ لیس موڈ میں چلانے کا ایک نُسخہ موجود ہے، کیونکہ Chrome پلگ انز کے ساتھ براؤزر آٹومیشن کو سپورٹ نہیں کرتا ہے۔ Xvfb نامی یوٹیلیٹی استعمال کریں جو آپ کی ایپلیکیشن کے لیے ورچوئل ڈیسک ٹاپ فراہم کرتی ہے۔

# پیکیج انسٹال کریں
apt-get install -y xvfb

# ڈسپلے کا متغیر (ویری ایبل) سیٹ کریں
export DISPLAY=:0

# پس منظر میں Xvfb ڈیمون اسٹارٹ کریں (صرف ایک مرتبہ)
/usr/bin/Xvfb :0 -screen 0 1024x768x24 &

# اس کے آنے کے لیے تھوڑا سا انتظار کریں (صرف ایک مرتبہ)
sleep 5

# “node” یا “python” اسکرپٹ میں سابقہ (پری فِکس) “xvfb-run” شامل کریں
xvfb-run node myscript.js
# یا
xvfb-run python myscript.py