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

K_T*_*ech 6 python selenium-webdriver aws-lambda

我正在尝试在 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)
Run Code Online (Sandbox Code Playgroud)
  1. 我尝试使用 chromedriver.exe 文件创建 lambda 层

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

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

Utk*_*Can 15

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

1-我尝试将硒添加为此处描述的层https://www.youtube.com/watch?v=jWqbYiHudt8。我最终的结果是,我成功添加了selenium,但部署包超过250mb(在此处描述lambda配额:如何增加AWS lambda部署包的最大大小(RequestEntityTooLargeException)?)所以它不起作用。

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

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

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