puppeteer 服务器认证(跳过路由器登录弹出框)的方法

puppeteer 解决服务器认证的方法

问题描述:

当使用 goto 函数去登录路由器时,会一直提示错误,原因是登录超时。

原本以为 goto 之后,再用键盘操作就可以登录进去,但根本就没有登录进去,所以所有针对page的操作,都是无效的。

问题分析:

一直拿不到页面,就一直无法进行下一步操作,首先分析是应该在goto之前定义好,否则是永远无法登录的。

解决方法:

先打开 wireshark 抓包软件去抓包,看浏览器到底向服务器发送了什么:
wireshark抓包结果
抓包结果是在http报文中,有一个认证,我们用puppeteer给服务器发请求时,时没有发过去的。所以应该有一个函数可以为http请求,添加这段认证报文。

我们去puppeteer函数库里面找一下是否有这个函数。
puppeteer函数官网截图
找到了这个认证,确实是可以提供,于是修改代码,可以正常登录,获取page了。具体代码如下:

const puppeteer = require('puppeteer')

const sleep = time => new Promise(resolve => {
    setTimeout(resolve, time);
})

;(async ()=>{
    const browser = await puppeteer.launch(
        {'headless':false,
         'slowMo': 250,
        }).catch(()=>{console.log('wrong in creating browser')})
    const page = await browser.newPage()

    await page.authenticate({'username':'admin','password':'admin1234'})
    await page.goto('http://222.111.111.61/home.asp').catch(()=>{console.log('wrong in goto the web')})
    await sleep(5000)
    await browser.close()
})()

总结

爬虫无非是模拟人去控制浏览器,浏览器也不过是一个发送和解析报文的工具,如果遇到问题,首先尝试抓报文看看,或许就有思路了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章