Приложение Python3, которое использует библиотеку Arsenic для асинхронного удаления веб-страниц. Требуется браузер с драйвером. Протестировано на Windows pycharm, все отлично работает, потому что у меня установлен Chrome. Теперь мне нужно создать свое приложение на сервере Amazon Ubuntu 20.04, используя docker-compose , я пробовал много разных способов, но все еще не могу заставить его работать ... Вот мой докер и часть кода Python:
My Dockerfile:
FROM python:latest
WORKDIR /src
COPY requirements.txt /src
RUN pip install -r requirements.txt
COPY . /src
My 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 include arsenic ~ = 20.9
Код Python с мышьяком, который работает на моем ПК с Windows (i установлен хром, + файл 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'
Вы не установили chrome и chromedriver в свой образ докера, поэтому ваше приложение не может их найти. Поскольку официальный образ докера Python использует Debian, вы можете попробовать установить хром в образ докера с помощью
RUN apt-get install -y google-chrome-stable
и загрузить совместимую версию chromedriver, вероятно, с wget
. Проверьте документацию chromedriver, какую версию следует использовать: https://chromedriver.chromium.org/
Затем убедитесь, что ваше приложение ищет в каталоге, где бы вы ни загружали chromedriver.