V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
zone10
V2EX  ›  程序员

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

  •  
  •   zone10 · 2020-01-08 10:39:14 +08:00 · 4372 次点击
    这是一个创建于 1810 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我用的是 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 哪个更好, 或者有更好的框架

    11 条回复    2020-01-09 10:07:42 +08:00
    dcalsky
        1
    dcalsky  
       2020-01-08 11:03:45 +08:00 via Android
    selenium 方法多一些,puppeteer 速度快一些。你要玩异步和并发还是得用 js puppeteer,有一些更顶层的封装库很好用。
    kidlfy
        2
    kidlfy  
       2020-01-08 11:09:27 +08:00
    js puppeteer +1
    dreasky
        3
    dreasky  
       2020-01-08 11:23:37 +08:00
    这个 pyppeteer 经常有点小问题 还是用 js 的 puppeteer 好
    zone10
        4
    zone10  
    OP
       2020-01-08 11:26:53 +08:00
    @dreasky js 的 puppeteer 好对接 scrapy 吗, 我用的 scrapy, 如果完全转 nodejs 爬虫不太现实
    dreasky
        5
    dreasky  
       2020-01-08 11:33:52 +08:00
    @zone10 scrapy 直接用 splash, 不过这库几年没更新了,或者 selenium
    smartbot
        6
    smartbot  
       2020-01-08 13:00:26 +08:00 via Android
    我也遇到这个问题
    mitu9527
        7
    mitu9527  
       2020-01-08 13:35:09 +08:00
    普遍状况,我自己也遇到过,puppeteer 的 issues 中很多类似的问题,你可以去查查看有没有解决办法。写爬虫就 puppeteer 吧,高级 API,写代码又快又舒服。
    wzwwzw
        8
    wzwwzw  
       2020-01-08 17:03:55 +08:00
    不涉及到复杂操作,就用 splash,http api + lua。在做一个负载均衡,比 puppeteer 好多了。
    lonelymarried
        9
    lonelymarried  
       2020-01-08 17:07:43 +08:00
    有时候是网页真没加载出来,timeout 了。我一般不设置 timeout。
    coloz
        10
    coloz  
       2020-01-08 23:34:35 +08:00
    同 puppeteer,之前简单比较过(用的 js,通过 log 输出时间),是否无头,速度是一样的。。。。
    感觉浏览器显示个图像并不影响 puppeteer 的操作,主要的时间还是花在了网络传输上
    luzihang
        11
    luzihang  
       2020-01-09 10:07:42 +08:00
    我目前的用法
    1、部署异步渲染比较快的方式 splash
    2、方法比较多的方式 selenium gird+celery 分布式任务分发,可以实现异步。
    3、puppeteer 目前用来解决一些比较难登陆,获取 cookie 的问题
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2766 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 14:50 · PVG 22:50 · LAX 06:50 · JFK 09:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.