提问者:小点点

Puppeteer脚本在本地工作,但不能在EC2 AWS上工作


我正在使用Amazon Linux AMI在EC2 AWS上运行以下脚本

const puppeteer = require('puppeteer');

url_ =  'https://www.barchart.com/futures/quotes/ES*0/interactive-chart/fullscreen';

func()

async function func() {
    console.log(0)
    const browser = await puppeteer.launch();
    console.log(1)
    const page = await browser.newPage();
    console.log(2)
    await page.goto(url_);
    console.log(page)

    return page
}

从今天起,由于EC2上没有任何更改或新安装,脚本在昨天之前一直工作时停止工作。

本地计算机上的相同脚本仍然有效。

相反,在EC2上会出现以下错误:

(节点:12636)UnhandledPromiseRejectionWarning:错误:导航失败,因为浏览器已断开连接!在cdpsession.lifecyclewatcher._eventlisteners.helper.addeventlistener(/home/ec2-user/hd/node_modules/puppeteer/lib/lifecyclewatcher.js:47:107)在cdpsession.emit(events.js:189:13)在cdpsession._onclosed(/home/ec2-user/hd/node_modules/puppeteer/lib/lifecyclewatcher.js:215:10)在(/home/ec2-user/hd/node_modules/puppeteer/lib/helper.js:110:27)第页。goto(/home/ec2-user/hd/node_modules/puppeteer/lib/page.js:656:49)第页。(/home/ec2-user/hd/node_modules/puppeteer/lib/helper.js:111:23)在func(/home/ec2-user/hd/scrape_bk.js:19:13)在process._tickCallback(internal/process/next_tick.js:68:7)(节点:12636)unhandledpromiserejectionwarning:未处理的承诺拒绝。这个错误可能是由于抛出一个没有catch块的异步函数内部,或者是由于拒绝了一个未用.catch()处理的承诺。(拒绝ID:1)(节点:12636)[DEP0018]拒绝警告:不推荐未处理得承诺拒绝.将来,未处理的承诺拒绝将以非零退出代码终止node.js进程。

如果我给出这个URL(http://www.google.com),我会在EC2上得到这个错误(而它仍然在本地计算机上工作):

(节点:12938)UnhandledPromiseRejectionWarning:错误:页面崩溃!在page._ontargetcrass(/home/ec2-user/hd/node_modules/puppeteer/lib/page.js:185:24)在cdpsession.page.client.on.event(/home/ec2-user/hd/node_modules/puppeteer/lib/page.js:140:56)在cdpsession.emit(events.js:189:13)在cdpsession.emit(events.js:189:13)在这个错误可能是由于抛出一个没有catch块的异步函数内部,或者是由于拒绝了一个未用.catch()处理的承诺。(拒绝ID:1)(节点:12938)[DEP0018]拒绝警告:不推荐未处理得承诺拒绝.将来,未处理的承诺拒绝将以非零退出代码终止node.js进程。(节点:12938)UnhandledPromiseRejectionWarning:错误:导航失败,因为浏览器已断开连接!在cdpsession.lifecyclewatcher._eventlisteners.helper.addeventlistener(/home/ec2-user/hd/node_modules/puppeteer/lib/lifecyclewatcher.js:47:107)在cdpsession.emit(events.js:189:13)在cdpsession._onclosed(/home/ec2-user/hd/node_modules/puppeteer/lib/lifecyclewatcher.js:215:10)在(/home/ec2-user/hd/node_modules/puppeteer/lib/helper.js:110:27)第页。goto(/home/ec2-user/hd/node_modules/puppeteer/lib/page.js:656:49)第页。(/home/ec2-user/hd/node_modules/puppeteer/lib/helper.js:111:23)在func(/home/ec2-user/hd/scrape_bk.js:13:13)在process._tickCallback(internal/process/next_tick.js:68:7)(节点:12938)unhandledpromiserejectionwarning:未处理的承诺拒绝。这个错误可能是由于抛出一个没有catch块的异步函数内部,或者是由于拒绝了一个未用.catch()处理的承诺。(拒绝ID:2)

我不知道如何识别问题的来源,因为它突然出现了,没有改变机器或代码,在我的本地机器上,它工作良好。


共1个答案

匿名用户

似乎puppeteer能够启动浏览器,但它随后随机崩溃。这种情况不应该发生在正常的计算机上,而且可能是由于资源限制而发生的。

您应该检查您的系统是否正常运行。特别是,您可能需要检查:

  • 内存使用
  • CPU使用率
  • 磁盘使用

内存过少或CPU功率不足可能会导致随机崩溃以及硬盘空间不足。