Docker - 如何使用 chromedriver 设置 chrome 或使用 Geckodriver 设置 Firefox,并使用 Arsenic 库构建 python 应用程序

Docker - 如何使用 chromedriver 设置 chrome 或使用 Geckodriver 设置 Firefox,并使用 Arsenic 库构建 python 应用程序

使用 Python3 应用程序用于异步网页抓取的库。它需要带驱动程序的浏览器。在 Windows Pycharm 上测试,一切正常,因为我的 Windows 上安装了 Chrome。现在我必须使用 Amazon Ubuntu 20.04 服务器构建我的应用程序docker-compose,我尝试了很多不同的方法,但仍然无法使其工作...这是我的docker和部分python代码:

我的Dockerfile:

FROM python:latest

WORKDIR /src
COPY requirements.txt /src
RUN pip install -r requirements.txt
COPY . /src

我的docker-compose:

version: '3.1'

services:

  tgbot:
    container_name: bot
    build:
      context: .
    command: python app.py
    restart: always
    environment:
      WEBAPP_PORT: 3001
    env_file:
      - ".env"
    # bot start after load db
    ports:
      - 8443:3001
    networks:
      - botnet
    volumes:
      - ./:/src

networks:
      botnet:
        driver: bridge

requirements.txt 包括砷~=20.9

在我的 Windows PC 上运行的含有 Arsenic 的 Python 代码(我安装了 Chrome,应用程序文件夹中有 +chromedriver 文件):

from arsenic import get_session, keys, browsers, services
async def arsenic_scraper(url):
    service = services.Chromedriver() # here is driver, if empty - it should find from PATH, or path to driver
    browser = browsers.Chrome()
    async with get_session(service, browser) as session:
        await session.get(url)

FileNotFoundError:[Errno 2] 没有这样的文件或目录:“chromedriver”

答案1

你尚未在 docker 镜像中安装 chrome 和 chromedriver,因此你的应用找不到它们。由于官方的 python docker 镜像使用 Debian,你可以尝试使用以下命令在 docker 镜像中安装 chrome

RUN apt-get install -y google-chrome-stable

并下载兼容版本的 chromedriver,可能使用wget。查看 chromedriver 文档以了解应使用哪个版本:https://chromedriver.chromium.org/

然后,确保您的应用正在查找下载 chromedriver 的目录。

相关内容