当前位置: 首页 > 知识库问答 >
问题:

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

范建华
2023-03-14

我正在使用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个答案

裴劲
2023-03-14

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

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

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

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

 类似资料:
  • 代码: 知道是什么导致了这个问题吗。可能与VPC或安全组有关?并给出了思考和建议。谢了。

  • 问题内容: 我已经进行了永久搜索,无法为我的问题提供确切的答案。就是这样。我有一个看起来像这样的JSON文件(我去了jsonlint进行验证,它说的很好): 我使用jQuery解析并使用此函数放置在html页面上: 它完美地工作!现在是我的问题,JSON文件将不在本地托管,并且实际上将托管在单独的域中。所以我修改了我的代码如下(经过阅读),希望它能正常工作: 通过添加“回调”行,我停止出现“无法加

  • IIS可能会搞砸它?我倾向于认为IIS对于和)有不同的进程,因此,我在app.post上引用的套接字与我在()中加入用户是不同的。 在Azure/IIS中使用socket.io房间时有什么提示吗?谢了!

  • 我已经很久没有使用Heroku了,所以我有点生疏了。我创建了一个运行Ratchet IOServer的小型PHP应用程序。它监听端口5000。如果我运行并使用连接,一切似乎都能正常工作。我尝试了几种让PHP进程运行并接受连接的方法。 我的Procfile如下所示; 正在运行 然后,当我将服务器部署到Heroku时,它就不工作了。当我尝试telnet到端口上的框时,我得到 我刚刚读了关于Heroku

  • 我正在使用PHP*TCPDF/FPDI类动态生成PDF。。 虽然本地发展(WAMP/localhost)... 现在我已经把东西上传到了直播服务器上。。我在同一个文件上只得到一张空白页。。使用相同的目录结构。。 但是,在实时环境中进行测试时。。它不起作用? 只是一个空白页,没有错误...等等。 这是我目前使用的代码。。 (我试图在构造函数和超文本标记语言输出中添加UTF-8编码...?? 代码:

  • 我的Flask应用程序AWS Postgres连接在本地工作,但在Heroku上不工作。该应用程序在Heroku上工作,但它不向AWS Postgres获取/发送数据。 Heroku日志指出了一个endpoint在双引号中的问题。我不确定如何解决这个问题,因为我使用的是使用Psycopg2的SQLAlchemy。我没有直接使用psycopg2。 我的AWS安全组设置为所有入站IP。 更改AWS以接