AWS Lambda 上的 Google-chrome

2024-05-04

是否可以在带有容器的 AWS Lambda 中使用 puppeteer 运行 Google-chrome 而不是 Chromium?

当我在浏览器中创建新页面时脚本卡住:

const page = await browser.newPage();

来自 AWS lambda 的日志:

mkdir: cannot create directory ‘/.local’: Read-only file system
touch: cannot touch ‘/.local/share/applications/mimeapps.list’: No such file or directory
/usr/bin/google-chrome-stable: line 45: /dev/fd/62: No such file or directory
/usr/bin/google-chrome-stable: line 46: /dev/fd/62: No such file or directory
[0213/000419.523205:ERROR:bus.cc(397)] Failed to connect to the bus: Failed to connect to socket /run/dbus/system_bus_socket: No such file or directory
[0213/000419.528197:ERROR:bus.cc(397)] Failed to connect to the bus: Failed to connect to socket /run/dbus/system_bus_socket: No such file or directory
[0213/000419.648505:WARNING:audio_manager_linux.cc(60)] Falling back to ALSA for audio output. PulseAudio is not available or could not be initialized.
DevTools listening on ws://127.0.0.1:46195/devtools/browser/1d348770-1c99-48a5-934c-fae5254fc766
[0213/000419.769218:WARNING:bluez_dbus_manager.cc(248)] Floss manager not present, cannot set Floss enable/disable.
prctl(PR_SET_NO_NEW_PRIVS) failed
prctl(PR_SET_NO_NEW_PRIVS) failed

我不使用木偶师,但这并不重要。

FROM public.ecr.aws/lambda/provided:al2
RUN yum install unzip atk at-spi2-atk gtk3 cups-libs pango libdrm \
    libXcomposite libXcursor libXdamage libXext libXtst libXt \
    libXrandr libXScrnSaver alsa-lib \
    xorg-x11-server-Xvfb wget shadow-utils  -y

COPY install-chrome.sh /tmp/

RUN /usr/bin/bash /tmp/install-chrome.sh

ENV DBUS_SESSION_BUS_ADDRESS="/dev/null"

我并不是100% DBUS_SESSION_BUS_ADDRESS 是必要的。我也不是 100% 确定是否有必要显式命名所有这些包,我从十几个不同的地方偷了所有东西,可能 chrome rpm 会引入它需要的东西,但我从未使用过任何基于 RHEL 的系统,所以我完全一无所知。我知道这有效。欢迎优化。

这是脚本:

#!/usr/bin/bash

# Download and install chrome
wget https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm
# Without -y it doesn't run because it needs to add dependencies.
yum install -y google-chrome-stable_current_x86_64.rpm
rm google-chrome-stable_current_x86_64.rpm

CHROMEVERSION=`wget -qO- https://chromedriver.storage.googleapis.com/LATEST_RELEASE`
wget --no-verbose -O /tmp/chromedriver_linux64.zip https://chromedriver.storage.googleapis.com/$CHROMEVERSION/chromedriver_linux64.zip
unzip /tmp/chromedriver_linux64.zip -d /opt
rm /tmp/chromedriver_linux64.zip
mv /opt/chromedriver /opt/chromedriver-$CHROMEVERSION
chmod 755 /opt/chromedriver-$CHROMEVERSION
ln -fs /opt/chromedriver-$CHROMEVERSION /usr/local/bin/chromedriver

# Create a user. /usr/sbin is not on $PATH.
/usr/sbin/groupadd --system chrome
/usr/sbin/useradd --system --create-home --gid chrome --groups audio,video chrome

您可以通过在本地启动它来验证它是否正常工作docker run --mount type=tmpfs,destination=/tmp --read-only这很好地模拟了AWS Lambda的环境。然后你需要运行su chrome -c 'xvfb-run chromedriver --allowed-ips=127.0.0.1'。我在用https://github.com/instaclick/php-webdriver/ https://github.com/instaclick/php-webdriver/这是一个适用于 W3C 和 Selenium 2 Webdriver 的非常瘦的 PHP 客户端。我用这个来测试:

<?php

namespace WebDriver;

require 'vendor/autoload.php';

@mkdir('/tmp/chrome');
chmod('/tmp/chrome', 0777);
$wd_host = 'http://localhost:9515';
$web_driver = new WebDriver($wd_host);
$session = $web_driver->session('chrome', [['goog:chromeOptions' => ['args' => [
  '--no-sandbox',
  '--user-data-dir=/tmp/chrome'
]]]]);
$session->open('https://google.com');
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AWS Lambda 上的 Google-chrome 的相关文章

