首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Node.js
Express
PPA for Ubuntu
ppa:chris-lea/node.js
Coding
V2EX  ›  Node.js

puppeteer 控制 chromium 经常卡死是什么原因

  •  
  •   silvernoo · 59 天前 · 2096 次点击
    这是一个创建于 59 天前的主题,其中的信息可能已经有所发展或是发生改变。

    https://gist.github.com/silvernoo/b998086fd2b933d2dcf70bee7460559a

    十几次循环后必然会卡死,没有任何日志。es 代码不太会写,自己找原因希望渺茫,dalao 帮我看看是怎么回事。

    第 1 条附言  ·  59 天前

    click替换为就好了,原因不明

            const element = await page.$('[href="#download-license-container"]');
            await element.click();
            await page.waitFor(500);
            const element2 = await page.$('[class="button button-submit"]');
            await element2.click();
    
    1 回复  |  直到 2019-12-06 08:00:47 +08:00
        1
    guoyongyi11   5 天前
    我当时使用 puppeteer 碰到如下几种问题会造成 hang 的。

    1. 截图 hang
    界面上没有 body 元素。你可以 goto 界面后,再把 body 元素取出来看一看。

    2. 因为 page crash 而 hang
    程序一旦意外 crash 后,后面执行 page 相关的代码就会被 hang 住,现在的解决办法就是在 page.on('error') 里面把 browser.close 掉,使后面的代码报错,从而被 catch 住,在 catch 里面再做进一步处理。

    3. puppeteer 在跑并行的时候,如果使用 Promise.all ,很容易被其中一个异步方法 hang 住,造成整个进程都 hang 住
    解决方法就是创建并行函数,但不要使用 Promise.all
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   949 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 23ms · UTC 21:00 · PVG 05:00 · LAX 13:00 · JFK 16:00
    ♥ Do have faith in what you're doing.