【发布时间】:2021-12-30 13:03:56
【问题描述】:
过去一周我一直在处理这个问题,但我无法理解它,所以我决定寻求帮助。我正在尝试使用 Chromium 86 构建在 AWS Lambda 中运行 Selenium。我不断收到的错误消息如下:
{
"errorMessage": "Message: unknown error: Chrome failed to start: exited abnormally.\n (chrome not reachable)\n (The process started from chrome location /opt/bin/chromium is no longer running, so ChromeDriver is assuming that Chrome has crashed.)\n",
"errorType": "WebDriverException"
}
这是我的构建:
Selenium 3.14
Chromium 86.0.4240.0 (https://github.com/vittorio-nardone/selenium-chromium-lambda/blob/master/chromium.zip) which is forked from (https://github.com/puppeteer/puppeteer)
Chromedriver 86.0.4240.22.0 (https://chromedriver.storage.googleapis.com/index.html?path=86.0.4240.22/)
这是我的代码:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)
def lambda_handler(event, context):
chrome_options = webdriver.ChromeOptions()
# chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--headless')
chrome_options.add_argument("start-maximized")
chrome_options.add_argument("disable-infobars")
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--disable-dev-shm-usage')
chrome_options.add_argument('--window-size=1024x768')
chrome_options.add_argument('--user-data-dir=/tmp/user-data')
chrome_options.add_argument('--profile-directory=/tmp')
chrome_options.add_argument('--hide-scrollbars')
chrome_options.add_argument('--enable-logging')
chrome_options.add_argument('--log-level=0')
chrome_options.add_argument('--v=99')
# chrome_options.add_argument('--single-process')
chrome_options.add_argument('--data-path=/tmp/data-path')
chrome_options.add_argument('--ignore-certificate-errors')
chrome_options.add_argument('--homedir=/tmp')
chrome_options.add_argument('--disk-cache-dir=/tmp/cache-dir')
chrome_options.add_argument('user-agent=Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.3163.100 Safari/537.36')
chrome_options.add_argument('--remote-debugging-port=9222')
chrome_options.binary_location = "/opt/bin/chromium"
driver = webdriver.Chrome(executable_path="/opt/bin/chromedriver",options=chrome_options)
driver.get('https://www.google.com/')
到目前为止我尝试过的事情:
- 尝试了各种运行时 Python 3.6、3.7、3.8 均未成功
- 尝试使用和不使用 Lambda 层。按文件夹结构尝试使用 Lambda 时相对简单:
.
├── bin
│ ├── chromedriver (binary)
│ └── chromium (binary)
└── python
├── selenium
├── selenium-3.14.0.dist-info
├── urllib3
└── urllib3-1.26.7.dist-info
- 浏览了 SO 中的大多数 cmets,其中讨论了类似问题的示例:
Chrome Driver and Chromium Binaries are not working on aws lambda
- 尝试了我传递给 chromedriver 的几乎所有参数组合,例如 w/ & w/o --disable-dev-shm-usagem、w/ & w/o --disable-gpu 等。李>
我唯一注意到的是,如果我使用某些参数,有时它会抛出 selenium.common.exceptions.WebDriverException: Message: unknown error: unable to discover open window in chrome 错误而不是 Chrome failed to start: exited abnormally 错误。作为最后一个想法,我正在考虑编译我自己的 Chromium 86 版本。有没有人设法在 AWS Lambda 上运行 build 86 或更高版本?
【问题讨论】:
-
Chrome.exe所在的位置是什么
-
chrome 二进制文件位于附加到 Lambda 函数的单独层中,然后位于 /opt/bin/chromium 下,或者如果我不使用任何层,则位于函数本身下。
标签: python selenium selenium-chromedriver chromium