flo*_*300 5 selenium amazon-web-services selenium-webdriver docker aws-lambda
我想在AWS中运行Selenium,特别是在Lambda 函数中。Lambda 函数应使用存储在Amazon ECR上的Docker Image。Selenium 代码是简单的 Python 演示代码。
当我在本地从映像运行 Docker 容器时,一切正常并且 Selenium 成功,但是当我将映像部署到 AWS 并配置 lambda 函数来使用它时,它会失败并引发以下错误:
selenium.common.exceptions.WebDriverException: Message: unknown error: unable to discover open window in chrome
Run Code Online (Sandbox Code Playgroud)
我已经尝试了所有可能的 chrome 驱动程序参数,甚至尝试了此问题的解决方案: Aws Lambda Ruby Crawler selenium chrome driver: 'unknown error: unavailable to discovery open window in chrome'
似乎什么都不起作用。错误不会消失。
我使用过不同的浏览器,包括 google-chrome-stable、firefox、headless-chromium 等不同版本,在 aws 中都失败,但在本地 docker 容器中工作。
我还尝试部署具有所需依赖项的 Debian 映像而不是aws-lambda-python,但它也会引发相同的错误。
目前我使用的是 Google Chrome 版本 91、适用于 linux64 的 chromedriver 91.0.4472.101 和 selenium 3.141.0。Dockerfile 看起来像这样:
FROM amazon/aws-lambda-python:3.8
RUN curl https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm > google-chrome-stable_current_x86_64.rpm
RUN yum install ./google-chrome-stable_current_x86_64.rpm -y
RUN pip install selenium
COPY . ./
CMD [ "main.py" ]
ENTRYPOINT [ "python" ]
Run Code Online (Sandbox Code Playgroud)
主要.py:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
if __name__ == '__main__':
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--headless")
chrome_options.add_argument("--disable-gpu")
chrome_options.add_argument("--disable-application-cache")
chrome_options.add_argument("--disable-infobars")
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument('--disable-dev-shm-usage')
chrome_options.add_argument("--hide-scrollbars")
chrome_options.add_argument("--enable-logging")
chrome_options.add_argument("--single-process")
chrome_options.add_argument("--ignore-certificate-errors")
chrome_options.add_argument("--homedir=/tmp")
chrome_options.add_argument("--log-level=0")
driver = webdriver.Chrome(executable_path="/var/task/chromedriver", options=chrome_options)
driver.get("http://www.python.org")
assert "Python" in driver.title
elem = driver.find_element_by_name("q")
elem.clear()
elem.send_keys("pycon")
elem.send_keys(Keys.RETURN)
assert "No results found." not in driver.page_source
driver.close()
print("done")
Run Code Online (Sandbox Code Playgroud)
编辑 1:我尝试使用 selenium/standalone-chrome 和 selenium/standalone-firefox 图像,如 Moshe Slavin 建议的那样。在 Chrome 上,我现在使用相同的选项(页面而不是窗口)收到不同的错误:
selenium.common.exceptions.WebDriverException: Message: unknown error: unable to discover open pages
Run Code Online (Sandbox Code Playgroud)
在 Firefox 上我收到此错误。使用selenium镜像之前出现完全相同的错误:
selenium.common.exceptions.WebDriverException: Message: Process unexpectedly closed with status signal
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
966 次 |
| 最近记录: |