准备工作
确保已安装Node.js和npm,并创建一个空白的Node.js项目。
安装依赖
在项目目录下,运行以下命令安装Puppeteer库:
bash
npm install puppeteer
实现步骤
1. 初始化
首先,我们需要导入Puppeteer库并创建一个浏览器实例。
javascript
Copy code
const puppeteer = require('puppeteer');
const EMAIL = '你的登录账户';
const PASSWORD = '你的登录密码';
async function crackGeetest() {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.setViewport({ width: 1366, height: 768 });
await page.goto('https://account.geetest.com/login');
// 其他操作...
}
crackGeetest();
2. 模拟登录填写,点开滑块验证
在模拟登录过程中,我们需要输入账户和密码,然后点击滑块验证按钮。
javascript
async function crackGeetest() {
//...
await page.type('#email', EMAIL);
await page.type('#password', PASSWORD);
await page.click('.geetest_radar_tip');
// 其他操作...
}
crackGeetest();
3. 获取并储存有无缺口的两张图片
接下来,我们需要获取网页截图并裁剪出验证码图片,包括有缺口和无缺口的图片。
javascript
async function crackGeetest() {
//...
await page.waitForTimeout(2000); // 等待验证码加载
const captcha1 = await page.$('.geetest_canvas_img');
await captcha1.screenshot({ path: 'captcha1.png' });
await page.waitForSelector('.geetest_canvas_next');
await page.click('.geetest_canvas_next');
await page.waitForTimeout(1000); // 等待滑块滑动
const captcha2 = await page.$('.geetest_canvas_img');
await captcha2.screenshot({ path: 'captcha2.png' });
// 其他操作...
}
crackGeetest();
4. 获取缺口位置
通过对比两张图片的像素点,找到缺口位置。
javascript
async function getGap(image1, image2) {
const pixelDifferenceThreshold = 60;
for (let i = 60; i < image1.width; i++) {
for (let j = 0; j < image1.height; j++) {
const pixel1 = image1.getPixel(i, j);
const pixel2 = image2.getPixel(i, j);
const pixelDifference = Math.abs(pixel1[0] - pixel2[0]) +
function getTrack(gap) {
const track = [];
const mid = gap * 4 / 5;
let current = 0;
let v = 0;
const t = 0.2;
while (current < gap) {
let a = 2;
if (current > mid) {
a = -3;
}
const move = v * t + 0.5 * a * t * t;
current += move;
v += a * t;
track.push(Math.round(move));
}
return track;
}
// 使用示例
const track = getTrack(gap);
console.log('滑动轨迹:', track);
6. 按照轨迹拖动,完成验证
最后,根据计算出的轨迹拖动滑块完成验证。
javascript
async function moveSlider(page, track) {
const slider = await page.$('.geetest_slider_button');
await slider.hover();
await slider.mouseDown();
for (let x of track) {
await slider.mouseMove({ x, y: 0 });
}
await slider.mouseUp();
}
// 使用示例
await moveSlider(page, track);
7. 完成登录
如果验证成功,则执行登录操作。
javascript
async function login(page) {
await page.click('.login-btn');
await page.waitForTimeout(10000); // 等待登录成功
console.log('登录成功');
}
// 使用示例
await login(page);
更多内容联系1436423940