रेंडरर से संदेश प्राप्त करना: सेलेनियम जावा के माध्यम से क्रोमड्राइवर और क्रोम v80 का उपयोग करके 0.100 लॉग संदेश


38

हमने हाल ही में ChromeDriver v80.0.3987.16 और Chrome v80.0.3987.87 (आधिकारिक बिल्ड) (64-बिट) के साथ अपने परीक्षण वातावरण को अपग्रेड किया है और उन्नयन के बाद भी न्यूनतम कार्यक्रम इन कई लॉग का उत्पादन कर रहा है।

[1581082019.282][SEVERE]: Timed out receiving message from renderer: 0.100
[1581082020.245][SEVERE]: Timed out receiving message from renderer: 0.100

इससे पहले ये संदेश कभी-कभी ChromeDriver v79.0 / Chrome v79.0 कॉम्बो के साथ देखे जाते थे।

न्यूनतम कोड ब्लॉक:

public class chromeDemo 
{
    public static void main(String[] args) 
    {
            System.setProperty("webdriver.chrome.driver", "C:\\Utility\\BrowserDrivers\\chromedriver.exe");
            WebDriver driver =  new ChromeDriver();
            driver.get("https://www.google.com/");
            driver.quit();
    }
}

कंसोल आउटपुट:

Starting ChromeDriver 80.0.3987.16 (320f6526c1632ad4f205ebce69b99a062ed78647-refs/branch-heads/3987@{#185}) on port 9194
Only local connections are allowed.
Please protect ports used by ChromeDriver and related test frameworks to prevent access by malicious code.
Feb 07, 2020 6:56:57 PM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: W3C
[1581082019.282][SEVERE]: Timed out receiving message from renderer: 0.100
[1581082020.245][SEVERE]: Timed out receiving message from renderer: 0.100
[1581082020.430][SEVERE]: Timed out receiving message from renderer: 0.100
[1581082020.531][SEVERE]: Timed out receiving message from renderer: 0.100
[1581082020.632][SEVERE]: Timed out receiving message from renderer: 0.100
[1581082020.734][SEVERE]: Timed out receiving message from renderer: 0.100
[1581082020.835][SEVERE]: Timed out receiving message from renderer: 0.100
[1581082021.364][SEVERE]: Timed out receiving message from renderer: 0.100
[1581082021.544][SEVERE]: Timed out receiving message from renderer: 0.100
[1581082021.647][SEVERE]: Timed out receiving message from renderer: 0.100
[1581082021.748][SEVERE]: Timed out receiving message from renderer: 0.100
[1581082021.850][SEVERE]: Timed out receiving message from renderer: 0.100
[1581082021.952][SEVERE]: Timed out receiving message from renderer: 0.100

किसी का भी सामना करना पड़ रहा है? क्या ChromeDriver / Chrome v79 के संबंध में ChromeDriver / Chrome v80 में कोई परिवर्तन हुआ था? कोई सुराग?


7
मैं भी एक ही मुद्दे का सामना कर रहा हूँ :(
सूरज

6
V80 में अपग्रेड करने के बाद मुझे एक ही मुद्दा मिल रहा है। हालांकि, आपके प्रश्न को संभवतः यह पूछना चाहिए कि इसे कैसे ठीक किया जाए, बजाय यह पूछने के कि क्या कोई और भी उसी समस्या का सामना कर रहा है।
ठोकर

2
मैं विश्वास नहीं कर सकता कि यह प्रश्न बंद कर दिया गया है। कई बार SO इंजन की मदद करने में विफल रहता है।
सईद नेमाटी

4
ठीक उसी मुद्दे का सामना करते हुए। हमारे सभी स्वचालित सेलेनियम कोड टूट गए हैं। और हम बहुत सारी जटिलताओं के कारण अपग्रेड नहीं कर सकते हैं।
सईद नेमाटी 15

2
@DebanjanB हाँ मैं आपके पोस्ट से गुज़रा। मुझे उम्मीद है कि वे इसे अगली रिलीज में ठीक कर सकते हैं। मैंने इसका हल निकालने की कोशिश की, इसलिए मैंने इसका उल्लेख किया है, लेकिन टाइमआउट को रोकने के लिए अधिक विकल्प हैं। मैं इसे अन्य विकल्प के साथ आज़माऊंगा लेकिन अगर टाइमआउट की अवधि बहुत कम है तो मुझे लगता है कि हमें अगली रिलीज़ की प्रतीक्षा करने की आवश्यकता है।
मुजामिल

जवाबों:


24

अंतरिम हल

यहां क्रोम उपयोगकर्ताओं के विभिन्न प्रकारों के लिए समाधान दिए गए हैं ।

  • यदि आप Chrome v80 का उपयोग कर रहे हैं , तो हाल ही में रिलीज़ किए गए ChromeDriver 80.0.3987.106 का उपयोग करके समस्या हल करता है।

    • कोड ब्लॉक:

      System.setProperty("webdriver.chrome.driver", "C:\\Utility\\BrowserDrivers\\chromedriver.exe");
      WebDriver driver =  new ChromeDriver();
      driver.quit();
      
    • कंसोल आउटपुट:

      Starting ChromeDriver 80.0.3987.106 (f68069574609230cf9b635cd784cfb1bf81bb53a-refs/branch-heads/3987@{#882}) on port 20041
      Only local connections are allowed.
      Please protect ports used by ChromeDriver and related test frameworks to prevent access by malicious code.
      Feb 14, 2020 9:50:57 PM org.openqa.selenium.remote.ProtocolHandshake createSession
      INFO: Detected dialect: W3C
      
  • यदि आप Chrome v81 का उपयोग कर रहे हैं , तो हाल ही में रिलीज़ किए गए ChromeDriver 81.0.4044.20 का उपयोग करके समस्या हल करता है।

  • यदि आप देव या कैनरी चैनल से क्रोम का उपयोग कर रहे हैं, तो आपको प्लेटफ़ॉर्म विशिष्ट बायनेरिज़ चुनने की आवश्यकता है:

स्थायी समाधान

हालांकि, @bugdroidइस के माध्यम से वास्तविक ठीक प्रस्तुत संशोधन / प्रतिबद्ध जो इस प्रकार है:

[क्रोमड्राइवर] रिट्री लूप टाइमआउट के लॉगिंग को दबा देते हैं : r1924789 ने DevTools संदेशों की प्रतीक्षा करते हुए एक रिट्री लूप जोड़ा। अनचाहे टाइमआउट रिपोर्ट के साथ यह स्पैम किए गए उपयोगकर्ताओं का लॉग होता है। यह सीएल उन लॉग संदेशों को दबा देता है और उचित समय पर कमांड टाइमआउट मान की सही रिपोर्ट करता है।

नोट :

  • स्थिति: निश्चित
  • Labels: ToBeReleased ChromeDriver-82

इतिहास

यह त्रुटि संदेश ...

[1581082020.245][SEVERE]: Timed out receiving message from renderer: 0.100

... जरूरी नहीं कि विफलता का संकेत हो।

जैसा कि @Tricia उल्लेख करता है कि, ChromeDriver संस्करण 80 ने अधिक पुनर्प्रयास की अनुमति देने के लिए एक प्रतीक्षा लूप को संशोधित किया; यह लूप उस संदेश को उत्पन्न करेगा, लेकिन यह सुनना जारी रखता है। हालाँकि उस संदेश के लिए SEVERE टैग भ्रामक है।

इसके अलावा, चर्चा में अंक 3332: रिट्री टाइमआउट को गंभीर के रूप में लॉग इन किया गया , @triciac [ChromeDriver Committeeter] ने यह भी जोड़ा कि, ChromeDriver टीम ने DevToolsClientImpl::HandleEventsUntilनेविगेशन स्थिति की अतिरिक्त जाँच सक्षम करने के लिए एक छोटा टाइमआउट (100 ms) जोड़ा है । लेकिन, दुर्भाग्य से जब यह समय समाप्त हो रहा था, तो इसे SEVERE (द्वारा ProcessNextMessage) के रूप में लॉग किया गया । इस छोटे टाइमआउट के मामले में, इसे SEVERE के रूप में लॉग इन नहीं करना चाहिए , हालांकि SendCommandInternalअभी भी टाइमआउट चाहिए।

तो क्रोमड्राइवर को लॉगआउट को बेहतर तरीके से नियंत्रित करने के लिए एक तरीका चाहिए, संभवतः टाइमआउट को बढ़ाकर। हालाँकि, यदि कमांड अंत में बाहर हो जाता है, तो टाइमआउट की अवधि बहुत कम सूचीबद्ध है, तो इसके बजाय उपयोगकर्ता द्वारा परिभाषित टाइमआउट को सूचीबद्ध करना आवश्यक है।


तत्काल समाधान

एक अंतरिम समाधान के रूप में, आप में डाउनग्रेड कर सकते ChromeDriver v79.0.3945.36 ऐसा लगता है के रूप में गंभीर लॉग कंसोल में दिखाई देता है नहीं है, लेकिन आप का पालन करेंगे चेतावनी :

[WARNING]: This version of ChromeDriver has not been tested with Chrome version 80

जो लगता है ... सुरक्षित वर्कअराउंड ... और क्रोमियम टीम के सदस्य द्वारा पुष्टि की गई थी ।

chromedriver79

  • कोड ब्लॉक:

    public class A_Chrome 
    {
        public static void main(String[] args) 
        {
            System.setProperty("webdriver.chrome.driver", "C:\\Utility\\BrowserDrivers\\chromedriver.exe");
            WebDriver driver =  new ChromeDriver();
            driver.get("https://www.google.com/");
            driver.quit();
        }
    }
    
  • कंसोल आउटपुट:

    Starting ChromeDriver 79.0.3945.36 (3582db32b33893869b8c1339e8f4d9ed1816f143-refs/branch-heads/3945@{#614}) on port 9200
    Only local connections are allowed.
    Please protect ports used by ChromeDriver and related test frameworks to prevent access by malicious code.
    [1581503845.444][WARNING]: This version of ChromeDriver has not been tested with Chrome version 80.
    Feb 12, 2020 4:07:26 PM org.openqa.selenium.remote.ProtocolHandshake createSession
    INFO: Detected dialect: W3C
    

tl; डॉ

आप कुछ प्रासंगिक चर्चाएँ पा सकते हैं:


1
यह भी ध्यान रखें कि यह लॉग संदेश stderror को लिखा हुआ प्रतीत होता है। मेरे पास एक PowerShell स्क्रिप्ट थी जो परीक्षण का उपयोग करने के बाद चलने में विफल हो गई vstest.console.exeक्योंकि PowerShell $?चर तब $falseभी था जब परीक्षण पास हुए थे। PowerShell को लगता है कि कुछ भी लिखा जा रहा है कि स्टडरर को लिखा जाना एक विफलता है, भले ही $LastExitCodeटेस्ट धावक के लिए शून्य वापस आ गया।
ग्रेग बरगार्ड

4
पुन :: Chrome v80, हाल ही में जारी किए गए ChromeDriver 80.0.3987.106 का उपयोग करके समस्या हल करता है। पुन: Chrome v81, हाल ही में जारी किए गए ChromeDriver 81.0.4044.20 का उपयोग करके समस्या हल करता है। मैं अभी भी ChromeDirver अपडेट के साथ समस्या देख रहा हूं।
नील

1
हाँ !!!!! ChromeDriver v79 win32 क्रोम v80.0.3987.132 के साथ ठीक काम कर रहा है और कंसोल में TimedOut त्रुटि नहीं दे रहा है। लेकिन कभी-कभी Chromedriver सर्वर को शुरू करने में विफल रहता है।
सुप्रदीप

1
क्रोमेड्राइवर v79 वर्कअराउंड का उपयोग करना अब स्थिर क्रोम के नवीनतम संस्करण (81.0.4044.92) के साथ काम नहीं कर रहा है, ड्राइवर भी क्रोम को खोलने में असमर्थ है। मैंने क्रोमेड्रिवर को नवीनतम में अपग्रेड किया है और यह काम करता है, लेकिन गंभीर टाइमआउट त्रुटियां वापस आ गई हैं।
पीएसटी

@PST - ठीक उसी तरह की समस्याएं। यह निराश करने वाला है।
श्रीराम इलंगो

10

मूल कारण: जब भी आप सेलेनियम ड्राइवर की मदद से किसी पेज को लोड कर रहे हों, तो driverस्क्रिप्ट के पेज के पूरी तरह से लोड होने तक प्रतीक्षा करें। लेकिन कभी-कभी वेबड्राइवर को पेज लोड करने में अधिक समय लगता है, उस स्थिति में आप TimeoutExceptionअपने कंसोल में अपवाद देखेंगे ।

समाधान: जब पृष्ठ लोड होने में बहुत अधिक समय लगता है और आपको अतिरिक्त उप-स्रोत (चित्र, सीएसएस, js इत्यादि) डाउनलोड करने से रोकने की आवश्यकता होती है , तो आप webdriver के माध्यम से pageLoadStrategy को बदल सकते हैं।

नीचे दिए गए कोड पृष्ठ से केवल HTML सामग्री लोड करते हैं । आप गुणनखंडों से पृष्ठ लोड रणनीति निर्धारित कर सकते हैं

ChromeOptions options = new ChromeOptions();
options.setPageLoadStrategy(PageLoadStrategy.NONE);

अद्यतित समाधान -2: मैं देबंजन से सहमत हूँ, अतिरिक्त फ़ाइलों को डाउनलोड करने के बिना (चित्र, सीएसएस, जेएस इत्यादि) के बिना पेजलाड की रणनीति परीक्षण करते समय अच्छा विचार नहीं है। मैंने इसके बारे में सभी मुद्दे खोजे और एक वैध समाधान खोजने की कोशिश की। मैंने नीचे विकल्पों की कोशिश की क्योंकि कुछ समय में यह इस मुद्दे को हल करने में सक्षम था।

    options.addArguments("start-maximized"); 
    options.addArguments("enable-automation"); 
    options.addArguments("--no-sandbox"); 
    options.addArguments("--disable-infobars"); 
    options.addArguments("--disable-dev-shm-usage"); 
    options.addArguments("--disable-browser-side-navigation"); 
    options.addArguments("--disable-gpu");

उनमें से किसी ने भी मदद नहीं की लेकिन मुझे पेज लोड रणनीति के साथ फिर से एक समाधान मिला। इस बार हम सभी उप-स्रोत डाउनलोड कर रहे हैं लेकिन हम DOMContentLoaded घटना की प्रतीक्षा कर रहे हैं । इस रणनीति को ईगर कहा जाता है । उपलब्ध सभी 3 पगेलोड रणनीतियों की एक छोटी सी परिभाषा

1. सामान्य: इस रणनीति के कारण सेलेनियम को पूर्ण पृष्ठ लोडिंग (html सामग्री और डाउनलोड किए गए और पार्स किए गए संसाधन) की प्रतीक्षा करनी पड़ती है।

2. उत्सुक: इस रणनीति के कारण सेलेनियम को DOMContentLoaded घटना (html सामग्री केवल डाउनलोड और पार्स की गई) का इंतजार करना पड़ता है।

3. कोई नहीं: प्रारंभिक पृष्ठ सामग्री पूरी तरह से प्राप्त होने के बाद सेलेनियम तुरंत वापस लौटने का कारण बनता है (HTML सामग्री डाउनलोड की गई)।

नोट: डिफ़ॉल्ट रूप से, जब सेलेनियम एक पृष्ठ को लोड करता है, तो यह सामान्य पेजलोडैस्ट्रैगी का अनुसरण करता है।

पगेलोड रणनीति का उपयोग किए बिना कोड स्निपेट (या डिफ़ॉल्ट रूप से सेलेनियम द्वारा प्रयुक्त सामान्य)

System.setProperty("webdriver.chrome.driver", "C:\\Users\\...\\LatestDriver\\chromedriver.exe");   
WebDriver driver=new ChromeDriver();
driver.get("http://www.google.com");
driver.manage().window().maximize();
WebDriverWait wait = new WebDriverWait(driver, 20);
WebElement el = wait.until(ExpectedConditions.elementToBeClickable(By.name("q")));
el.click();
List <WebElement> allLinks = driver.findElements(By.tagName("a"));
System.out.println(allLinks.size());
driver.quit();

कंसोल आउटपुट:

ChromeDriver 80.0.3987.16 (320f6526c1632ad4f205ebce69b99a062ed78647-refs / ब्रांच-हेड्स / 3987 @ {# 185}) पोर्ट 4155 पर शुरू करने पर केवल स्थानीय कनेक्शन की अनुमति है। दुर्भावनापूर्ण कोड द्वारा पहुंच को रोकने के लिए ChromeDriver और संबंधित परीक्षण चौखटे द्वारा उपयोग किए जाने वाले बंदरगाहों की रक्षा करें। 11 फरवरी, 2020 10:22:12 AM org.openqa.selenium.remote.ProtocolHandshake createSession INFO: पता लगाई गई बोली: W3C [1581412933.937] [SEVERE]: रेंडरर से संदेश प्राप्त करना: 0.100 [1581412934.066] [SEVERE] रेंडरर से संदेश प्राप्त करना: 0.100 [1581412934.168] [SEVERE]: रेंडरर से संदेश प्राप्त करना: 0.100 [1581412934.360] [SEVERE]: रेंडरर से संदेश प्राप्त करना बंद हो गया: 0.100 [1581412934.461] [SEVERE]: रेंडर से संदेश प्राप्त किया: 0.100 [1581412934.618] [SEVERE]:

पेजलोड रणनीति के साथ - उत्सुक:

सांकेतिक टुकड़ा:

System.setProperty("webdriver.chrome.driver", "C:\\Users\\...\\LatestDriver\\chromedriver.exe");
ChromeOptions options = new ChromeOptions();
options.setPageLoadStrategy(PageLoadStrategy.EAGER);
WebDriver driver=new ChromeDriver(options);
driver.get("http://www.google.com");
driver.manage().window().maximize();
WebDriverWait wait = new WebDriverWait(driver, 20);
WebElement el = wait.until(ExpectedConditions.elementToBeClickable(By.name("q")));
el.click();
List <WebElement> allLinks = driver.findElements(By.tagName("a"));
System.out.println(allLinks.size());
driver.quit();

कंसोल आउटपुट:

ChromeDriver 80.0.3987.16 (320f6526c1632ad4f205ebce69b99a062ed78647-refs / ब्रांच-हेड / 3987 @ {# 185}) पोर्ट 1175 पर शुरू करना स्थानीय कनेक्शन की अनुमति है। दुर्भावनापूर्ण कोड द्वारा पहुंच को रोकने के लिए ChromeDriver और संबंधित परीक्षण चौखटे द्वारा उपयोग किए जाने वाले बंदरगाहों की रक्षा करें। फरवरी 11, 2020 10:29:05 AM org.openqa.selenium.remote.ProtocolHandshake createSession जानकारी: बोली जाने वाली बोली: W3C
21


आमतौर पर आप PageLoad रणनीति को बदल नहीं पाएंगे क्योंकि WebDriver कॉन्फ़िगरेशन मानकीकृत और आवश्यक परीक्षण रणनीति के लिए सबसे उपयुक्त हैं। हालांकि, चर्चा में कैसे सेलेनियम पूरा पृष्ठ लोड होने तक इंतजार नहीं करने के लिए , एक पेज के लिए इंतजार मत करो लोड करने के लिए हम विवरण में यह चर्चा की है। यह ChromeDriver v80 के साथ एक समस्या है।
देबजनबी

2
@DebanjanB मैं आपसे सहमत हूं लेकिन जैसा कि आप जानते हैं कि SO मुद्दों को हल करने के बारे में समुदाय है। मैंने कोशिश की कि जो भी संभव हो सबसे अच्छा समाधान उपलब्ध हो। यदि आप जानते हैं कि यह क्रोम ड्राइवर में ISSUE या BUG है तो हमें इस मुद्दे को उनके Git प्रोजेक्ट या अनुशंसित स्थान पर लॉग करना होगा। एसओ में सवाल उठाने से बात नहीं बनेगी।
मुजामिल

मैंने हाल ही में अपने क्रोम और क्रोमड्राइवर को अपडेट किया है, और फिर इन सभी चेतावनी संदेशों को प्राप्त करना शुरू कर दिया है। अब मैं अपने क्रोम को डाउनग्रेड करने की कोशिश कर रहा हूं और यह नहीं पा रहा हूं कि क्रोम 79v कहां मिलेगा। क्या कोई मुझे क्रोम 79v डाउनलोड करने के लिए लिंक प्रदान कर सकता है
विन

यहाँ @Vin आप डाउनलोड कर सकते हैं chromedriver.chromium.org/downloads
Muzzamil
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.