• 请不要在回答技术问题时复制粘贴 AI 生成的内容
zone10
V2EX  ›  程序员

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

  •  
  •   zone10 · Jan 8, 2020 · 5882 views
    This topic created in 2495 days ago, the information mentioned may be changed or developed.

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