puppeteer 登陆处理

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

navigater.webdriver

网上教程多是使用
  Object.defineProperty(navigator, 'webdriver', {
      get: () => undefined,
  })

或者

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

经验证都无法解决问题,//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

效果如图
puppeteer 登陆处理_第1张图片
当时还没解决webdriver问题,所以即使处理了滑块,也还是会报错。

你可能感兴趣的:(javascript,node.js,puppeteer)