Selenium не работает внутри докер-контейнераPython

Программы на Python
Ответить
Anonymous
 Selenium не работает внутри докер-контейнера

Сообщение Anonymous »

Я написал скрипт Python, который использует селен и работает так, как я хотел, но когда я пытаюсь работать с ним в контейнере докеров, он выдает следующую ошибку:
Фрагмент кода, который дает мне исключение

Код: Выделить всё

import logging
import signal
import smtplib
import time
import base64
import pytesseract
import sys
import json
import os
from seleniumbase import SB
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from PIL import Image, ImageOps, ImageFilter
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import chromedriver_autoinstaller

chromedriver_autoinstaller.install()  # Check if the current version of chromedriver exists

def main_task(config):
global sb_instance
try:
with SB(uc=True, headless2=True, undetectable=True, use_auto_ext=False) as sb:
# Main logic but can't reach here
except Exception as e:
logging.error("An error occurred during the main task: %s", str(e))
return -1

Код: Выделить всё

HTTPConnectionPool(host='localhost', port=xxxxxx) Read timed out.  (read timeout=120)
Файл Docker

Код: Выделить всё

FROM --platform=linux/amd64 python:3.9-slim

RUN apt-get update && apt-get install -y \
wget \
gnupg \
tesseract-ocr \
libglib2.0-0 \
libnss3 \
libgconf-2-4 \
libxss1 \
fonts-liberation \
libappindicator3-1 \
xdg-utils \
unzip \
net-tools \
iputils-ping \
dbus \
&& rm -rf /var/lib/apt/lists/*

RUN wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | gpg --dearmor > /usr/share/keyrings/google-chrome-keyring.gpg && \
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/google-chrome-keyring.gpg] https://dl.google.com/linux/chrome/deb/ stable main" > /etc/apt/sources.list.d/google-chrome.list && \
apt-get update && apt-get install -y google-chrome-stable

ENV DISPLAY=:99
ENV PATH="/usr/local/lib/python3.9/site-packages/seleniumbase/drivers/:${PATH}"

CMD ["python", "sel.py"]

Команда Docker

Код: Выделить всё

    docker run -d -p 8080:8080 -it --name aperol-spritz --cpus="8" --shm-size=4g -v $PWD:/app:rw -w /app $BASE_IMAGE bash -c "pip install -r /app/requirements.txt && python /app/sel.py"

Проверка Docker

Код: Выделить всё

{
"Id": "314969c0f7695f87e7af8a22bad419d60b7221ad36783b27ae8b4a1d60922904",
"Created": "2024-12-06T04:29:34.960458338Z",
"Path": "bash",
"Args": [
"-c",
"pip install -r /app/requirements.txt &&  python /app/sel.py"
],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 25079,
"ExitCode": 0,
"Error": "",
"StartedAt": "2024-12-06T04:29:35.039250047Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
"Image": "sha256:410d4b429be3a8044d27d231f92089700c1da0cf124cfcb41e42c8f153043fde",
"ResolvConfPath": "/var/lib/docker/containers/314969c0f7695f87e7af8a22bad419d60b7221ad36783b27ae8b4a1d60922904/resolv.conf",
"HostnamePath": "/var/lib/docker/containers/314969c0f7695f87e7af8a22bad419d60b7221ad36783b27ae8b4a1d60922904/hostname",
"HostsPath": "/var/lib/docker/containers/314969c0f7695f87e7af8a22bad419d60b7221ad36783b27ae8b4a1d60922904/hosts",
"LogPath": "/var/lib/docker/containers/314969c0f7695f87e7af8a22bad419d60b7221ad36783b27ae8b4a1d60922904/314969c0f7695f87e7af8a22bad419d60b7221ad36783b27ae8b4a1d60922904-json.log",
"Name": "/aperol-spritz",
"RestartCount": 0,
"Driver": "overlay2",
"Platform": "linux",
"MountLabel": "",
"ProcessLabel": "",
"AppArmorProfile": "",
"ExecIDs": [
"7407cea0c7ac7d2295fcf51f99ee9992834b141c56ad74e01c45d2ee0295642d"
],
"HostConfig": {
"Binds": [
"/Users/frozen/Documents/ClionProjects/sel:/app:rw"
],
"ContainerIDFile": "",
"LogConfig": {
"Type": "json-file",
"Config": {}
},
"NetworkMode": "bridge",
"PortBindings": {
"8080/tcp": [
{
"HostIp": "",
"HostPort": "8080"
}
]
},
"RestartPolicy": {
"Name": "no",
"MaximumRetryCount": 0
},
"AutoRemove": false,
"VolumeDriver": "",
"VolumesFrom": null,
"ConsoleSize": [
41,
187
],
"CapAdd": null,
"CapDrop": null,
"CgroupnsMode": "private",
"Dns": [],
"DnsOptions": [],
"DnsSearch": [],
"ExtraHosts": null,
"GroupAdd": null,
"IpcMode": "private",
"Cgroup": "",
"Links": null,
"OomScoreAdj": 0,
"PidMode": "",
"Privileged": false,
"PublishAllPorts": false,
"ReadonlyRootfs": false,
"SecurityOpt": null,
"UTSMode": "",
"UsernsMode": "",
"ShmSize": 4294967296,
"Runtime": "runc",
"Isolation": "",
"CpuShares": 0,
"Memory": 0,
"NanoCpus": 8000000000,
"CgroupParent": "",
"BlkioWeight": 0,
"BlkioWeightDevice": [],
"BlkioDeviceReadBps": [],
"BlkioDeviceWriteBps": [],
"BlkioDeviceReadIOps": [],
"BlkioDeviceWriteIOps": [],
"CpuPeriod": 0,
"CpuQuota": 0,
"CpuRealtimePeriod": 0,
"CpuRealtimeRuntime": 0,
"CpusetCpus": "",
"CpusetMems": "",
"Devices": [],
"DeviceCgroupRules": null,
"DeviceRequests": null,
"MemoryReservation": 0,
"MemorySwap": 0,
"MemorySwappiness":  null,
"OomKillDisable": null,
"PidsLimit": null,
"Ulimits": [],
"CpuCount": 0,
"CpuPercent": 0,
"IOMaximumIOps": 0,
"IOMaximumBandwidth": 0,
"MaskedPaths": [
"/proc/asound",
"/proc/acpi",
"/proc/kcore",
"/proc/keys",
"/proc/latency_stats",
"/proc/timer_list",
"/proc/timer_stats",
"/proc/sched_debug",
"/proc/scsi",
"/sys/firmware",
"/sys/devices/virtual/powercap"
],
"ReadonlyPaths": [
"/proc/bus",
"/proc/fs",
"/proc/irq",
"/proc/sys",
"/proc/sysrq-trigger"
]
},
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/6b6ebea6bd46f0ba9dd7c7a81b427188e7dc380a2d0aa06ae8807873999639e5-init/diff:/var/lib/docker/overlay2/mlje1ari6gak9pna09zfrih25/diff:/var/lib/docker/overlay2/vk4w9hg69j4s3nusauk7ns4ld/diff:/var/lib/docker/overlay2/f737d0bea1171662c6997bfc3df7cf033162f21c937babffc4261523b328f191/diff:/var/lib/docker/overlay2/14eff14f8b6ee79e6ce8828fc642ef447784d607749d784a0dd9fe44ffa6cbc7/diff:/var/lib/docker/overlay2/b2fed1798c5a3965b6b7de7e907474a9fa6c1f207b8ea1212e2b629cdf2f1699/diff:/var/lib/docker/overlay2/5d4f24be554957235b3ec5272c7d0d3e7f1648a8780dfb1ada1f8ddf6a3c8048/diff",
"MergedDir": "/var/lib/docker/overlay2/6b6ebea6bd46f0ba9dd7c7a81b427188e7dc380a2d0aa06ae8807873999639e5/merged",
"UpperDir": "/var/lib/docker/overlay2/6b6ebea6bd46f0ba9dd7c7a81b427188e7dc380a2d0aa06ae8807873999639e5/diff",
"WorkDir": "/var/lib/docker/overlay2/6b6ebea6bd46f0ba9dd7c7a81b427188e7dc380a2d0aa06ae8807873999639e5/work"
},
"Name": "overlay2"
},
"Mounts": [
{
"Type": "bind",
"Source": "/Users/frozen/Documents/ClionProjects/sel",
"Destination": "/app",
"Mode": "rw",
"RW": true,
"Propagation": "rprivate"
}
],
"Config": {
"Hostname": "314969c0f769",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": {
"8080/tcp": {}
},
"Tty": true,
"OpenStdin": true,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/lib/python3.9/site-packages/seleniumbase/drivers/:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"LANG=C.UTF-8",
"GPG_KEY=E3FF2839C048B25C084DEBE9B26995E310250568",
"PYTHON_VERSION=3.9.21",
"PYTHON_SHA256=3126f59592c9b0d798584755f2bf7b081fa1ca35ce7a6fea980108d752a05bb1",
"DISPLAY=:99"
],
"Cmd": [
"bash",
"-c",
"pip install -r /app/requirements.txt &&  python /app/sel.py"
],
"Image": "sel-checker",
"Volumes": null,
"WorkingDir": "/app",
"Entrypoint": null,
"OnBuild": null,
"Labels": {}
},
"NetworkSettings": {
"Bridge": "",
"SandboxID": "02fdbb1788b199a15a9aa1f539396287ccf8677fb63496172e463240cfdf6b40",
"SandboxKey": "/var/run/docker/netns/02fdbb1788b1",
"Ports": {
"8080/tcp": [
{
"HostIp": "0.0.0.0",
"HostPort": "8080"
}
]
},
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "925a9ebbc452e3ddf7430e796c8172e1895ae4ad6858b60cdbfefc40e27da0db",
"Gateway": "172.17.0.1",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"MacAddress": "02:42:ac:11:00:02",
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"MacAddress": "02:42:ac:11:00:02",
"DriverOpts": null,
"NetworkID": "584122c832b4242992e1ce649fccfee9bef27b81bc1f0d8b4e2a233729494033",
"EndpointID": "925a9ebbc452e3ddf7430e796c8172e1895ae4ad6858b60cdbfefc40e27da0db",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"DNSNames": null
}
}
}
}
Что я пробовал:
  • -флаг сетевого хоста для моего контейнера
    < li>Настроена память и процессор контейнера.
  • Пересборка/перезапуск образа докера и контейнера.


Подробнее здесь: https://stackoverflow.com/questions/792 ... -container
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»