Selenium Завершение приема сообщения от средства визуализации

После того, как Chrome выпустил свою последнюю версию вчера (64.0.3282), теперь я получаю эту ошибку довольно спорадически:

Заданное сообщение от средства визуализации: 600.000

У меня работает около 2000 селеновых тестов в контейнере докера, и я вижу этот сбой в размере около 1 на 100. По мере того, как я могу сказать, никаких воспроизводимых шагов нет - тесты, которые терпят неудачу, различны с каждой итерацией, Я обновился до новейшего Chromedriver (2.35), но это не показало никакого эффекта. Ранее я использовал Selenium 2.41, но обновился до последней версии (3.8.1), надеясь, что это может помочь... это не так. Я совершенно не понимаю, почему это может произойти. Кто-нибудь еще заметил это? Возможно, это ошибка с новейшей версией Chrome?

Заранее благодарим за любую помощь, которую вы можете предоставить.

Ответ 1

Проверьте JS Runtime

Сначала убедитесь, что вы не выполняете /eval() много JavaScript. Это может вызвать тайм-аут.

Проверить совместимость версий

Сначала проверьте свои версии:

  • Селен
  • JDK
  • ChromeDriver
  • Chrome

    все совместимы. Удачи в этом, потому что нет единого места, которое это документирует, а ПО Selen недостаточно умно, чтобы быстро проверить (должно):

Проверьте инициализацию драйвера

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

последние сообщения о каждой проблеме, когда-либо сообщавшейся о переполнении стека, по состоянию на: сентябрь 2018 г.

        // ChromeDriver is just AWFUL because every version or two it breaks unless you pass cryptic arguments
        //AGRESSIVE: options.setPageLoadStrategy(PageLoadStrategy.NONE); // https://www.skptricks.com/2018/08/timed-out-receiving-message-from-renderer-selenium.html
        options.addArguments("start-maximized"); // /questions/240872/cannot-get-automation-extension-from-timeout-timed-out-receiving-message-from-renderer/1250043#1250043
        options.addArguments("enable-automation"); // /questions/240872/cannot-get-automation-extension-from-timeout-timed-out-receiving-message-from-renderer/1250048#1250048
        options.addArguments("--headless"); // only if you are ACTUALLY running headless
        options.addArguments("--no-sandbox"); ///questions/7368906/orgopenqaseleniumwebdriverexception-unknown-error-devtoolsactiveport-file-doesnt-exist-while-trying-to-initiate-chrome-browser/14388002#14388002
        options.addArguments("--disable-infobars"); ///questions/240872/cannot-get-automation-extension-from-timeout-timed-out-receiving-message-from-renderer/1250048#1250048
        options.addArguments("--disable-dev-shm-usage"); ///questions/7368906/orgopenqaseleniumwebdriverexception-unknown-error-devtoolsactiveport-file-doesnt-exist-while-trying-to-initiate-chrome-browser/14388002#14388002
        options.addArguments("--disable-browser-side-navigation"); ///questions/1692732/selenium-timed-out-receiving-message-from-renderer/4902966#4902966
        options.addArguments("--disable-gpu"); ///questions/16279301/how-to-solve-selenium-chromedriver-timed-out-receiving-message-from-renderer-exception
        driver = new ChromeDriver(options);
Источники

:

Ответ 2

Похоже, возникла проблема с новейшей версией Chrome. Без установки Chromeoption disable-gpu рендеринг будет время от времени. Обходной путь до тех пор, пока Google не исправляет это (если они вообще его исправляют) заключается в том, чтобы добавить атрибут --disable-gpu в ChromeOptions.

EDIT: Это уменьшает частоту появления, но оно все еще происходит.

Ответ 3

У меня была эта проблема сегодня, с Chrome: Версия 73.0.3683.86 (Официальная сборка) (64-разрядная версия). Для меня это было сбой в тайм-аутах на сборках Jenkins, и локально все было в порядке, посмотрите следующие параметры Chrome, которые помогли мне преодолеть эту проблему (ChromeDriver на данный момент: версия - 73.0.3683.68):

ChromeOptions options = new ChromeOptions();
options.addArguments("enable-automation");
options.addArguments("--headless");
options.addArguments("--window-size=1920,1080");
options.addArguments("--no-sandbox");
options.addArguments("--disable-extensions");
options.addArguments("--dns-prefetch-disable");
options.addArguments("--disable-gpu");
options.setPageLoadStrategy(PageLoadStrategy.NORMAL);

