ChromeDriver работает медленнее, чем GeckoDriver при запросе первой страницы через Selenium и Python - PullRequest
0 голосов
/ 04 декабря 2018

У меня установлена ​​последняя версия драйверов (chromedriver = 2.44.609551), пакет с селеном (3.141.0) и (хром без головы = 70.0.3538.110).(на окнах)

Я открываю несколько окон с помощью браузера.Используя Firefox, мой скрипт всегда быстр.Но в chrome, после переключения в окно (с уже загруженной страницей), когда я пытаюсь получить что-либо из браузера (например, driver.page_source или любой find_element), я получаю задержку в 4 секунды.

Я делаю что-то не так?

[driver.execute_script('window.open(arguments[0]);', url) for url in urls]
for window in driver.window_handles[1:]:
    driver.switch_to.window(window)
    driver.page_source                                #it takes 4s here
    driver.find_elements_by_class_name('class_name')  #regular speed here (fast)
    break

Если я переключу driver.page_source с driver.find_elements_by_class_name('class_name'), первый будет всегда медленным.

1 Ответ

0 голосов
/ 04 декабря 2018

Как вы упомянули в своем вопросе GeckoDriver / Firefox комбинация быстрее, чем ChromeDriver / Chrome на данный момент стоитОтметим, что различные браузеры отображают HTML DOM по-другому.

Подробное обсуждение можно найти в Chrome & Firefox для Windows против Linux (селен)

Более того, было много дискуссий о непредсказуемых CPU и потреблении памяти при Chrome Headless сессиях.

Согласно обсуждению Сборка без головы для минимального использования процессора + mem Использование ЦП + памяти может быть оптимизировано с помощью:

  • Использование либо собственного прокси, либо C ++ProtocolHandlers вы можете вернуть заглушки 1x1 пикселей изображения или даже полностью заблокировать их.
  • Chromium Team работает над добавлением программного управления над созданием кадров.В настоящее время безголовый хром все еще пытается рендерить на 60 кадров в секунду , что довольно расточительно.Многие страницы нуждаются в нескольких кадрах (возможно, 10-20 кадров в секунду ) для правильного рендеринга (из-за использования requestAnimationFrame и animation triggers), но мы ожидаем, что здесь будет много сбережений ЦП.
  • MemoryInfra должно помочь вам определить, какой компонент является наибольшим потребителем памяти в вашей установке.
  • Использование может быть:

    $ headless_shell --remote-debugging-port=9222 --trace-startup=*,disabled-by-default-memory-infra http://www.chromium.org
    
  • Хром всегда будет использовать столько ресурсов, сколько ему доступно.Если вы хотите эффективно ограничить его использование, вы должны изучить использование cgroups

Подробное обсуждение можно найти в Ограничение использования безголового ЦП и памяти Chrome

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...