我正在使用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)
我不知道如何确定问题的根源,因为它突然出现了,并且没有对机器或代码进行任何更改,并且在我的本地机器上运行正常。
答案 0 :(得分:1)
似乎puppeteer能够启动浏览器,但随后随机崩溃。这不应该在普通计算机上发生,而可能是由于资源限制而发生。
您应该检查系统是否正常运行。特别是,您可能要检查:
内存太少或CPU能力不足可能会导致随机崩溃以及硬盘空间不足。