Anonymous
Selenium не работает внутри докер-контейнера
Сообщение
Anonymous » 06 дек 2024, 08:36
Я написал скрипт 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
1733463373
Anonymous
Я написал скрипт Python, который использует селен и работает так, как я хотел, но когда я пытаюсь работать с ним в контейнере докеров, он выдает следующую ошибку: Фрагмент кода, который дает мне исключение [code]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 [/code] [code]HTTPConnectionPool(host='localhost', port=xxxxxx) Read timed out. (read timeout=120) [/code] Файл Docker [code]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"] [/code] Команда Docker [code] 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" [/code] Проверка Docker [code]{ "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 } } } } [/code] Что я пробовал: [list] [*]-флаг сетевого хоста для моего контейнера < li>Настроена память и процессор контейнера. [*]Пересборка/перезапуск образа докера и контейнера. [/list] Подробнее здесь: [url]https://stackoverflow.com/questions/79256935/selenium-does-not-work-inside-the-docker-container[/url]