Menu

การบายพาส reCAPTCHA V2 ด้วย NodeJS และ Puppeteer


สิ่งที่คุณจะได้เรียนรู้

  • ตั้งค่า NodeJS และ Webstorm IDE ใน Ubuntu OS ที่ติดตั้งใหม่
  • ติดตั้งและนำเข้าโมดูล anticaptchaofficial และ puppeteer npm
  • คุณจะได้เรียนรู้วิธีการส่งแบบฟอร์มนี้ด้วย reCAPTCHA พร้อม NodeJS Script
  • เรียนรู้วิธีเขียน Puppeteer Script ซึ่งเปิด Chromium ในโหมดพื้นหลังและไปที่หน้า
  • เรียนรู้วิธีถ่ายภาพหน้าจอและบันทึกหน้าดังกล่าวลงในดิสก์
  • เรียนรู้วิธีกรอกช่องข้อความในแบบฟอร์มโดยใช้ตัวเลือก CSS
  • เรียนรู้วิธีแก้ reCAPTCHA V2, กรอก #g-recaptcha-response ลงใน textarea ที่ซ่อนอยู่ และส่งแบบฟอร์ม
  • บันทึกย่อสำหรับการต่อยอดความรู้ของคุณเกี่ยวกับ JavaScript ES6 และ NodeJS
Source code

ตั้งค่า NodeJS และ Webstorm IDE ใน Ubuntu OS ที่ติดตั้งใหม่

  • Ubuntu OS: ไม่จำเป็นต้องติดตั้ง Ubuntu OS แต่แนะนำให้ติดตั้ง การรัน NodeJS จาก Windows ก็สามารถทำได้เช่นกัน แต่โค้ดของเราอาจทำงานไม่เข้ากัน
  • Node JS: ดาวน์โหลด NodeJS สำหรับระบบปฏิบัติการของคุณที่นี่
  • เครื่องมือแก้ไขโค้ด: แนะนำ VS Code หรือ Atom ทั้งสองเครื่องมือเป็น IDE ฟรี

ติดตั้ง cURL และ NodeJS ใน Ubuntu:

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 และเพิ่มข้อมูลต่อไปนี้ แทนที่ "YOUR_API_KEY" ด้วยคีย์ของคุณจากการตั้งค่า API:

const ac = require("@antiadmin/anticaptchaofficial");
      const pup = require("puppeteer");
      ac.setAPIKey('YOUR_API_KEY');

เรียนรู้วิธีเขียน Puppeteer Script ซึ่งเปิด Chromium ในโหมดพื้นหลังและไปที่หน้า

เพิ่มโค้ดต่อไปนี้เพื่อแก้ Captcha ก่อน จากนั้นกรอกแบบฟอร์มด้วยล็อกอินและรหัสผ่าน วางโทเค็น g-response ลงใน textarea โดยใช้ id="g-recaptcha-response" และส่งแบบฟอร์ม:

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

})();

คุณอาจสังเกตว่าเราแก้ Captcha ก่อน จากนั้นจึงไปที่หน้านั้นแล้ววางผลลัพธ์ วิธีนี้ใช้ได้กับ reCAPTCHA เนื่องจากเรารู้ Sitekey อยู่แล้ว และอายุการใช้งานของโทเค็นอยู่ที่ 120 วินาที

ภาพหน้าจอของหน้าสุดท้ายจะถูกบันทึกไว้ใน screenshot.png หากต้องการดูสิ่งที่เกิดขึ้นในเบราว์เซอร์ โปรดปิดโหมด Headless:

console.log('opening browser ..');
//const browser = await pup.launch();
const browser = await pup.launch({ headless: false });

บันทึกย่อสำหรับการต่อยอดความรู้ของคุณเกี่ยวกับ JavaScript ES6 และ NodeJS

คุณได้เรียนรู้วิธีการบายพาสฟอร์มที่มี reCAPTCHA V2 ในรูปแบบที่ง่ายที่สุด โดยใช้ textarea "g-recaptcha-response" เป็นส่วนหนึ่งของแบบฟอร์ม คุณสามารถต่อยอดความรู้ได้หากต้องการ:

Github

https://github.com/anti-captcha/solving-captcha-concepts/blob/master/tutorial1.js