web-dev-qa-db-ja.com

セレンは、レンダラーからのメッセージの受信がタイムアウトしました

Chrome昨日(64.0.3282)の最新バージョンをリリースした後、私は今やや散発的にこのエラーを受け取っています:

レンダラーからのメッセージの受信がタイムアウトしました:600.000

Dockerコンテナー内で約2,000のSeleniumテストを実行していますが、この失敗は100分の1の割合で見られます。失敗するテストは反復ごとに異なると言える限り、再現可能な手順はありません。最新のChromedriver(2.35)にアップデートしましたが、効果はないようです。私は以前にSelenium 2.41を使用していましたが、最新バージョン(3.8.1)に更新しました。これがなぜ起こるのかについて、私は完全に迷っています。他の誰かがこれに気づいていますか? Chromeの最新リリースのバグでしょうか?

あなたが提供することができるかもしれないあらゆる助けを前もってありがとう。

18

大AJAXロード

まず、多くのJavaScriptをダウンロード/処理/評価()していないことを確認します。それはタイムアウトを引き起こす可能性があります。

バージョンの互換性

まず、次のバージョンを確認します。

  • セレン
  • JDK
  • ChromeDriver
  • Chrome

    すべて互換です。それを文書化する単一の場所はなく、Seleniumソフトウェアは簡単なチェックを行うほどスマートではないので、これを行うのは幸運です(そうすべきです)

増え続ける役に立たない議論のリストに追加する

この不可解なコードブロックを追加します

スタックオーバーフローについて報告されたすべての問題の最新情報:2018年9月

        // 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);

ソース:

32
Jonathan

最新のChromeリリースで問題が発生したようです。disable-gpuChromeoptionが設定されていない場合、レンダラーがタイムアウトすることがあります。Googleがこれを修正するまでの回避策)は--disable-gpu属性をChromeOptionsに追加します。

編集:これは発生頻度を減らしましたが、それはまだ起こっています。

5

本日、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
Alex Podimov

Jenkinsから実行をトリガーしているときに同じ問題が発生しました。私は少し遊んで、以下のchromeオプションを追加するだけで動作することがわかりました:

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

Chrome 72から73までの問題が発生し、エラーメッセージが表示されていました。

Timed out receiving message from renderer: 600.000

私はJenkinsでテストを実行していたときにエラーが発生していました(ローカル開発マシンでテストが正常に実行されていました)。

Firefoxを試しましたが、問題は見つからなかったため、これをChromeに絞り込みました。 Chromium課題トラッカーを確認した後、 が見つかりました問題946441:Chromedriver:Selenium + Chrome + Jenkins(user SYSTEM) のレンダラーエラーからのメッセージの受信がタイムアウトしました

これはレンダラーの問題であったため、ヘッドレスモードでテストを実行してみて、問題を解決しました。

2
jrc16

ウェブサイトがhttpsで、タイムアウトの問題でchromedriverに問題がある場合は、

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

上記がうまくいかない場合は、

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

代わりに

クレジットは https://groups.google.com/forum/#!topic/chromedriver-users/yHuW_Z7tdy に移動します

1
Bhuvanesh Mani

Docker Selenium/standalone-chromeイメージが2018年1月下旬に更新された後、Jenkinsビルド環境で実行されているCucumberテストで、Timed out receiving message from renderer: aka Net::ReadTimeoutの問題が100%発生していました。 ChromeOptionsの-disable-gpu属性では修正されませんでしたが、--disable-browser-side-navigationオプションを追加すると100%修正されました。私はここにその推奨事項を見つけました: https://bugs.chromium.org/p/chromedriver/issues/detail?id=2239#c1

この問題にはいくつかの回避策があると述べています。

  • 修正はChrome v65にあります。これは現在ベータ版で利用可能です。これはベータビルドを使用できる場合に最適なオプションです。

  • --disable-browser-side-navigationスイッチをChromeコマンドラインに追加します。

  • --disable-browser-side-navigationを自動的に使用するChromeDriver 2.33を使用します。

0
dansalmo

私たちのケースでは、撮影したスクリーンショットが巨大であるため、問題はパフォーマンスの問題であることがわかりましたが、Chromeによって作成されたスクリーンショットのスクリーンショット解像度は、たとえば、スクリーンショットで幅1024pxと高さ2000pxを指定した場合、chromedriverを呼び出すと、2048px幅と4000px高さの画像が作成されたため、レンダリングに時間がかかりすぎて、タイムアウトがプロセスを中断しますプロセスは(長い待ち時間の後)重いスクリーンショット画像を作成していました。スクリーンショットの解像度を上げるRetinaデバイスをサポートするためのChromeのオプション(問題)であることがわかりました。フラグを使用してオプションを無効にし、設定された元の解像度をレンダリングし、スクリーンショットを作成するのに8秒から13秒かかり(ページのコンテンツに応じて)、画像サイズは元のサイズよりも小さくなります。 この ChromeOptionsオブジェクトへのフラグです:

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

私はChromedriverについての質問を知っていますが、Chromeおよびで特にテストしていない私のような人にとっては、Seleniumで動作するヘッドレスブラウザが必要です:Firefoxに切り替えます( Geckodriver )。1つのオプションを設定し、これらのChromedriverのバグとレンダリングの問題をすべて忘れました。

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

動作します(tm)。

0
kontextify