当前位置: 首页 > article >正文

亚马逊云科技 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 By


def 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.kler.cn/a/271617.html

相关文章:

  • volatile
  • openssl 生成证书 windows导入证书
  • Flink中的时间和窗口
  • vscode+WSL2(ubuntu22.04)+pytorch+conda+cuda+cudnn安装系列
  • 零基础Vue入门4——Vue3基础核心
  • OpenEuler学习笔记(十七):OpenEuler搭建Redis高可用生产环境
  • 基于Springboot+Redis+mysql实现的闲置二手交易网站管理系统
  • layui table列表重载后保持进度条位置不变
  • npm下载慢换国内镜像地址
  • C++ 虚函数表
  • STM32 Simulink 自动代码生成电机控制——霍尔有感六步方波仿真到开发板运行
  • 项目需求:实现 PDF 添加水印,这五种方案送上!
  • 关于分布式微服务数据源加密配置以及取巧方案(含自定义加密配置)
  • ChatGPT编程—实现小工具软件(批量替换文本、批量处理图像文件)
  • linux最佳入门(笔记)
  • 【TB作品】MSP430,单片机,Proteus仿真,单片机通信,串口通信
  • 计算机设计大赛 题目:基于机器视觉的图像矫正 (以车牌识别为例) - 图像畸变校正
  • 基于MATLAB的OFDM系统实现
  • 卫生间设计黄金法则!贴心小技巧,让你的卫生间瞬间变宽敞!福州中宅装饰,福州装修
  • Session,Cookie,Token详解,初步认识web程序的安全性
  • HTTP和HTTPS的区别,HTTPS加密原理是?
  • 智能合约概述
  • 游戏服务端配置“热更”及“秒启动”终极方案(golang/ygluu/卢益贵)
  • Maya自定义工具架
  • 服务器硬件基础知识
  • Unix环境高级编程-学习-05-TCP/IP协议与套接字