我正在运行 python 3.12。用于测试的 chrome 和 chrome 驱动程序都是相同的版本,即 123.0.6312.58 - 这已经过检查和验证
它在我的 Mac 上运行得非常好。但是,当我运行 dockerized 应用程序时,我收到错误
024-03-20 19:53:58 03/20/2024 06:53:58PM - ERROR - helper_functions.py::helper_functions::__init__:36 - Chrome driver exception: Message: session not created: Chrome failed to start: crashed.
2024-03-20 19:53:58 (disconnected: unable to connect to renderer)
2024-03-20 19:53:58 (The process started from chrome location /usr/local/bin/chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.)
2024-03-20 19:53:58 Stacktrace:
2024-03-20 19:53:58 #0 0x555555cc9993 <unknown>
2024-03-20 19:53:58 #1 0x5555559c4136 <unknown>
2024-03-20 19:53:58 #2 0x5555559f8448 <unknown>
2024-03-20 19:53:58 #3 0x5555559f443d <unknown>
2024-03-20 19:53:58 #4 0x555555a3d239 <unknown>
我的docker配置看起来像这样
FROM --platform=linux/amd64 ubuntu:20.04
ENV PATH /usr/local/bin:$PATH
RUN set -eux; \
apt-get update && \
apt-get install -y --no-install-recommends \
ca-certificates \
tzdata \
wget \
unzip \
;
RUN apt-get install -y git
RUN apt-get install -y python3.12
RUN apt-get install -y python3-pip
RUN apt-get update && apt-get install -y libgbm1 gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 \
libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libnss3 lsb-release xdg-utils wget ca-certificates
RUN set -eux; \
wget -O chrome-linux64.zip https://storage.googleapis.com/chrome-for-testing-public/123.0.6312.58/linux64/chrome-linux64.zip && \
unzip chrome-linux64.zip && \
mv chrome-linux64/* /usr/local/bin/ && \
chmod +x /usr/local/bin/chrome && \
rm -rf chrome-linux64.zip chrome-linux64
RUN set -eux; \
wget -O chromedriver-linux64.zip https://storage.googleapis.com/chrome-for-testing-public/123.0.6312.58/linux64/chromedriver-linux64.zip && \
unzip chromedriver-linux64.zip && \
mv chromedriver-linux64/chromedriver /usr/local/bin/chromedriver && \
chmod +x /usr/local/bin/chromedriver && \
rm -rf chromedriver-linux64.zip chromedriver-linux64
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
RUN mkdir /home/test
WORKDIR /home/test
COPY . .
ENTRYPOINT ["behave"]
CMD ["-v", "features/scenarios", "-D", "browser=chrome", "-f", "html", "-o", "test-results/report.html"]
环境
让 Chrome 在 Docker 中运行是很棘手的。我尝试像您一样运行容器,但遇到了类似的错误。在创建 Selenium 驱动程序时传递这些额外的
Chrome CLI 参数对我有用:
Dockerfile
尝试以类似的方式更新 Behave 使用的
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument("start-maximized")
options.add_argument("enable-automation")
options.add_argument("--headless")
options.add_argument("--no-sandbox")
options.add_argument("--disable-dev-shm-usage")
options.add_argument("--disable-browser-side-navigation")
options.add_argument("--disable-gpu")
options.add_argument("--window-size=1920,1080")
driver = webdriver.Chrome(options)
创建代码。希望这有帮助。
这些参数的作用以及其他可能的相关问题在这些参考文献中进行了描述:指向每个参数问题的链接:
PPS。从您的
selenium.webdriver.Chrome
来看,您仍在容器中使用Python 3.8(而不是3.12)。谨防这可能会产生的其他问题:)
尝试使用Dockerfile
查看您的容器,以验证
docker exec -it <mycontainer> bash
、pip
(和 python3
)都解析为默认系统 python 环境,即 behave
基础映像的 python 3.8。您尝试安装3.12。注意构建日志(ubuntu:20.04
有帮助)。当您执行
docker build --progress=plain
时,它会显示:apt-get install -y python3.12
因此没有安装
Note, selecting 'postgresql-plpython3-12' for regex 'python3.12'
(即使安装了,也不会在系统级别激活3.12环境,因此仅调用
python3.12
不足以使用它)。您可以尝试选择另一个基本映像,或者例如,为了简单起见,通过 pyenv设置您的 python 环境。