当前位置: 首页 > 后端技术 > Node.js

Cendertron,动态爬虫的滑动验证码绕过策略

时间:2023-04-03 16:26:37 Node.js

Cendertron,动态爬虫的滑动验证码绕过策略讨论滑动验证码的绕过策略。本文使用的策略和代码来自文章Howtobypass“sliderCAPTCHA”withJSandPuppeteer。刷卡验证绕过爬虫验证是常见的反爬虫策略之一。在目前的很多网站中,我们都会引入滑动验证的方式来验证访问者的真实性。比如下面这个著名的jQuery滑动插件:在模拟登录的时候,我们经常需要绕过这样的滑动验证,而基于Puppeteer的动态爬虫也提供了便利;通常我们需要执行以下步骤:移动到滑块的中间,按下鼠标,移动鼠标,释放鼠标。constpuppeteer=require('puppeteer');asyncfunctionrun(){constbrowser=awaitpuppeteer.launch({headless:false,defaultViewport:{width:1366,height:768}});constpage=awaitbrowser.newPage();awaitpage.goto('http://kthornbloom.com/slidetosubmit/');awaitpage.type('input[name="name"]','PuppeteerBot');awaitpage.type('input[name="email"]','js@automation.com');让sliderElement=awaitpage.$('.slide-submit');让slider=awaitsliderElement.boundingBox();letsliderHandle=awaitpage.$('.slide-submit-thumb');让handle=awaitsliderHandle.boundingBox();awaitpage.mouse.move(handle.x+handle.width/2,handle.y+handle.height/2);等待page.mouse.down();等待page.mouse.move(handle.x+slider.width,handle.y+handle.height/2,{steps:10});等待page.mouse.up();等待页面.waitFor(3000);//成功!awaitbrowser.close();}run();在现实的例子中,我们可以以淘宝的注册界面为例子:constpuppeteer=require('puppeteer');asyncfunctionrun(){constbrowser=awaitpuppeteer.launch({headless:false,defaultViewport:{width:1366,height:768}});constpage=awaitbrowser.newPage();awaitpage.evaluateOnNewDocument(()=>{Object.defineProperty(navigator,'webdriver',{get:()=>false});});awaitpage.goto('https://world.taobao.com/markets/all/sea/register');让frame=page.frames()[1];awaitframe.waitForSelector('.nc_iconfont.btn_slide');constsliderElement=awaitframe.$('.slidetounlock');constslider=awaitsliderElement.boundingBox();constsliderHandle=awaitframe.$('.nc_iconfont.btn_slide');consthandle=awaitsliderHandle.boundingBox();awaitpage.mouse.move(handle.x+handle.width/2,handle.y+handle.height/2);等待page.mouse.down();等待page.mouse.move(handle.x+slider.width,handle.y+handle.height/2,{steps:50});等待page.mouse.up();等待页面.waitFor(3000);//成功!awaitbrowser.close();}run();另一种常见的滑块规则是如下这种拼图性质的滑块:constpuppeteer=require('puppeteer');constRembrandt=require('rembrandt');asyncfunctionrun(){constbrowser=awaitpuppeteer.launch({headless:false,defaultViewport:{width:1366,height:768}});constpage=awaitbrowser.newPage();让originalImage='';等待page.setRequestInterception(true);page.on('request',request=>request.continue());page.on('response',asyncresponse=>{if(response.request().resourceType()==='image')originalImage=awaitresponse.buffer().catch(()=>{});});awaitpage.goto('https://monoplasty.github.io/vue-monoplasty-slide-verify/');constsliderElement=awaitpage.$('.slide-verify-slider');constslider=awaitsliderElement.boundingBox();constsliderHandle=awaitpage.$('.slide-verify-slider-mask-item');consthandle=awaitsliderHandle.boundingBox();让currentPosition=0;乐tbestSlider={位置:0,差异:100};awaitpage.mouse.move(handle.x+handle.width/2,handle.y+handle.height/2);等待page.mouse.down();while(currentPosition