亚马逊云科技 Lambda 运行selenium

有些定时任务需要使用自动化测试的工具,如果使用亚马逊云科技 Lambda来实现这个功能的话,那么就需要图形框架,而我们知道lambda其实是一个虚拟机,而且按照系统级别依赖比较困难。所以这里选择使用容器的形式进行发布。

在dockerfile中先安装chrome和对应的驱动,然后再安装系统级别的依赖。
Dockerfile

FROM public.ecr.aws/lambda/python@sha256:d8a8324834a079dbdfc6551831325113512a147bf70003622412565f216e36e0 as build
RUN yum install -y unzip && \curl -Lo "/tmp/chromedriver.zip" "https://chromedriver.storage.googleapis.com/114.0.5735.90/chromedriver_linux64.zip" && \curl -Lo "/tmp/chrome-linux.zip" "https://www.googleapis.com/download/storage/v1/b/chromium-browser-snapshots/o/Linux_x64%2F1135561%2Fchrome-linux.zip?alt=media" && \unzip /tmp/chromedriver.zip -d /opt/ && \unzip /tmp/chrome-linux.zip -d /opt/FROM public.ecr.aws/lambda/python@sha256:d8a8324834a079dbdfc6551831325113512a147bf70003622412565f216e36e0
RUN yum install atk cups-libs gtk3 libXcomposite alsa-lib \libXcursor libXdamage libXext libXi libXrandr libXScrnSaver \libXtst pango at-spi2-atk libXt xorg-x11-server-Xvfb \xorg-x11-xauth dbus-glib dbus-glib-devel -y
RUN pip install selenium==4.14.0
COPY --from=build /opt/chrome-linux /opt/chrome
COPY --from=build /opt/chromedriver /opt/
COPY main.py ./
CMD [ "main.handler" ]
from selenium import webdriver
from tempfile import mkdtemp
from selenium.webdriver.common.by import Bydef handler(event=None, context=None):options = webdriver.ChromeOptions()service = webdriver.ChromeService("/opt/chromedriver")options.binary_location = '/opt/chrome/chrome'options.add_argument('--headless')options.add_argument('--no-sandbox')options.add_argument("--disable-gpu")options.add_argument("--window-size=1280x1696")options.add_argument("--single-process")options.add_argument("--disable-dev-shm-usage")options.add_argument("--disable-dev-tools")options.add_argument("--no-zygote")options.add_argument(f"--user-data-dir={mkdtemp()}")options.add_argument(f"--data-path={mkdtemp()}")options.add_argument(f"--disk-cache-dir={mkdtemp()}")options.add_argument("--remote-debugging-port=9222")chrome = webdriver.Chrome(options=options, service=service)chrome.get("https://example.com/")return chrome.find_element(by=By.XPATH, value="//html").text

这个是项目地址
https://github.com/umihico/docker-selenium-lambda

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/742850.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【原创】[新增]ARCGIS之土地报备Txt、征地Xls格式批量导出Por旗舰版

