close menu
سپورٹ کیے جانے والے ٹاسکس کی اقسام
API طریقہ کار
آرٹیکلز
GitHub icon
GitHub
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 حل ہونے کے فورا بعد ہی جمع کروانے کا بٹن دبانا چاہیے۔ ایسا صحیح وقت پر کرنے کے لیے، بس سلیکٹر .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