NodeJS 및 Puppeteer로 Recaptcha V2 우회
무엇을 배울 것인가
- 새롭게 설치된 우분투 OS에서 NodeJS 및 웹스톰 IDE를 설정하세요.
- anticaptchaofficial 및 puppeteer npm 모듈을 설치하고 가져오세요.
- NodeJS 스크립트를 사용하여 Recaptcha를 사용하여 이것 양식을 제출하는 방법을 배웁니다.
- puppeteer 스크립트 작성하는 방법을 알아보세요. 이 스크립트는 백그라운드 모드에서 Chromium을 열고 페이지를 탐색하는 방법에 대해서 알아보세요.
- 페이지의 스크린샷을 캡처하고 디스크에 저장하는 방법에 대해서 알아보세요.
- CSS 셀렉터를 이용하여 양식 텍스트 입력란을 채우는 방법에 대해서 알아보세요.
- 리캡챠 V2를 풀고, 숨겨진 텍스트 영역 #g-recaptcha-response를 채우고, 양식을 제출하는 방법에 대해서 알아보세요.
- 자바스크립트 ES6 및 NodeJS에 대한 지식을 확장하는 것에 대한 유의
새롭게 설치된 우분투 OS에서 NodeJS 및 웹스톰 IDE를 설정하세요.
- Ubuntu OS: Ubuntu OS 설치는 필수 사항이 아니라 권장 사항입니다. Windows에서 NodeJS를 실행하는 것도 가능하지만 코드가 호환되지 않을 수 있습니다.
- Node JS: 운영 체제용 NodeJS 다운로드 여기
- 코드 편집기: 권장 VS Code 또는 Atom. 둘 다 무료 IDE입니다.
Ubuntu에 curl 및 nodejs 설치:
Bash
apt update
apt install -y curl
curl -fsSL https://deb.nodesource.com/setup_18.x | bash -
apt install -y nodejs
anticaptchaofficial 및 puppeteer npm 모듈을 설치하고 가져오세요.
보안 문자 방지 및 Puppeteer npm 모듈을 설치합니다.
Bash
npm install @antiadmin/anticaptchaofficial puppeteer
새 파일 index.js를 만들고 다음을 추가합니다. "YOUR_API_KEY"를 API 설정의 키로 바꿉니다.
Javascript
const ac = require("@antiadmin/anticaptchaofficial");
const pup = require("puppeteer");
ac.setAPIKey('YOUR_API_KEY');
puppeteer 스크립트 작성하는 방법을 알아보세요. 이 스크립트는 백그라운드 모드에서 Chromium을 열고 페이지를 탐색하는 방법에 대해서 알아보세요.
다음 코드를 추가하여 먼저 보안 문자를 풀고 로그인 및 비밀번호로 양식을 채우고 id="g-recaptcha-response"인 텍스트 영역에 g-response 토큰을 붙여넣고 양식을 제출하십시오.
Javascript
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();
})();
먼저 보안 문자를 해결한 다음 페이지로 이동하여 결과를 붙여넣는다는 사실을 알 수 있습니다. 사이트 키를 이미 알고 있고 토큰의 수명은 120초이므로 Recaptcha에서 작동합니다.
마지막 페이지의 스크린샷은 스크린샷.png에 저장됩니다. 브라우저에서 무슨 일이 일어나고 있는지 보려면 헤드리스 모드를 끄십시오.
Javascript
console.log('opening browser ..');
//const browser = await pup.launch();
const browser = await pup.launch({ headless: false });
자바스크립트 ES6 및 NodeJS에 대한 지식을 확장하는 것에 대한 유의
양식의 일부로 "g-recaptcha-response" 텍스트 영역을 사용하여 가장 간단한 구현 방식으로 Recaptcha V2를 사용하여 양식을 우회하는 방법을 배웠습니다. 다음과 같이 지식을 확장할 수 있습니다.
- NodeJS 및 Puppeteer를 사용하여 콜백 함수로 Recaptcha V2를 우회하는 방법 양식을 학습합니다.
- Maximilian Schwarzmüller의 추천 NodeJS 및 Javascript ES6 과정: NodeJS - The Complete Guide 및 Accelerated ES6 Javascript Training