提问人:drose56 提问时间:10/2/2023 最后编辑:drose56 更新时间:10/2/2023 访问量:246
在 Docker 中运行时,在 Flask 应用程序中使用 Selenium 需要 --no-sandbox
Using Selenium inside Flask App requires --no-sandbox when running in Docker
问:
我有一个 Flask 应用程序,它使用 Selenium Chrome WebDriver 登录网站并从中抓取一些敏感数据并将其安全地存储在加密文件中。一切都在本地完美运行。我正在尝试将其放入 Docker 容器中,以便它可以在另一台机器上轻松运行。我对Docker有点陌生,遇到了问题。我可以通过添加 webdriver 选项 --headless 和 --no-sandbox 来让它最终在 Docker 中工作,但我已经看过所有关于 --no-sandbox 如何危险的文章。但是,我从中抓取的单个网站是值得信赖的,我不确定 --no-sandbox 是否会构成任何威胁,除非您访问的网站可能是恶意的。不过,我确实要非常小心,因为我抓取的数据非常敏感。我已经阅读并尝试了类似文章中的答案(即使用选项“remote-debugging-port=9222”或“--crash-dumps-dir=/tmp”),但没有任何效果。我的问题是 1.对于我的用例(即访问一个受信任的网站,但处理敏感数据),不使用 --no-sandbox 有多重要,以及 2.我怎样才能绕过它?!?!?我的 Dockerfile 当前如下所示。在这一点上,我不知道还能尝试什么,任何帮助将不胜感激!
# Use the official Python image as the base image
FROM python:3.10.6
# Install necessary packages, including ChromeDriver
RUN apt-get update && apt-get install -y \
chromium \
&& rm -rf /var/lib/apt/lists/* \
&& apt-get autoremove -y
# Set the PATH to include ChromeDriver location
ENV PATH="/usr/lib/chromium-browser:${PATH}"
RUN mkdir /app
COPY . /app
COPY pyproject.toml /app
WORKDIR /app
ENV PYTHONPATH=${PYTHONPATH}:${PWD}
RUN pip3 install poetry
RUN poetry config virtualenvs.create false
RUN poetry install --no-dev
RUN pip3 install flask
# Expose the port the application runs on
EXPOSE 8000
# Define the command to run your application
CMD ["poetry", "run", "python", "run.py", "dashboard", "start", "--host", "0.0.0.0", "--port", "8000"]
使用以下选项运行时:
options.add_argument('--headless') # Run in headless mode
options.add_argument('--disable-gpu') # Disable GPU for headless mode
options.add_argument("--disable-dev-shm-usage")
options.add_argument('start-maximized')
options.add_experimental_option('excludeSwitches',
['enable-automation'])
options.add_experimental_option('useAutomationExtension', False)
我收到错误:
回溯(最近一次调用最后一次): ... selenium.common.exceptions.SessionNotCreatedException:消息:会话未创建:Chrome 无法启动:正常退出。 (未创建会话:DevToolsActivePort 文件不存在) (从 chrome 位置 /root/.cache/selenium/chrome/linux64/117.0.5938.92/chrome 启动的进程不再运行,因此 ChromeDriver 假设 Chrome 已崩溃。
但是当我添加 --no-sandbox 选项时,一切正常。
答: 暂无答案
评论