Selenium (необнаруженный драйвер Chrome) не может подключиться к контексту браузера в докереPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Selenium (необнаруженный драйвер Chrome) не может подключиться к контексту браузера в докере

Сообщение Anonymous »

Я создал скрипт для очистки веб-страниц, который использует Selenium с undetected_chromedriver для очистки веб-страниц. Запуск сценария на моем локальном компьютере работает нормально, но у него возникают проблемы с подключением при запуске в докере/контейнере.
За исключением того, что проблемы с подключением возникают не к самому веб-сайту, а к локальному хосту в случайном порядке. порт, который, как я предполагаю, предназначен для связи с драйвером Chrome.
Error: HTTPConnectionPool(host='localhost', port=59175): Max retries exceeded with url: /session/2447d84a58ac677fa2a41dc4280bd779/url (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused'))
Если эти исключения не выдаются, скрипт просто зависает во время вызовов chromedriver (но не при инициализации экземпляра chrome)
В контейнере (используя top) я вижу, что Chrome использует мало ресурсов и процесс «chrome_crashpad». Возможно ли, что Chrome просто дает сбой/зависает?
Использование python3.12 локально, python3.10 в контейнере.
Я видел эта тема касается той же проблемы, но я не вызываю driver.close или driver.quit где-либо в своем коде.
Это не проблема с веб-сайтом сама по себе, потому что та же ошибка возникает при попытке запросить другие URL-адреса.
Это не проблема сети, потому что когда я запускаю контейнер, я могу нормально выполнить wget на сайте .
Я не думаю, что это проблема undetected_chromedriver, потому что при переключении на стандартный селеновый хромированный драйвер все равно возникают проблемы.
Соответствующий код:
import json
from time import sleep
import undetected_chromedriver as uc
from selenium import webdriver
from selenium.webdriver.common.by import By

class WebDriver:
def __init__(self) -> None:
options = webdriver.ChromeOptions()
options.add_argument("--incognito")
options.add_argument("--no-sandbox")
options.add_argument('--disable-gpu')
options.add_argument("--window-size=1280,1696")
options.add_argument("--disable-dev-shm-usage")
options.add_argument("--blink-settings=imagesEnabled=false")

self.driver = uc.Chrome(options=options)

def get(self, url: str, retries: int = 3):
for i in range(retries):
try:
self.driver.get(url)
return True
except Exception as e:
print(f"[WebDriver] ({i + 1}/{retries}) Error: {e}")
sleep(3)
print(f"[WebDriver] Failed to get {url}")
return False

def get_page_source(self):
return self.driver.page_source

def get_page_json(self):
json_text = self.driver.find_element(By.TAG_NAME, "pre").text
return json.loads(json_text)

from webdriver import WebDriver
from queue import Queue
from threading import Lock

class WebDriverPool:
def __init__(self, pool_size=4):
self.pool = Queue()
self.lock = Lock()

for i in range(pool_size):
self.pool.put(self.create_driver())

def get_driver(self) -> WebDriver:
with self.lock:
return self.pool.get()

def return_driver(self, webdriver):
with self.lock:
self.pool.put(webdriver)

def create_driver(self) -> WebDriver:
return WebDriver()

print("TESTING1")
driver0 = WebDriver()
driver0.get("https://example.com")
print(driver0.get_page_source())

print("TESTING2")
driver1 = self.wd_pool.get_driver()
driver2 = self.wd_pool.get_driver()
driver1.get("https://example.com")
driver2.get("https://example.com")
print(driver1.get_page_source())
print(driver2.get_page_source())
self.wd_pool.return_driver(driver1)
self.wd_pool.return_driver(driver2)

Файл Docker
FROM selenium/standalone-chrome

USER root
RUN apt-get update && apt-get install -y \
python3 \
python3-pip \
xvfb

ENV DISPLAY=:99

WORKDIR /scrape
COPY . ./
RUN pip3 install -r requirements.txt

RUN chmod +x run.sh
ENTRYPOINT ["./run.sh"]

Точка входа в Docker:
#!/bin/bash
echo "[ENTRYPOINT] Starting Xvfb $DISPLAY"
Xvfb $DISPLAY -screen 0 1280x1024x24 & \
echo "[ENTRYPOINT] main.py $1 $2"
exec python3 main.py $1 $2



Подробнее здесь: https://stackoverflow.com/questions/785 ... xt-in-dock
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Проблема с Chrome 130/Необнаруженный Chromedriver/Python/Selenium
    Anonymous » » в форуме Python
    0 Ответы
    48 Просмотры
    Последнее сообщение Anonymous
  • Необнаруженный хромированный драйвер [дубликат]
    Anonymous » » в форуме Python
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Необнаруженный Chromedriver не использует последнюю версию Chromedriver для моего браузера
    Anonymous » » в форуме Python
    0 Ответы
    40 Просмотры
    Последнее сообщение Anonymous
  • Необнаруженный Chromedriver не использует последнюю версию Chromedriver для моего браузера
    Anonymous » » в форуме Python
    0 Ответы
    31 Просмотры
    Последнее сообщение Anonymous
  • Удаленный просмотр браузера Chrome, работающего в докере
    Anonymous » » в форуме Python
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous

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