当前位置: 代码迷 >> 综合 >> puppeteer 服务器认证(跳过路由器登录弹出框)的方法
  详细解决方案

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

热度:31   发布时间:2023-12-15 12:12:05.0

puppeteer 解决服务器认证的方法

  • 问题描述:
  • 问题分析:
  • 解决方法:
  • 总结

问题描述:

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

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

问题分析:

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

解决方法:

先打开 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()
})()

总结

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