Après Chrome a publié sa dernière version hier (64.0.3282), je reçois maintenant cette erreur assez sporadiquement:
Délai de réception du message du moteur de rendu dépassé: 600 000
J'effectue environ 2 000 tests Selenium dans un conteneur Docker et je vois cet échec à un taux d'environ 1 pour 100. Il n'y a pas d'étape reproductible pour autant que je sache, les tests qui échouent sont différents à chaque itération. J'ai mis à jour la dernière version de Chromedriver (2.35), mais cela ne semble pas avoir d'effet. J'utilisais auparavant Selenium 2.41, mais j'ai mis à jour la dernière version (3.8.1) en espérant que cela pourrait aider ... ce n'est pas le cas. Je ne comprends absolument pas pourquoi cela pourrait se produire. Quelqu'un a-t-il remarqué cela? Est-ce éventuellement un bug avec la dernière version de Chrome?
Merci d’avance pour toute aide que vous pourrez peut-être fournir.
Commencez par vérifier que vous ne téléchargez pas, ne traitez pas et n'évaluez pas beaucoup de javascript. Cela peut provoquer un délai d'attente.
Tout d’abord, vérifiez vos versions de:
Chrome
sont tous compatibles. Bonne chance dans cette démarche car il n’existe pas de lieu unique pour la documenter ET le logiciel Selenium n’est pas assez intelligent pour effectuer une vérification rapide (cela devrait)
Ajouter ce bloc de code crypté
à jour de tous les problèmes jamais signalés concernant un débordement de pile le: septembre 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"); // https://stackoverflow.com/a/26283818/1689770
options.addArguments("enable-automation"); // https://stackoverflow.com/a/43840128/1689770
options.addArguments("--headless"); // only if you are ACTUALLY running headless
options.addArguments("--no-sandbox"); //https://stackoverflow.com/a/50725918/1689770
options.addArguments("--disable-infobars"); //https://stackoverflow.com/a/43840128/1689770
options.addArguments("--disable-dev-shm-usage"); //https://stackoverflow.com/a/50725918/1689770
options.addArguments("--disable-browser-side-navigation"); //https://stackoverflow.com/a/49123152/1689770
options.addArguments("--disable-gpu"); //https://stackoverflow.com/questions/51959986/how-to-solve-Selenium-chromedriver-timed-out-receiving-message-from-renderer-exc
driver = new ChromeDriver(options);
Sources:
Il semble qu'il y ait eu un problème avec la version la plus récente Chrome). Sans le jeu disable-gpu Chromeoption, le rendu expirera de temps en temps. La solution de contournement jusqu'à ce que Google corrige ce problème (le cas échéant) ) consiste à ajouter l'attribut --disable-gpu à ChromeOptions.
EDIT: Cela a réduit la fréquence des occurrences, mais cela se produit toujours.
J'ai eu ce problème aujourd'hui, avec Chrome: Version 73.0.3683.86 (Official Build) (64 bits). Pour moi, les échecs de génération Jenkins échouaient, et tout se passait bien localement. Voir les options suivantes Chrome qui m’a aidé à surmonter ce problème (ChromeDriver à l’heure actuelle: version - 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);
J'ai rencontré le même problème lors du déclenchement de l'exécution de Jenkins. J'ai joué un peu et j'ai constaté que le fait d'ajouter uniquement l'élément ci-dessous chrome) permet de faire fonctionner les choses:
options.addArguments("--no-sandbox");
Je voyais des problèmes allant de Chrome 72 à 73 et recevait le message d'erreur suivant:
Timed out receiving message from renderer: 600.000
J'avais eu l'erreur seulement quand j'exécutais des tests sur Jenkins (les tests s'exécutaient bien sur ma machine de développement local), ce que j'ai trouvé plutôt étrange.
J'ai essayé Firefox et aucun problème n'a été trouvé, donc cela a été réduit à Chrome. Après avoir jeté un œil au traqueur de problèmes de chrome, j'ai trouvé Problème 946441: Chromedriver: le délai de réception du message d'erreur de rendu est expiré pour Selenium + Chrome + Jenkins (utilisateur SYSTEM)
Comme il s’agissait d’un problème de rendu, j’ai essayé d’exécuter des tests en mode sans tête, ce qui a résolu le problème.
Si votre site Web est https et que vous rencontrez des problèmes avec chromedriver en raison d’un problème de temporisation, utilisez
option.addArguments("enable-features=NetworkServiceInProcess")
Si ce qui précède ne fonctionne pas, utilisez
option.addArguments("disable-features=NetworkService")
au lieu
Le crédit va à https://groups.google.com/forum/#!topic/chromedriver-users/yHuW_Z7tdy
Je voyais le Timed out receiving message from renderer:
alias Net::ReadTimeout
_ émettez 100% du temps dans un test Cucumber exécuté dans une version de Jenkins après que l'image du docker Selenium/standalone-chrome a été mise à jour à la fin janvier 2018. L'ajout de l'attribut --disable-gpu à ChromeOptions ne l'a pas corrigé. moi, mais en ajoutant le --disable-browser-side-navigation
option fixée à 100%. J'ai trouvé cette recommandation ici: https://bugs.chromium.org/p/chromedriver/issues/detail?id=2239#c1
il a dit qu'il existe plusieurs solutions de contournement à ce problème:
Un correctif est présent dans Chrome v65, actuellement disponible en version bêta. C’est la meilleure option si vous pouvez utiliser les versions bêta.
Ajoutez le commutateur --disable-browser-side-navigation à la ligne de commande Chrome.
Utilisez ChromeDriver 2.33, qui utilise automatiquement --disable-browser-browser-side-navigation.
Dans notre cas, nous avons constaté que le problème était un problème de performances, car la capture d'écran était énorme, mais nous avons pris conscience de la résolution des captures d'écran créées par Chrome était le double du code spécifié dans en appelant le chromedriver, par exemple, si nous spécifions la largeur 1024px et la hauteur 2000px dans la capture d'écran, une image de 2048px width et 4000px height était créée. le processus terminé (après une longue attente), il créait une lourde capture d'écran. Nous avons découvert qu'il s'agissait d'une option (problème) de Chrome) pour la prise en charge de périphériques Retina qui augmentent la résolution de la capture d'écran. nous avons forcé l'utilisation d'un drapeau pour désactiver l'option et restituer la résolution d'origine configurée; cela fonctionne bien, la création de la capture d'écran prend entre 8 et 13 secondes (selon le contenu de la page) et la taille de l'image est inférieure à celle du début. . Cette est le drapeau dans l'objet ChromeOptions:
options.addArguments("--force-device-scale-factor=1");
Je connais la question à propos de Chromedriver, mais pour tous ceux comme moi qui ne testent pas spécifiquement sur Chrome et ont simplement besoin d’un navigateur sans tête fonctionnel dans Selenium : passez à Firefox ( Geckodriver ). J'ai défini une seule option et j'ai tout oublié de ces bugs et problèmes de rendu de Chromedriver:
from Selenium.webdriver.firefox.options import Options
options = Options()
options.headless = True
browser = webdriver.Firefox(options=options)
Cela fonctionne juste (tm).