使用 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 的目录。