#python #selenium #selenium-webdriver #testing #web-scraping
Вопрос:
когда веб-драйвер (Chrome) циклически просматривает страницы, периодически появляются такие ошибки. работает на vps под управлением Debian:
HTTPConnectionPool(хост=’127.0.0.1′, порт=42815): Превышено максимальное количество повторных попыток с url: /session/db4b551e4339171e038c3048a73f6036/window (Вызвано ошибкой NewConnectionError(‘Объект HttpConnection в 0x7fbe18da04a8>: Не удалось установить новое соединение: [Ошибка 111] Отказано в подключении’))
и
Сообщение: такого элемента нет: Не удается найти элемент: {«метод»:»xpath»,»селектор»:»//ввод[@name=’имя’]»} (Информация о сеансе: безголовый chrome=92.0.4515.131)
и под macOS:
Сообщение: неизвестная ошибка: Chrome не удалось запустить: вышел ненормально.
(неизвестная ошибка: файл DevToolsActivePort не существует) (Процесс запущен из расположения chrome /Приложений/Google Chrome.приложение/Содержимое/macOS/Google Chrome больше не работает, поэтому ChromeDriver предполагает, что Chrome разбился.)
вот мои настройки:
параметры.add_argument(‘—без песочницы’) параметры.add_argument(‘—безголовый’) параметры.add_argument(‘—отключить-мигание-функции=AutomationControlled’) параметры.add_experimental_option(«Исключающие переключатели», [«включить-автоматизация»]) параметры.add_experimental_option («Использование автоматического расширения», Ложь) параметры.add_argument («—отключить-уведомления») параметры.add_argument (‘—отключить-расширения’) параметры.add_argument («—отключить-плагины-обнаружение») параметры.add_argument (‘—отключить-dev-sh-использование’) параметры.add_argument(f’размер окна={разрешение}’)
что не так и как это исправить?
Ответ №1:
Вы не можете работать без головы в macOS, потому что вам нужна система X-window, но она будет работать в Linux. Вы получите дополнительную информацию об этой ошибке, если используете pyvirtualdisplay (т. е. попытаетесь установить Xvfb для запуска без головы на macOS). Я запускаю безголовый в Ubuntu (другой Debian):
from pyvirtualdisplay import Display
display = Display(visible=0) # visible=0 equiv to headless
display.start()
options.add_argument('--no-sandbox')
options.add_argument('--headless')
options.add_argument('--disable-blink-features=AutomationControlled')
options.add_experimental_option("excludeSwitches", ['enable-automation'])
options.add_experimental_option('useAutomationExtension', False)
options.add_argument('--disable-notifications')
options.add_argument('--disable-extensions')
options.add_argument("--disable-plugins-discovery")
options.add_argument('--disable-dev-sh-usage')
options.add_argument(f'window-size={resol}')
webdriver.Chrome(options=options,executable_path="./chromedriver")
Комментарии:
1. после подключения дисплея он вообще перестал работать: ошибка запуска <EasyProcess cmd_param=[‘Xvfb’, ‘- справка’] cmd=[‘Xvfb’, ‘- справка’] ошибка операционной системы=[Ошибка 2] Такого файла или каталога нет: ‘Xvfb’ return_code=Нет stdout=»Нет» stderr=»Нет» timeout_happened=Ложь>
2. Вы пытаетесь запустить его в macOS? он не будет работать в macOS, если вы используете visible=0 (или —безголовый)
3. У вас установлен
Xvfb
пакет? Я запускаюdpkg -l | grep xvfb
, и система возвращает:ii xvfb 2:1.20.11-1ubuntu1~20.04.2 amd64 Virtual Framebuffer 'fake' X server
, поэтому я ее установил. Вы можете установить его, запустивsudo apt install xvfb
, и вы можете узнать об этом перед установкой с помощьюapt show xvfb
4. вот решение в моем случае # установка пакета apt-get install-y xvfb # настройка переменной отображения экспорт ДИСПЛЕЯ=:0 # запуск сервера Xvfb в фоновом режиме (один раз) /usr/bin/Xvfb :0 -экран 0 1024x768x24 amp; # подождите немного, чтобы он запустился (один раз) спящий режим 5 # добавьте префикс «xvfb-запуск» в «узел » или» python » скрипт xvfb-запуск узла myscript.js # или xvfb-запуск python myscript.py