Ответ 4

Я видел проблемы с Chrome 72 до 73 и получал сообщение об ошибке:

Timed out receiving message from renderer: 600.000

Я получал сообщение об ошибке только тогда, когда выполнял тесты на Jenkins (тесты выполнялись на моей локальной машине разработки), что показалось мне довольно странным.

Я попробовал Firefox, но проблем не было, так что это сузило его до Chrome. После просмотра трекера проблем Chromium я обнаружил проблему 946441: Chromedriver: истекло время получения сообщения об ошибке рендерера для Selenium + Chrome + Jenkins (пользователь SYSTEM)

Так как это была проблема с рендерингом, я попытался запустить тесты в автономном режиме, что решило проблему.

Ответ 5

Я столкнулся с той же проблемой при запуске выполнения от Дженкинса. Я немного поигрался и обнаружил, что только добавление приведенного ниже параметра Chrome заставляет работать:

options.addArguments("--no-sandbox");

Ответ 6

Если ваш веб-сайт https, и у вас возникли проблемы с chromedriver по тайм-ауту, используйте

option.addArguments("enable-features=NetworkServiceInProcess")

Если вышеупомянутое не работает, используйте

option.addArguments("disable-features=NetworkService") 

вместо

Кредит переходит на https://groups.google.com/forum/#!topic/chromedriver-users/yHuW_Z7tdy0

Ответ 7

Я видел проблему Timed out receiving message from renderer: aka Net::ReadTimeout в 100% случаев в тесте Cucumber, запущенном в сборке Jenkins, после того, как изображение docker selenium/standalone-chrome было обновлено в конце января 2018 года. Добавление - disable-gpu для ChromeOptions не исправил его для меня, но добавив параметр --disable-browser-side-navigation, он зафиксировал его на 100%. Я нашел эту рекомендацию здесь: https://bugs.chromium.org/p/chromedriver/issues/detail?id=2239#c10

он сказал, что есть несколько обходных путей к этой проблеме:

  • Исправление находится в Chrome v65, который в настоящее время доступен в бета-версии. Это лучший вариант, если вы можете использовать бета-версии.

  • Добавить --disable-browser-side-navigation перейти в командную строку Chrome.

  • Используйте ChromeDriver 2.33, который автоматически использует -disable-browser-side-navigation.

Ответ 8

В нашем случае мы обнаружили, что проблема связана с производительностью, потому что снимок экрана был огромным, но это произошло потому, что мы поняли, что разрешение снимков экрана, созданных Chrome, было в два раза больше, чем указано в коде для вызова chromedriver, например, если мы указав ширину 1024px и высоту 2000px на скриншоте, он создавал изображение шириной 2048px и высотой 4000px, поэтому для рендеринга потребовалось слишком много времени, и тайм-аут прервал процесс, если процесс завершился (после долгого ожидания). создавал тяжелые скриншоты изображений. Мы обнаружили, что это была опция (проблема) Chrome для поддержки устройств Retina, которые увеличивают разрешение скриншота, поэтому мы заставили использовать флаг, чтобы деактивировать опцию и отобразить исходное разрешение, настроенное, и оно работает хорошо, от 8 секунд до 13 секунд, чтобы создать скриншот (в зависимости от содержимого страницы) и размер изображения меньше, чем в начале. Это флаг в объекте ChromeOptions:

options.addArguments("--force-device-scale-factor=1");

Ответ 9

Я знаю вопрос как о Chromedriver, но для любого, как я, который специально не тестирует на Chrome и просто нуждается в работающем безголовом браузере в Selenium: переключитесь на Firefox (Geckodriver). Я установил одну опцию и забыл все об этих ошибках Chromedriver и проблемах рендеринга:

from selenium.webdriver.firefox.options import Options
options = Options()
options.headless = True
browser = webdriver.Firefox(options=options)

Это просто работает (тм).

Ответ 10

Я использую java и установил pageLoadStrategy в NONE с ожиданием, управляемым вручную. Это небольшой клочок, но можно все решить:

options.setPageLoadStrategy(PageLoadStrategy.NONE);

// ...

driver.get("url.of.a.website");
Thread.sleep(10000); // manual wait

// do something else

спасибо Джонатану, я хочу прокомментировать, но моя репутация слишком низкая