puppeteer 的无头比非无头还慢, 什么情况

2020-01-08 10:39:14 +08:00
 zone10

我用的是 Python 的接口 pyppeteer 库, 就执行一个简单的例子

import asyncio
from pyppeteer import launch

async def main():
    browser = await launch()
    page = await browser.newPage()
    await page.goto( https://www.baidu.com/', timeout=1000*60)
    await page.screenshot({'path': 'example.png'})
    await browser.close()

asyncio.get_event_loop().run_until_complete(main())

开始没设置超时返回以下错误还以为哪里出了问题, 后面才发现 puppeteer 加载一个简单的网页费半天, 设置了一下超时就好了

pyppeteer.errors.TimeoutError: Navigation Timeout Exceeded: 30000 ms exceeded.

而使用 puppeteer 的非无头模式立马就加载出来, 无头比非无头还慢, 请问这什么情况

顺带提问, 做爬虫 js 渲染用 selenium, puppeteer, slash 哪个更好, 或者有更好的框架

4053 次点击
所在节点    程序员
11 条回复
dcalsky
2020-01-08 11:03:45 +08:00
selenium 方法多一些,puppeteer 速度快一些。你要玩异步和并发还是得用 js puppeteer,有一些更顶层的封装库很好用。
kidlfy
2020-01-08 11:09:27 +08:00
js puppeteer +1
dreasky
2020-01-08 11:23:37 +08:00
这个 pyppeteer 经常有点小问题 还是用 js 的 puppeteer 好
zone10
2020-01-08 11:26:53 +08:00
@dreasky js 的 puppeteer 好对接 scrapy 吗, 我用的 scrapy, 如果完全转 nodejs 爬虫不太现实
dreasky
2020-01-08 11:33:52 +08:00
@zone10 scrapy 直接用 splash, 不过这库几年没更新了,或者 selenium
smartbot
2020-01-08 13:00:26 +08:00
我也遇到这个问题
mitu9527
2020-01-08 13:35:09 +08:00
普遍状况,我自己也遇到过,puppeteer 的 issues 中很多类似的问题,你可以去查查看有没有解决办法。写爬虫就 puppeteer 吧,高级 API,写代码又快又舒服。
wzwwzw
2020-01-08 17:03:55 +08:00
不涉及到复杂操作,就用 splash,http api + lua。在做一个负载均衡,比 puppeteer 好多了。
lonelymarried
2020-01-08 17:07:43 +08:00
有时候是网页真没加载出来,timeout 了。我一般不设置 timeout。
coloz
2020-01-08 23:34:35 +08:00
同 puppeteer,之前简单比较过(用的 js,通过 log 输出时间),是否无头,速度是一样的。。。。
感觉浏览器显示个图像并不影响 puppeteer 的操作,主要的时间还是花在了网络传输上
luzihang
2020-01-09 10:07:42 +08:00
我目前的用法
1、部署异步渲染比较快的方式 splash
2、方法比较多的方式 selenium gird+celery 分布式任务分发,可以实现异步。
3、puppeteer 目前用来解决一些比较难登陆,获取 cookie 的问题

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/636044

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX