Đã hết thời gian nhận tin nhắn từ trình kết xuất: 0.100 tin nhắn nhật ký bằng ChromeDriver và Chrome v80 thông qua Selenium Java


39

Gần đây, chúng tôi đã nâng cấp môi trường thử nghiệm của mình với ChromeDriver v80.0.3987.16 và Chrome v80.0.3987.87 (Bản dựng chính thức) (64-bit) và sau khi nâng cấp, ngay cả chương trình tối thiểu cũng tạo ra rất nhiều nhật ký SEVERE này:

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

Trước đó, các thông báo này đôi khi được quan sát cho đến khi kết hợp với ChromeDriver v79.0 / Chrome v79.0.

Khối mã tối thiểu:

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

Bảng điều khiển đầu ra:

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

Bất cứ ai cũng phải đối mặt như nhau? Có sự thay đổi nào trong ChromeDriver / Chrome v80 đối với ChromeDriver / Chrome v79 không? Bất kì manh mối nào?


7
Tôi cũng đang đối mặt với cùng một vấn đề :(
Sooraj

6
Tôi đang gặp vấn đề tương tự khi chúng tôi nâng cấp lên v80. Mặc dù, câu hỏi của bạn có lẽ nên hỏi làm thế nào để khắc phục nó, thay vì hỏi liệu có ai khác đang gặp phải vấn đề tương tự không.
Taplar

2
Tôi không thể tin rằng câu hỏi này đã bị đóng. Nhiều lần SO thất bại là động cơ để giúp đỡ.
Saeed Neamati

4
Đối mặt với cùng một vấn đề. Tất cả mã Selenium tự động của chúng tôi bị hỏng. Và chúng tôi không thể hạ cấp vì rất nhiều phức tạp.
Saeed Neamati

2
@DebanjanB Có tôi đã xem qua bài viết của bạn. Tôi hy vọng họ có thể sửa nó trong phiên bản tiếp theo. Tôi đã cố gắng tìm ra giải pháp vì vậy tôi đã đề cập đến nó nhưng có nhiều lựa chọn hơn để ngăn chặn thời gian chờ. Tôi sẽ thử nó với tùy chọn khác nhưng nếu thời gian chờ là rất ít thì tôi nghĩ chúng ta cần đợi bản phát hành tiếp theo.
Muzzamil

Câu trả lời:


24

Giải pháp tạm thời

Dưới đây là các giải pháp cho các biến thể khác nhau của người dùng Chrome .

  • Nếu bạn đang sử dụng Chrome v80 , sử dụng ChromeDriver 80.0.3987.106 được phát hành gần đây sẽ giải quyết vấn đề.

    • Khối mã:

      System.setProperty("webdriver.chrome.driver", "C:\\Utility\\BrowserDrivers\\chromedriver.exe");
      WebDriver driver =  new ChromeDriver();
      driver.quit();
      
    • Bảng điều khiển đầu ra:

      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
      
  • Nếu bạn đang sử dụng Chrome v81 , sử dụng ChromeDriver 81.0.4044.20 được phát hành gần đây sẽ giải quyết vấn đề.

  • Nếu bạn đang sử dụng Chrome từ kênh Dev hoặc Canary, bạn cần chọn các tệp nhị phân cụ thể của nền tảng:

Giải pháp lâu dài

Tuy nhiên, @bugdroidđã gửi bản sửa lỗi thực tế thông qua sửa đổi / cam kết này như sau:

[ChromeDriver] chặn ghi nhật ký hết thời gian thử lại : r1924789 đã thêm vòng lặp thử lại trong khi chờ tin nhắn DevTools. Nhật ký của người dùng đã spam này với các báo cáo hết thời gian không chính xác. CL này chặn các thông điệp tường trình đó và báo cáo chính xác giá trị thời gian chờ lệnh khi thích hợp.

Lưu ý :

  • Trạng thái: Đã sửa
  • Nhãn: ToBeRelease ChromeDriver-82

Lịch sử

Thông báo lỗi này ...

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

... không nhất thiết chỉ ra một thất bại.

Như @Tricia đề cập rằng, Phiên bản 80 của ChromeDriver đã sửa đổi một vòng chờ để cho phép thử lại nhiều hơn; vòng lặp này sẽ tạo ra thông báo đó, nhưng nó vẫn tiếp tục lắng nghe. Tuy nhiên, thẻ SEVERE cho thông báo đó là sai lệch.

Hơn nữa, trong cuộc thảo luận Vấn đề 3332: Thử lại thời gian chờ được ghi lại là nghiêm trọng , @triciac [ChromeDriver Committer] cũng nói thêm rằng, nhóm ChromeDriver đã thêm một khoảng thời gian chờ nhỏ (100 ms) để DevToolsClientImpl::HandleEventsUntilcho phép kiểm tra thêm trạng thái điều hướng. Nhưng, thật không may khi thời gian chờ này đã hết hạn, nó được ghi là SEVERE (bởi ProcessNextMessage). Trong trường hợp hết thời gian chờ nhỏ này, nó không nên đăng nhập là SEVERE , mặc dù thời gian chờ SendCommandInternalvẫn còn.

Vì vậy, ChromeDriver cần một cách để kiểm soát việc đăng nhập theo cách tốt hơn, có thể bằng cách tăng thời gian chờ. Tuy nhiên, nếu lệnh cuối cùng hết thời gian, thời gian chờ được liệt kê là rất nhỏ, thì cần phải liệt kê thời gian chờ do người dùng xác định thay thế.


Giải pháp tức thời

Là một giải pháp tạm thời, bạn có thể hạ xuống ChromeDriver v79.0.3945.36 như có vẻ như các NGHIÊM TRỌNG bản ghi không xuất hiện trong giao diện điều khiển nhưng bạn sẽ quan sát CẢNH BÁO :

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

nghe có vẻ như ... một cách giải quyết an toàn ... và đã được xác nhận bởi một thành viên nhóm Chromium .

chromedriver79

  • Khối mã:

    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();
        }
    }
    
  • Bảng điều khiển đầu ra:

    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; dr

