Недетерминированное поведение ChromeDriver и Chrome с pageLoadStrategy none - PullRequest
0 голосов
/ 03 октября 2018

У меня есть веб-сканер, использующий Selenium и Chromium, работающий на Ubuntu Linux 16.04.Все новые запросы на сканирование поступают в Apache / WSGI, который создает новый поток Python для каждого запроса и запускает процесс Chromium с pyvirtualdisplay и Xvfb для загрузки веб-сайта, входа в систему, создания снимков экрана и т. Д.

Я использую Chromium сфлаги: disable-extensions, disable-gpu, headless, no-sandbox

caps = DesiredCapabilities().CHROME
caps["pageLoadStrategy"] = "none"

Затем у меня есть функция, которая проверяет каждую секунду, чтобы увидеть, загружена ли страница еще (как некоторые страницы нене загружается полностью в течение разумного времени, поэтому я пытаюсь подождать, пока они по крайней мере станут интерактивными, прежде чем продолжить):

driver.execute_script("var state = document.readyState; return state;")

Странная вещь в том, что теперь, когда я пытаюсь загрузить страницу, она сразу говоритон находится в состоянии «завершено» (и остается в течение следующих 15 секунд).Но когда я действительно пытаюсь найти элемент, он не может быть найден - поэтому я не думаю, что он действительно загружен.Обычно он говорит, что это «загрузка», а затем «интерактивный» и т. Д.

Я попытался перезапустить Apache, но, похоже, ничего не исправило.Что может быть не так?

Я вижу в своем списке процессов, что Chromium и Xvfb действительно работают, когда приходит новый запрос:

7429 ?        S      0:00 Xvfb -br -nolisten tcp -screen 0 1024x768x24 :2165
7430 ?        Sl     0:00 /var/www/html/flaskapp/chromedriver --port=39146
7438 ?        Sl     0:00 /usr/lib/chromium-browser/chromium-browser --disable-background-networking --disable-client-side-phishing
7440 ?        S      0:00 /usr/lib/chromium-browser/chromium-browser --type=zygote --no-sandbox --enable-logging --headless --log-l
7457 ?        Sl     0:00 /usr/lib/chromium-browser/chromium-browser --type=gpu-process --no-sandbox --enable-logging --headless --
7468 ?        S      0:00 /usr/sbin/apache2 -k start
7469 ?        Sl     0:00 /usr/lib/chromium-browser/chromium-browser --type=renderer --no-sandbox --enable-automation --enable-logg

1 Ответ

0 голосов
/ 04 октября 2018

Вам необходимо настроить ChromeDriver с необходимыми параметрами.Несколько моментов:

...