[selenium] 렌더러에서 메시지 수신 시간 초과 : Selenium Java를 통해 ChromeDriver 및 Chrome v80을 사용하여 0.100 개의 로그 메시지

Google은 최근 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에서 변경된 것이 있습니까? 단서가 있습니까?



답변

임시 솔루션

다양한 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
      
  • 당신이 사용하는 경우 크롬 v81을 최근에 출시 된 사용 ChromeDriver 81.0.4044.20을 문제를 해결합니다.

  • 개발자 또는 카나리아 채널 에서 Chrome 을 사용 하는 경우 플랫폼 별 바이너리를 선택해야합니다.


영구적 인 솔루션

그러나 다음과 같은 @bugdroid개정 / 커밋 을 통해 실제 수정 사항을 제출했습니다 .

[ChromeDriver] 재시도 루프 시간 종료 로깅 억제 : r1924789 가 DevTools 메시지를 기다리는 동안 재시도 루프를 추가했습니다. 정보가없는 시간 초과 보고서가 포함 된이 스팸 사용자 로그. 이 CL은 해당 로그 메시지를 억제하고 적절한 경우 명령 제한 시간 값을 올바르게보고합니다.

참고 :

  • 상태 : 고정
  • 라벨 : ToBeReleased ChromeDriver-82

역사

이 오류 메시지는 …

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

… 실패한 것은 아닙니다.

@Tricia가 언급 했듯이 ChromeDriver 버전 80은 더 많은 재 시도를 허용하기 위해 대기 루프를 수정했습니다. 이 루프는 해당 메시지를 생성하지만 계속 듣습니다. 그러나 해당 메시지 의 SEVERE 태그가 잘못되었습니다.

또한, 토론에 3332 문제 : 재시도 시간 제한이 심한로 기록 , @triciac [ChromeDriver 커미터는 또한 ChromeDriver 팀에 작은 제한 시간 (100 밀리) 추가 덧붙였다 DevToolsClientImpl::HandleEventsUntil탐색 상태의 추가 검사를 가능하게 할 수 있습니다. 그러나 불행히도이 시간 초과가 만료되면 SEVERE (by ProcessNextMessage) 로 기록됩니다 . 이 작은 제한 시간 초과의 경우 여전히 제한 시간 초과가 발생하더라도 SEVERE로 로그하면 SendCommandInternal안됩니다.

따라서 ChromeDriver는 시간 초과를 늘려서 더 나은 방식으로 로깅을 제어 할 수있는 방법이 필요합니다. 그러나 명령이 마지막으로 시간 종료 되면 시간 초과 기간이 매우 작 으면 사용자 정의 시간 종료를 대신 나열해야합니다.


즉각적인 솔루션

임시 해결책으로, 당신은에 다운 그레이드 할 수 있습니다 ChromeDriver의 v79.0.3945.36 가 보인다 SEVERE 로그를 콘솔에 표시되지 않지만이 관찰됩니다 경고 :

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

안전한 해결 방법 처럼 들리며 Chromium 팀원에 의해 확인되었습니다 .

크롬 드라이버 79

  • 코드 블록 :

    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; 닥터

다음에서 관련 토론을 찾을 수 있습니다.


답변

근본 원인 : 셀레늄 드라이버를 사용하여 일부 페이지를로드 할 때마다 driver페이지가 완전히로드 될 때까지 스크립트가 대기합니다. 그러나 때로는 웹 드라이버가 페이지를로드하는 데 시간이 더 걸리므로 TimeoutException콘솔에 예외가 표시됩니다.

해결 방법 : 페이지로드에 시간이 너무 오래 걸리고 추가 하위 리소스 (이미지, CSS, js 등) 다운로드 를 중지해야하는 경우 웹 드라이버를 통해 pageLoadStrategy를 변경할 수 있습니다.

아래 코드 는 페이지 에서 HTML 내용 을 로드합니다 . chromeoptions 에서 페이지로드 전략을 설정할 수 있습니다

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

업데이트 된 솔루션 -2 : 테스트를 수행하는 동안 추가 파일 (이미지, CSS, JS 등)을 다운로드하지 않고 DebanjanB, None with PageLoad 전략에 동의합니다. 나는 그것에 관한 모든 문제를 검색하고 유효한 해결책을 찾으려고 노력했습니다. 언젠가이 문제를 해결할 수 있었으므로 아래 옵션을 시도했습니다.

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

그들 중 누구도 도움이되지 않았지만 Page load 전략으로 다시 한 가지 해결책을 찾았습니다. 이번에는 모든 하위 리소스를 다운로드하고 있지만 DOMContentLoaded 이벤트를 기다리고 있습니다. 이 전략은 Eager 라고 불렀습니다 . 사용 가능한 3 개의 모든 페이지로드 전략에 대한 작은 정의

1. normal :
이 전략은 Selenium이 전체 페이지로드 (html 컨텐츠 및 하위 자원 다운로드 및 구문 분석)를 기다립니다.

2. eager :
이 전략은 Selenium이 DOMContentLoaded 이벤트를 기다립니다 (html 컨텐츠 다운로드 및 구문 분석 만).

3. none :
이 전략은 초기 페이지 컨텐츠가 완전히 수신 된 직후 (html 컨텐츠 다운로드) Selenium을 리턴합니다.

참고 : 기본적으로 Selenium은 페이지를로드 할 때 일반 pageLoadStrategy를 따릅니다.

페이지로드 전략을 사용하지 않는 코드 스 니펫 (또는 기본적으로 셀레늄이 사용하는 일반)

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

콘솔 출력 :

포트 41540에서 ChromeDriver 80.0.3987.16 (320f6526c1632ad4f205ebce69b99a062ed78647-refs / branch-heads / 3987 @ {# 185}) 시작 로컬 연결 만 허용됩니다. 악성 코드에 의한 액세스를 방지하기 위해 ChromeDriver 및 관련 테스트 프레임 워크에서 사용하는 포트를 보호하십시오. 2020 년 2 월 11 일 오전 10시 22 분 12 초 org.openqa.selenium.remote.ProtocolHandshake createSession 정보 : 감지 된 방언 : 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] [심각한] :

PageLoad 전략으로-열망 :

코드 스 니펫 :

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

콘솔 출력 :

포트 1175에서 ChromeDriver 80.0.3987.16 (320f6526c1632ad4f205ebce69b99a062ed78647-refs / branch-heads / 3987 @ {# 185}) 시작 로컬 연결 만 허용됩니다. 악성 코드에 의한 액세스를 방지하기 위해 ChromeDriver 및 관련 테스트 프레임 워크에서 사용하는 포트를 보호하십시오. 2020 년 2 월 11 일 오전 10시 29 분 5 초 org.openqa.selenium.remote.ProtocolHandshake createSession 정보 : 감지 된 방언 : W3C
21


답변