Bạn có thể tìm thấy một vài cuộc thảo luận có liên quan trong:


1
Cũng cần lưu ý rằng thông điệp tường trình này dường như được viết cho stderror. Tôi đã có một kịch bản PowerShell bắt đầu thất bại sau khi chạy thử nghiệm bằng cách sử dụng biến vstest.console.exePowerShell mặc dù các thử nghiệm đã vượt qua. PowerShell dường như nghĩ rằng bất cứ điều gì được viết cho stderror đều là thất bại, mặc dù trình chạy thử nghiệm đã trả về 0. $?$false$LastExitCode
Greg Burghardt

4
Re: Chrome v80, sử dụng ChromeDriver 80.0.3987.106 được phát hành gần đây đã giải quyết vấn đề. Re: Chrome v81, sử dụng ChromeDriver 81.0.4044.20 được phát hành gần đây đã giải quyết vấn đề. Tôi vẫn thấy vấn đề với các bản cập nhật ChromeDirver.
Neil

1
Có !!!!! ChromeDriver v79 win32 đang hoạt động tốt với chrome v80.0.3987.132 và không đưa ra lỗi TimedOut trong bảng điều khiển. Nhưng đôi khi Chromedriver không khởi động được máy chủ.
Surodip

1
Sử dụng giải pháp thay thế chromedriver v79 không còn hoạt động với phiên bản chrome ổn định mới nhất (81.0.4044.92) với trình điều khiển thậm chí không thể mở chrome. Tôi đã nâng cấp chromedriver lên bản mới nhất và nó hoạt động, nhưng các lỗi hết thời gian nghiêm trọng đã quay trở lại.
PST

@PST - chính xác vấn đề tương tự. Điều này thật khó chịu.
Sriram Ilango

10

Nguyên nhân gốc rễ: Bất cứ khi nào bạn đang tải một số trang với sự trợ giúp của trình điều khiển selen, thì drivertập lệnh sẽ đợi cho đến khi trang được tải hoàn toàn. Nhưng đôi khi webdo mất nhiều thời gian hơn để tải trang, trong trường hợp đó bạn sẽ thấy TimeoutExceptionngoại lệ trong bảng điều khiển của mình.

Giải pháp: Khi Tải trang mất quá nhiều thời gian và bạn cần dừng tải xuống các nguồn con bổ sung (hình ảnh, css, js, v.v.), bạn có thể thay đổi trangLoadStrargety thông qua webdo.

Mã bên dưới chỉ cần tải nội dung html từ trang. Bạn có thể đặt chiến lược tải trang từ chromeoptions

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

Giải pháp cập nhật -2: Tôi đồng ý với DebanjanB, chiến lược PageLoad với Không, không tải xuống các tệp bổ sung (hình ảnh, css, js, v.v.) không phải là ý tưởng tốt trong khi thực hiện thử nghiệm. Tôi đã tìm kiếm tất cả các vấn đề về nó và cố gắng tìm một giải pháp hợp lệ. Tôi đã thử các tùy chọn bên dưới vì đôi khi tại một thời điểm nào đó nó có thể giải quyết vấn đề này.

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

