ข้าม Recaptcha V2 ด้วย NodeJS และ Puppeteer
สิ่งที่คุณจะได้เรียนรู้
- ตั้งค่า NodeJS และ Webstorm IDE ใน Ubuntu OS ที่ติดตั้งใหม่
- ติดตั้งและนำเข้าโมดูล anticaptchaofficial และ puppeteer npm
- คุณจะได้เรียนรู้วิธีส่งแบบฟอร์ม นี้ ด้วย Recaptcha พร้อมสคริปต์ NodeJS
- เรียนรู้วิธีเขียน puppeteer script ซึ่งเปิด Chromium ในโหมดพื้นหลังและไปที่หน้า
- เรียนรู้วิธีถ่ายภาพหน้าจอและบันทึกลงในดิสก์
- เรียนรู้วิธีกรอกฟิลด์ข้อความในฟอร์มโดยใช้ตัวเลือก CSS
- เรียนรู้วิธีแก้ Recaptcha v2 กรอกข้อความที่ซ่อนไว้ #g-recaptcha-response และส่งแบบฟอร์ม
- หมายเหตุเกี่ยวกับการเพิ่มพูนความรู้ของคุณเกี่ยวกับ Javascript ES6 และ NodeJS
ตั้งค่า 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();
})();
คุณอาจสังเกตว่าในขั้นแรกเราจะแก้แคปต์ชา จากนั้นจึงไปที่หน้านั้นแล้ววางผลลัพธ์ ใช้งานได้กับ Recaptcha เนื่องจากเราทราบแล้วว่ารหัสไซต์และอายุการใช้งานของโทเค็นคือ 120 วินาที
ภาพหน้าจอของหน้าสุดท้ายจะถูกบันทึกไว้ใน screenshot.png หากคุณต้องการดูว่าเกิดอะไรขึ้นในเบราว์เซอร์ ให้ปิดโหมดหัวขาด:
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" ซึ่งเป็นส่วนหนึ่งของแบบฟอร์ม คุณอาจต้องการขยายความรู้ของคุณ:
- เรียนรู้ วิธีเลี่ยงผ่าน Recaptcha V2 แบบฟอร์มพร้อมฟังก์ชันเรียกกลับโดยใช้ NodeJS และ Puppeteer
- หลักสูตร NodeJS และ Javascript ES6 ที่แนะนำโดย Maximilian Schwarzmüller: NodeJS - The Complete Guide และ Accelerated ES6 Javascript Training