如何将 selenium 和 chromedriver 添加到 AWS Lambda 函数?

How do I add selenium & chromedriver to an AWS Lambda function?

我正在尝试在 aws lambda 上托管网络抓取功能,并且 运行 遇到了 selenium 的网络驱动程序错误。有人可以告诉我您如何添加 chromedriver.exe 文件以及如何让路径在 AWS Lambda 函数中工作。这是我的函数中与硒有关的部分,

from selenium import webdriver from selenium.webdriver.common.by import By from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.ui import Select from selenium.webdriver.chrome.service import Service import pandas as pd import mysql.connector from sqlalchemy import create_engine

url = '``https://covid19criticalcare.com/pharmacies/``'

driver = webdriver.Chrome(service=Service(ChromeDriverManager().install())) driver.maximize_window() driver.get(url) wait = WebDriverWait(driver, 5)

  1. 我尝试使用 chromedriver.exe 文件创建一个 lambda 层

  2. 我遵循了本指南 (https://dev.to/awscommunity-asean/creating-an-api-that-runs-selenium-via-aws-lambda-3ck3) 但我无法添加无头铬,因为文件大小超出了我的功能限制(我的 pandas 和 numpy依赖层占据了我的大部分 space)

  3. 我尝试了 driver = webdriver.Chrome(使用路径变量)并尝试了不同的路径,但不确定路径的开头是什么,因为它在 lambda 函数上。

过去几天我一直在努力向 aws lambda 添加硒。我有一个网络 scraping 函数(使用 selenium 和 google api),它从网站提取数据并将输出写入 google 电子表格。让我解释一下我一步一步做了什么,以及我是如何最终成功的,这样你就不必像我一样处理它了:

1- 我试图将硒添加为此处描述的层 https://www.youtube.com/watch?v=jWqbYiHudt8. What i ended up was, i was succesfull with adding selenium but deployment package is over 250mb (describe lambda quotaas here: ),但它不起作用。

2- 为了克服部署包的大小,添加为容器映像是一个不错的选择(10 GB 的部署包大小限制)。这是添加为容器图像 https://cloudbytes.dev/snippets/run-selenium-in-aws-lambda-for-ui-testing#using-the-github-repository-directly 的一个很好的解释。我试过了,但由于 missing/wrong 网络驱动程序(shell 脚本似乎有误),我无法按照描述进行部署

3- 最后,我完全能够将我的 selenium 函数发布为 docker 图像,如此处所述 https://github.com/umihico/docker-selenium-lambda

有很多关于哪个版本适用于什么的讨论。关于 selenium 最重要​​的问题是,部署到 aws lambda 时必须注意包和驱动程序版本。