Я пишу программу веб-скрапинга на Python 3.12, используя Selenium и многопроцессорную обработку. Я настраиваю сетку селена с помощью докера и использую ее для параллельного запуска нескольких экземпляров селена. Однако любые запросы, сделанные к сетке, не выполняются и истекают через 5 минут. Даже если я упрощу свою функцию, чтобы просто получить исходный код страницы, она все равно не выполнится. У меня есть «запросчик», встроенный в класс. Вот базовая функция, которую я пытаюсь запустить (после того, как я удалил все вычисления, которые необходимо выполнить для HTML).
Код: Выделить всё
def get_discounts(self) -> list:
discounts = []
driveroptions = webdriver.ChromeOptions()
driveroptions.add_argument('--headless')
driver = webdriver.Remote(command_executor='http://127.0.0.1:4444', options=driveroptions, keep_alive=False)
driver.get(self.current_url)
html = driver.page_source()
driver.quit()
return discounts
также для справки, вот мой файл для создания докеров:
Код: Выделить всё
version: "3"
services:
chrome:
image: selenium/node-chrome:4.21.0-20240517
shm_size: 2gb
depends_on:
- selenium-hub
environment:
- SE_EVENT_BUS_HOST=selenium-hub
- SE_EVENT_BUS_PUBLISH_PORT=4442
- SE_EVENT_BUS_SUBSCRIBE_PORT=4443
- SE_NODE_MAX_SESSIONS=8
selenium-hub:
image: selenium/hub:4.21.0-20240517
container_name: selenium-hub
ports:
- "4442:4442"
- "4443:4443"
- "4444:4444"
Я пробовал запустить это без головы и даже ограничить количество SE_NODE_MAX_SESSIONS до нескольких (3 или 4), но это все равно не работает. Я запускаю все это на ноутбуке Dell с 16 ГБ оперативной памяти, и запуск виртуальной машины для докера съедает часть этого. Как только я действительно запускаю сетку, она приближается к максимальному использованию моей оперативной памяти (доходит до 14,8 ГБ). До сих пор понятия не имею, почему это не сработает.
Кроме того, запуск этой функции вне сетки с использованием только селена работает нормально.
Подробнее здесь:
https://stackoverflow.com/questions/785 ... processing