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')
以上示例代码,启动后将打开百度页面,并且会保存你的登录信息,大功告成啦!希望对您有帮助,感谢阅读!