之前有写过关于puppeteer的相关文章
前一段时间,LZ又接到一个需求,要爬取某快递公司网站的订单数据,起初觉得不就是爬一下数据嘛,虽然nodejs玩的不是特别溜,但爬一些简单数据还是难不倒我这种战五渣的。
当我打开网站,输入数据,准备来一波页面结构分析的时候,突然间跳出来一个滑块验证码。卧槽......
WTF,你让我爬个鸟啊.....
盯着滑块验证码瞅了两天,终于我得出一个结论 滑块验证码阻止了人类文明的进步
!
每天早上产品色笑眯眯来问我进度的时候,我的内心都是崩溃的
难受归难受,但业务还是要做的。最后,我想到了之前用puppeteer开发的模拟cas(单点登录)来解决我司某些应用在开发、测试环境自动登录的功能。现在我就以一种情况为例,来看下怎么用node+puppeteer高效的破解滑块验证码。
之前有一兄弟在掘金上写过用puppeteer破解滑块验证码, 接下来我们就用一些另外的思路去破解
这里我们也以前端网为例:
const puppeteer = require("puppeteer");
const fs = require("fs");
const path = require("path");
const pixels = require("image-pixels");
const resemble = require("resemblejs");
let page = null;
const bgImg = path.resolve(__dirname, "bg.png");
const fullbgImg = path.resolve(__dirname, "fullbg.png");
async function run() {
const browser = await puppeteer.launch({
headless: false
});
page = await browser.newPage();
// 打开前端网
await page.goto("https://www.qdfuns.com/");
await page.waitForSelector(".hand");
await page.click("a[data-type=login]");
const geetest_btn = ".geetest_btn";
await page.waitForSelector(geetest_btn);
await page.click(geetest_btn);
await page.waitFor(1000);
// 获取滑动距离
async function getDistance() {
// 获取canvas
let { bg, fullbg } = await page.evaluate(() => {
const fullbg = document.querySelector(".geetest_canvas_fullbg");
const bg = document