V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
zone10
V2EX  ›  程序员

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

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