Không ai trong số họ giúp đỡ Nhưng tôi đã tìm thấy một giải pháp một lần nữa với chiến lược tải trang. Lần này chúng tôi đang tải xuống tất cả các nguồn con nhưng chúng tôi đang chờ sự kiện DOMContentLoaded . Chiến lược này được gọi là Háo hức . Một định nghĩa nhỏ về tất cả 3 chiến lược tải trang

1. bình thường: Chiến lược này khiến Selenium chờ tải toàn bộ trang (nội dung html và tài nguyên phụ được tải xuống và phân tích cú pháp).

2. háo hức: Chiến lược này khiến Selenium chờ đợi sự kiện DOMContentLoaded (chỉ nội dung html được tải xuống và phân tích cú pháp).

3. none: Chiến lược này khiến Selenium trở lại ngay lập tức sau khi nhận được đầy đủ nội dung trang ban đầu (nội dung html được tải xuống).

LƯU Ý: Theo mặc định, khi Selenium tải một trang, nó sẽ theo trang bình thườngLoadStrargety.

Đoạn mã mà không sử dụng chiến lược Pageload (Hoặc Bình thường như được sử dụng bởi selenium theo mặc định)

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

Bảng điều khiển đầu ra:

Bắt đầu ChromeDriver 80.0.3987.16 (320f6526c1632ad4f205ebce69b99a062ed78647-refs / chi nhánh / 3987 @ {# 185}) trên cổng 41540 Chỉ cho phép kết nối cục bộ. Vui lòng bảo vệ các cổng được ChromeDriver sử dụng và các khung kiểm tra có liên quan để ngăn chặn truy cập bằng mã độc. Ngày 11 tháng 2 năm 2020 10:22:12 AM org.openqa.selenium.remote.ProtocolHandshake tạoSession INFO: Đã phát hiện phương ngữ: W3C [1581412933.937] [SEVERE]: Đã hết thời gian nhận tin nhắn từ trình kết xuất: 0.100 [1514] nhận tin nhắn từ trình kết xuất: 0.100 [1581412934.168] [SEVERE]: Đã hết thời gian nhận tin nhắn từ trình kết xuất: 0.100 [1581412934.360] [SEVERE]: Đã hết thời gian nhận tin nhắn từ trình kết xuất: 0.100 [1581412934.461] [SEVERE] 0.100 [1581412934.618] [SEVERE]:

Với Chiến lược tải trang - Háo hức:

Đoạn mã:

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

Bảng điều khiển đầu ra:

Bắt đầu ChromeDriver 80.0.3987.16 (320f6526c1632ad4f205ebce69b99a062ed78647-refs / Branch-Heads / 3987 @ {# 185}) trên cổng 1175 Chỉ cho phép kết nối cục bộ. Vui lòng bảo vệ các cổng được ChromeDriver sử dụng và các khung kiểm tra có liên quan để ngăn chặn truy cập bằng mã độc. Ngày 11 tháng 2 năm 2020 10:29:05 AM org.openqa.selenium.remote.ProtatioHandshake tạoSession INFO: Phương ngữ được phát hiện: W3C
21


Nói chung, bạn sẽ không thể điều chỉnh Chiến lược tải trang vì các cấu hình WebDriver được chuẩn hóa và phù hợp nhất với chiến lược thử nghiệm được yêu cầu. Tuy nhiên, trong các cuộc thảo luận Làm thế nào để Selenium không đợi đến khi tải toàn bộ trang , Đừng đợi một trang tải, chúng tôi đã thảo luận chi tiết về nó. Đây là một vấn đề với ChromeDriver v80.
DebanjanB

2
@DebanjanB Tôi đồng ý với bạn nhưng như bạn biết SO là cộng đồng sắp giải quyết vấn đề. Tôi đã thử bất cứ giải pháp tốt nhất có thể có sẵn. Nếu bạn biết đó là ISSUE hoặc BUG trong trình điều khiển chrome thì chúng tôi phải Đăng nhập vấn đề này vào dự án Git hoặc địa điểm được đề xuất của họ. Đặt câu hỏi trong SO sẽ không giúp đỡ.
Muzzamil

Gần đây tôi đã cập nhật chrome và chromedriver của mình, và sau đó bắt đầu nhận được tất cả các thông báo cảnh báo này. Bây giờ tôi đang cố gắng hạ cấp chrome của mình và không thể tìm thấy nơi để nhận chrome 79v. Ai đó có thể cung cấp cho tôi liên kết để tải xuống chrome 79v
Vin

@Vin tại đây bạn có thể tải xuống chromedriver.chromium.org/doads
Muzzamil
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.