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()
})()

總結

爬蟲無非是模擬人去控制瀏覽器,瀏覽器也不過是一個發送和解析報文的工具,如果遇到問題,首先嚐試抓報文看看,或許就有思路了。

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