一、软件简介 2024年新增旗舰版软件,本软件全新界面开发,保留原有软件功能及一些使用习惯,并集成了现已有的所有定制格式的支持,并增加自定义格式的导出;做到1N2(即为1种通用版本N种定制格式导出txt、Xls&a…

机器学习模型—分类回归树(CART)

机器学习模型—分类回归树(CART) **CART(分类和回归树)**是决策树算法的一种变体。它可以处理分类和回归任务。Scikit-Learn使用分类和回归树 (CART) 算法来训练 决策树。CART 最初由 Leo Breiman、Jerome Friedman、Richard Olshen 和 Charles Stone 于 1984 年制作。 CAR…

c++的STL(4)-- list容器

list容器概述 list的容器的实现是使用双向链表的形式的数据结构实现的。(也有的编译器使用双向循环链表) 链表是一种数据结构,这种结构与数组的结构不同,链表的每个节点都存放有特定个数的指针(双向链表:两个(一个指向前面的元素,另一个指向…

百度现在应该怎么去做搜索SEO优化?(川圣SEO)蜘蛛池

baidu搜索:如何联系八爪鱼SEO? baidu搜索:如何联系八爪鱼SEO? baidu搜索:如何联系八爪鱼SEO? 百度搜索引擎优化(SEO)是一种通过优化网站,提升网页在百度搜索结果中的排…

使用Golong轻松实现JWT身份验证

使用Golong轻松实现JWT身份验证 JSON Web Tokens (JWT)是一种流行的安全方法,用于在两个方之间表示声明。在Web应用程序领域,它们通常用作从客户端向服务器传输身份信息(声明)的方式。本教程将引导您逐步实现Go应用程序中的JWT身份…

ffmpeg 从avio_read 到 file_read

############################################# author: hjjdebug date: 2024年 03月 13日 星期三 15:39:30 CST description: ffmpeg 从avio_read 到 file_read ############################################# int nRet avio_open(&pReadCtx, "200M.ts"),…

开源生态与软件供应链研讨会

✦ 日程安排 开源生态与软件供应链研讨会 时间: 2024年3月12日(星期二)13:30 – 17:00 地点: 复旦大学江湾校区二号交叉学科楼E1021 联系人: 陈碧欢(bhchenfudan.edu.cn) 点击文末“阅读原文”或扫描下方二维码进入报名通…

ROS 语音交互(二)nlp

目录 背景: 一、模型选择 二、操作流程 三、核心代码展示 背景: 成功设置自己的知识库,语音交互问答会优先选择自己的知识库的答案进行回答,减少了耗时 一、模型选择 商汤 商量日日新 二、操作流程 文档中心 | 日日新开放…

Node.js的事件驱动模型(非阻塞I/O)

Node.js的事件驱动模型是它能高效处理并发的关键。这个模型允许Node.js在单个线程上运行,同时通过非阻塞I/O操作来处理成千上万的并发连接。下面是对Node.js事件驱动模型的详细解释: 事件循环(Event Loop) 事件循环是Node.js事件…

ChatGLM3 源码解析(五)

PrefixEncoder # 根据前缀 ID 获取前缀嵌入 # 前缀嵌入将连接到分头之后的 K 和 V 上 class PrefixEncoder(torch.nn.Module):"""The torch.nn model to encode the prefixInput shape: (batch-size, prefix-length)Output shape: (batch-size, prefix-length,…

2024 前端javaScript+ES6

JavaScript 基础 1、基本数据类型: 1.1 基本数据类型: Number(数值):表示数字,包括整数和浮点数。例如:5、3.14。 String(字符串):表示文本数据&#xff…

视觉图像处理和FPGA实现第三次作业--实现一个加法器模块

一、adder模块 module adder(ina, inb, outa); input [5:0] ina ; input [5:0] inb ; output [6:0] outa ;assign outa ina inb; endmodule二、add模块 module add(a,b,c,d,e); input [5:0] a ; input [5:0] b ; input [5:…

阿里云国际修改域名绑定的DDoS高防服务器

本文九河云介绍当您的业务需要绑定多个DDoS高防实例,或者已有的DDoS高防实例已过期需要更换时,如何修改域名接入的配置,才能在业务不中断的前提下平滑迁移。 需绑定多个DDoS高防实例的场景 当网站业务有如下业务需求时,可以为域…

PTA L2-020 功夫传人

一门武功能否传承久远并被发扬光大,是要看缘分的。一般来说,师傅传授给徒弟的武功总要打个折扣,于是越往后传,弟子们的功夫就越弱…… 直到某一支的某一代突然出现一个天分特别高的弟子(或者是吃到了灵丹、挖到了特别的…

netty服务器监听和接收数据

1.pom依赖 <dependency><groupId>io.netty</groupId><artifactId>netty-all</artifactId><!-- 根据需要选择版本 --><version>4.1.86.Final</version> </dependency>2.配置属性 application.properties #启动端口 ser…

从零开始,一步步构建服务网格istio

一、环境情况 环境&#xff1a;Ubuntu20.04 机器数量&#xff1a;单机1台 IP&#xff1a;10.9.2.83 二、准备知识 为什么使用 Istio&#xff1f; Istio提供了一种更高级别的服务网格解决方案&#xff0c;它可以简化和加强 Kubernetes 集群中的服务间通信、流量管理、安全…

Git操作指南:子模块、用户名修改和Subtree

引言 在软件开发中&#xff0c;版本控制是一个至关重要的环节。Git 作为目前最流行的版本控制工具之一&#xff0c;提供了丰富的功能和灵活的操作方式。本文将介绍一些常用的 Git 操作&#xff0c;包括管理子模块、修改用户名、使用 Git Subtree 合并项目以及其他一些常见操作…

基于R语言APSIM模型应用

随着数字农业和智慧农业的发展&#xff0c;基于过程的农业生产系统模型在模拟作物对气候变化的响应与适应、农田管理优化、作物品种和株型筛选、农田固碳和温室气体排放等领域扮演着越来越重要的作用。APSIM (Agricultural Production Systems sIMulator)模型是世界知名的作物生…

鸿蒙开发之MPChart图表开发

一、简介 随着移动应用的不断发展,数据可视化成为提高用户体验和数据交流的重要手段之一,因此需要经常使用图表,如折线图、柱形图等。OpenHarmony提供了一个强大而灵活的图表库是实现这一目标的关键。 在 ohpm 中心仓(https://ohpm.openharmony.cn/)中,汇聚了众多开发者…

ubuntu如何添加快捷方式到收藏夹、桌面

一、背景 有时候单独下载的软件包需要在特定路径里启动&#xff0c;这样使用起来非常不方便。因此需要在桌面和收藏夹里创建启动快捷方式。 二、具体步骤 这里以下载的zotero软件&#xff08;一款用于文献管理的软件&#xff09;为例。官网地址: Zotero | Your personal res…