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