puppeteer 如何避免爬取網站需要重復登錄的情況
問題:
當我們爬取某個網站時,有些網站可能需要登錄才能獲取到數據,但是當我們通過 puppeteer 啟動瀏覽器后,發現瀏覽器的登錄信息不存在了,即使你在打開后手動登錄了網站,當你重新啟動程序后,又需要重新登錄,導致我們沒辦法獲取到這個網站數據。
解決方案:
我們可以把 啟動瀏覽器 和 應用程序的動作分開。
Chrome瀏覽器是支持遠程調試模式的。Puppeteer 可以通過websocket連接chrome瀏覽器
實現步驟:
找到Chrome安裝路徑
瀏覽器地址輸入 chrome://version 如下圖,把這個地址復制,如下圖
CMD命令行中輸入 C:\Program Files\Google\Chrome\Application\chrome --remote-debugging-port=8888 , 端口改成你想監聽的端口,當然如果配置了環境變量的話可以直接輸入 chrome --remote-debugging-port=8888
測試端口是否已經被監聽
netstat -ano | findstr :8888
如果出現上圖表明已經監聽好了
4. 打開網址:http://127.0.0.1:8888/json/version,出現下圖,記住該webSocket地址
5. 代碼鏈接Chrome瀏覽器
const puppeteer = require('puppeteer-core') var address = 'ws://127.0.0.1:8888/devtools/browser/6664816b-f32b-44b2-998b-9a59e4b3a714' // 復制剛才的地址 const browser = await puppeteer.connect({ browserWSEndpoint: address, }); const page = await browser.newPage(); await page.goto('http://www.baidu.com')
以上示例代碼,啟動后將打開百度頁面,并且會保存你的登錄信息,大功告成啦!希望對您有幫助,感謝閱讀!