javascript|puppeteer 登陆处理

要获取某站点评论数据,访问API后发现会返回登陆页面,即不登陆拿不到足够的信息。
因此打算使用puppeteer登陆获取cookie的方式解决问题。
遇到的问题有2个:
navigater.webdriver

网上教程多是使用

Object.defineProperty(navigator, 'webdriver', { get: () => undefined, })

或者
const brower = await puppeteer.launch({ //config ignoreDefaultArgs:['--enable-automation'] });

【javascript|puppeteer 登陆处理】经验证都无法解决问题,//navigater.webdriver = true
后来看了最新的写法
await page.evaluateOnNewDocument(() => { const newProto = navigator.__proto__; delete newProto.webdriver; navigator.__proto__ = newProto; });

直接用evaluateOnNewDocument删除掉该属性可以解决问题
传送门
滑动验证
验证过navigater.webdriver后就基本没出现滑块了,但是前面试验的时候还是做了解决方案

//移动登陆容器到屏幕左侧,避免获取位置失败 let _block = await await page.$('#nc_1_n1z') await page.evaluate(()=>{ let box = document.querySelector('.login-box-warp'); box.setAttribute('style','letf:1px; right:auto'); }); //获取目标位置 let track = await page.evaluate(()=>{ let step = 20; let slider = document.querySelector('#nc_1__scale_text'); let block = document.querySelector('#nc_1_n1z'); let sBound = slider.getBoundingClientRect(); let bBound = block.getBoundingClientRect(); let track = []; let xStart = parseFloat(sBound.x*1.0+bBound.width*0.5); let xEnd = parseFloat(sBound.x*1.0+sBound.width*1.0); let y = parseFloat(sBound.y*1.0+bBound.height*0.5); let distance = (sBound.width*1.0)/(step-1); track.push([xStart,y+1]); for(let i = 0; i

效果如图
javascript|puppeteer 登陆处理
文章图片

当时还没解决webdriver问题,所以即使处理了滑块,也还是会报错。

    推荐阅读