随机推荐

  • 使用 Android Volley 发出 HTTPS 请求

    我正在尝试使用以下代码发出 https 请求 RequestQueue queue Volley newRequestQueue getApplicationContext request new Request
  • Laravel Eloquent 在 with() 函数中使用别名

    再会 laravel 中使用 with 函数时是否可以使用别名 举个例子 posts Post where condition gt with user as friend gt get 简短的回答是否定的 但您可以定义与要使用的别名的关系
  • 有聚合物模板的印章活动吗?

    我试图在每次标记其内容时将输入元素聚焦在聚合物模板内 问题是在模板加载之前我无法选择输入元素 目前 我只是使用 setTimeout 在模板加载后 100 毫秒集中输入 但我想知道是否有更优雅的解决方案 此外 自动对焦属性不起作用 因为模板
  • java regex,仅当不在引号或括号中时才以逗号分隔

    我想通过正则表达式进行java split 当字符串不在单引号或括号中时 我想在每个逗号上分割字符串 例子 Hello my friend how are you should give hello my friend how are yo
  • 搜索引擎可以读取 CSS 吗?

    我用标签来表示句子的重要性 然而 它破坏了页面风格的一致性 所以我用CSS把它改回来 结果是 对于访问者来说是相同的 但对于搜索引擎 SE 来说 显然是不同的 这正是SE们所烦恼的 所以我的问题是SE们能否读取CSS 并用它进一步判断整个页
  • 生成具有给定分布的随机数

    看看这个问题 快速选择随机数的概率 https stackoverflow com questions 26092977 swift probability of random number being selected 最上面的答案建议使
  • 如何防止 HTML 文本孤儿?

    我经常在图像周围包裹文字 有时文字包裹起来很笨拙 如下所示 在 HTML 中 图像向左浮动 文本如下 p img src images image p p This is my David Copperfield em I was born
  • 如果覆盖率低于一定百分比,则单元测试失败

    我制作了一个执行的 makefilego test cover 是否有可能失败make unit tests如果覆盖范围低于 X 则命令 我该怎么做呢 您可以使用TestMain在你的测试中做到这一点 TestMain 可以充当测试的自定义
  • 我可以将 JPA 2.0 与 Google App Engine 一起使用吗?

    我可以将 JPA 2 0 例如 EclipseLink 与 Google App Engine 一起使用吗 Google AppEngine 的 DataNucleus 插件支持 JDO 和 JPA API 来访问 Google AppEn
  • 将属性类型作为参数传递

    有没有办法将属性作为参数传递给函数 class Car let doors Int 4 let price Int 1000 有没有办法将 Car 属性作为类型传递给函数 我想实现以下目标 func f1 car Car property
  • 无法将 QMap 传递到 SLOT

    所以 这有效 h public slots void addMenu QString passedName signals void clicked const QString text cpp signalMapper new QSign
  • Spring JPA自定义查询与WHERE条件中的参数组合?

    如何在 Spring Data 中编写至少使用三个参数之一的 JPA 查询 我有这三个参数 Id PK Name Surname 客户端必须至少提供这三个参数之一 我想通过这些非空参数找到用户 是否可以为我的存储库创建此类自定义查询 或者我
  • SWIG 的 Python ctypes 回调函数

    我有一个 SWIG C 函数 它需要一个函数指针 WNDPROC 并且想给它一个由 ctypes WINFUNCTYPE 包装的 Python 函数 在我看来 这应该是兼容的 但 SWIG 的类型检查会引发异常 因为它不知道 ctypes
  • detached 和 allocateCurrentContext 是什么意思?

    当我将作业添加到队列中时 DispatchWorkItemFlags 为我们提供了几个选项可供选择 public func sync
  • 为所有图像添加前缀(递归)

    我有一个包含 5000 多张图像的文件夹 全部带有 JPG 扩展名 我想要做的就是递归地向所有图像添加 thumb 前缀 我发现了一个类似的问题 重命名文件和目录 添加前缀 https stackoverflow com questions
  • 地址栏中的 https 锁和公司名称

    我注意到在查看贝宝的网站时 他们的公司名称位于 Chrome 中的锁定图标旁边 这是因为他们创作了 ssl 证书 还是您认为他们是如何实现这一目标的 这是我一直很好奇的事情 但在搜索过程中我很难找到任何答案 您需要一个称为 扩展验证 EV
  • PowerPoint 命令,例如在 Office javascript API 上插入幻灯片或应用等效主题

    我正在开发一个 PowerPoint 加载项 将来它将在 Office Store 中发布 但它是VSTO项目 C 和winforms 无法发布 根据我的搜索 它一定是 Office Web Add in 项目 清单 xml 和网页 我正在
  • 如何让 NHibernate 缓存获取的子集合?

    我有一个相当简单的条件查询来获取子集合 如下所示 var order Session CreateCriteria
  • 自动化脚本:如果 FieldA = 1,则将 FieldB 设置为“one”

    我试图将这个问题分解为可管理的部分 空间查询 https stackoverflow com questions 56587515 maximo spatial query 我认为第一步是创建一个自动化脚本这样做是这样的 从字段中获取值 用
  • AWS Lambda 上的 Google-chrome

    是否可以在带有容器的 AWS Lambda 中使用 puppeteer 运行 Google chrome 而不是 Chromium 当我在浏览器中创建新页面时脚本卡住 const page await browser newPage 来自