Puppeteer脚本在本地运行,但不能在EC2 AWS上运行

时间:2019-05-17 15:34:40

标签: javascript node.js amazon-web-services amazon-ec2 puppeteer

我正在使用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/Connection.js:215:10)       在Connection._onClose(/home/ec2-user/hd/node_modules/puppeteer/lib/Connection.js:138:15)       在WebSocketTransport._ws.addEventListener.event(/home/ec2-user/hd/node_modules/puppeteer/lib/WebSocketTransport.js:45:22)       在WebSocket.onClose(/home/ec2-user/hd/node_modules/ws/lib/event-target.js:124:16)       在WebSocket.emit(events.js:189:13)       在WebSocket.emitClose(/home/ec2-user/hd/node_modules/ws/lib/websocket.js:191:10)       在Socket.socketOnClose(/home/ec2-user/hd/node_modules/ws/lib/websocket.js:850:15)       在Socket.emit(events.js:189:13)     -异步-       在帧。 (/home/ec2-user/hd/node_modules/puppeteer/lib/helper.js:110:27)       在Page.goto(/home/ec2-user/hd/node_modules/puppeteer/lib/Page.js:656:49)       在Page。 (/home/ec2-user/hd/node_modules/puppeteer/lib/helper.js:111:23)       在func(/home/ec2-user/hd/scrape_bk.js:19:13)       在process._tickCallback(内部/进程/next_tick.js:68:7)   (节点:12636)UnhandledPromiseRejectionWarning:未处理的承诺拒绝。引发此错误的原因可能是抛出了一个没有catch块的异步函数,或者是拒绝了一个.catch()无法处理的承诺。 (拒绝ID:1)   (节点:12636)[DEP0018] DeprecationWarning:已弃用未处理的承诺拒绝。将来,未处理的承诺拒绝将以非零退出代码终止Node.js进程。

如果我改用此URL(http://www.google.com),则会在EC2上收到此错误(尽管它仍可在本地计算机上使用):

  

(节点:12938)UnhandledPromiseRejectionWarning:错误:页面崩溃!       在Page._onTargetCrashed(/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._onMessage(/home/ec2-user/hd/node_modules/puppeteer/lib/Connection.js:200:12)       在Connection._onMessage(/home/ec2-user/hd/node_modules/puppeteer/lib/Connection.js:112:17)       在WebSocketTransport._ws.addEventListener.event(/home/ec2-user/hd/node_modules/puppeteer/lib/WebSocketTransport.js:41:24)       在WebSocket.onMessage(/home/ec2-user/hd/node_modules/ws/lib/event-target.js:120:16)       在WebSocket.emit(events.js:189:13)       在Receiver.receiverOnMessage(/home/ec2-user/hd/node_modules/ws/lib/websocket.js:789:20)       在Receiver.emit(events.js:189:13)   (节点:12938)UnhandledPromiseRejectionWarning:未处理的承诺被拒绝。引发此错误的原因可能是抛出了一个没有catch块的异步函数,或者是拒绝了一个.catch()无法处理的承诺。 (拒绝ID:1)   (节点:12938)[DEP0018] DeprecationWarning:已弃用未处理的承诺拒绝。将来,未处理的承诺拒绝将以非零退出代码终止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/Connection.js:215:10)       在Connection._onClose(/home/ec2-user/hd/node_modules/puppeteer/lib/Connection.js:138:15)       在WebSocketTransport._ws.addEventListener.event(/home/ec2-user/hd/node_modules/puppeteer/lib/WebSocketTransport.js:45:22)       在WebSocket.onClose(/home/ec2-user/hd/node_modules/ws/lib/event-target.js:124:16)       在WebSocket.emit(events.js:189:13)       在WebSocket.emitClose(/home/ec2-user/hd/node_modules/ws/lib/websocket.js:191:10)       在Socket.socketOnClose(/home/ec2-user/hd/node_modules/ws/lib/websocket.js:850:15)       在Socket.emit(events.js:189:13)     -异步-       在帧。 (/home/ec2-user/hd/node_modules/puppeteer/lib/helper.js:110:27)       在Page.goto(/home/ec2-user/hd/node_modules/puppeteer/lib/Page.js:656:49)       在Page。 (/home/ec2-user/hd/node_modules/puppeteer/lib/helper.js:111:23)       在func(/home/ec2-user/hd/scrape_bk.js:13:13)       在process._tickCallback(内部/进程/next_tick.js:68:7)   (节点:12938)UnhandledPromiseRejectionWarning:未处理的承诺被拒绝。引发此错误的原因可能是抛出了一个没有catch块的异步函数,或者是拒绝了一个.catch()无法处理的承诺。 (拒绝ID:2)

我不知道如何确定问题的根源,因为它突然出现了,并且没有对机器或代码进行任何更改,并且在我的本地机器上运行正常。

1 个答案:

答案 0 :(得分:1)

似乎puppeteer能够启动浏览器,但随后随机崩溃。这不应该在普通计算机上发生,而可能是由于资源限制而发生。

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

  • 内存使用量
  • CPU使用率
  • 磁盘使用情况

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