从呈现器接收消息时超时:通过Selenium Java使用ChromeDriver和Chrome v80的0.100条日志消息

l7wslrjt  于 2023-02-14  发布在  Go
关注(0)|答案(4)|浏览(136)

我们最近用ChromeDriver www.example.com和Chrome www.example.com(官方版本)(64位)升级了我们的测试环境,升级后,即使是最小的程序也会产生大量这些严重的日志: v80.0.3987.16 and Chrome v80.0.3987.87 (Official Build) (64-bit) and after the upgradation even the minimal program is producing a lot of these SEVERE logs:

[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/chromev80相对于chromedriver/chromev79有没有什么变化?有什么线索吗?

ep6jt1vc

ep6jt1vc1#

临时解决方案

以下是针对不同类型 * Chrome * 用户的解决方案。

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

永久性溶液

但是,@bugdroid通过此revision/commit提交了实际修复,如下所示:

  • [ChromeDriver]禁止记录重试循环超时*:r1924789在等待DevTools消息时添加了一个重试循环。这会向用户日志发送垃圾邮件,其中包含毫无意义的超时报告。此CL会抑制这些日志消息,并在适当的时候正确报告命令超时值。
    • 注**:
  • 状态:已修复
  • 标签:待发布的Chrome驱动程序-82

历史
此错误消息...

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

......不一定表示故障。
正如@Tricia提到的那样,ChromeDriver版本80修改了一个等待循环,允许更多的重试;这个循环将产生那个消息,但是它继续监听。2然而,那个消息的 * SEVERE * 标记是误导的。
此外,在讨论Issue 3332: Retry timeout logged as severe时,@triciac [ChromeDriver委员会]还补充说,ChromeDriver团队增加了一个小超时(100 ms)到DevToolsClientImpl::HandleEventsUntil,以启用导航状态的附加检查。但是,不幸的是,当此超时到期时,它被记录为 * 严重 *(ProcessNextMessage)。在此小超时的情况下,不应记录为 * SEVERE *,但SendCommandInternal的超时仍应记录。
因此ChromeDriver需要一种更好的方式来控制日志记录,可能是通过增加超时时间。但是,如果命令最终超时,列出的 * timeout * 持续时间非常小,则需要列出用户定义的超时时间。

即刻解决方案

作为临时解决方案,您可以降级到ChromeDriver v79.0.3945.36,因为控制台中似乎没有显示 * SEVERE * 日志,但您会看到 * WARNING *:

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

这听起来像是一个 *...安全的变通方案... *,并已得到 * chrome * 团队成员的确认。

  • 代码块:
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

时间;日期

您可以在以下位置找到一些相关讨论:

jaql4c8m

jaql4c8m2#

    • 根本原因:**每当您在Selenium驱动程序的帮助下加载某个页面时,driver脚本会等待页面完全加载。但有时webdriver加载页面需要更长的时间,在这种情况下,您会在控制台中看到TimeoutException异常。
    • 解决方案:当页面加载花费太多时间,您需要停止下载额外的子资源(图像、CSS、js等)**时,您可以通过webdriver更改pageLoadStrategy。

下面的代码只是从页面加载html内容。您可以从chromeoptions设置页面加载策略

ChromeOptions options = new ChromeOptions();
options.setPageLoadStrategy(PageLoadStrategy.NONE);
    • 更新的解决方案-2:**我同意DebanjanB,PageLoad策略无,不下载额外的文件(图像,CSS,js,等)是不是一个好主意,而执行测试。我没有搜索有关它的所有问题,并试图找到一个有效的解决方案。我尝试了以下选项,因为有时在某些时候,它能够解决这个问题。
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事件。这个策略叫做Eager。这是所有3个可用的页面加载策略的一个小定义

    • 1.normal:**该策略导致Selenium等待整个页面加载(HTML内容和子资源下载和解析)。
    • 2.eager:**该策略导致Selenium等待DOMContentLoaded事件(仅下载和解析HTML内容)。
      1. none:**此策略会使Selenium在完全接收到初始页面内容(下载HTML内容)后立即返回。
    • 注意:**默认情况下,当Selenium加载页面时,它遵循正常的pageLoadStrategy。
    • 未使用Pageload策略的代码段(或Selenium默认使用的Normal)**
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 AM org. openqa. selenium. remote. ProtocolHandshake createSession信息:检测到的方言:W3C [1581412933.937][严重]:从呈现器接收消息时超时:0.100 [1581412934.066][严重]:从呈现器接收消息时超时:0.100 [1581412934.168][严重]:从呈现器接收消息时超时:0.100 [1581412934.360][严重]:从呈现器接收消息时超时:0.100 [1581412934.461][严重]:从呈现器接收消息时超时:0.100 [1581412934.618][严重]:从呈现器接收消息时超时:0.100 [1581412934.719][严重]:从呈现器接收消息时超时:0.100 [1581412934.820][严重]:从呈现器接收消息时超时:0.100 [1581412934.922][严重]:从呈现器接收消息时超时:0.100 [1581412935.097][严重]:从呈现器接收消息时超时:0.100美元

    • 使用页面加载策略-渴望:**
    • 代码段:**
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:05 AM org. openqa. selenium. remote. ProtocolHandshake createSession信息:检测到的方言:W3C语言
21

ktca8awb

ktca8awb3#

使用此行代码保留代码的第一个语句

System.setProperty(ChromeDriverService.CHROME_DRIVER_SILENT_OUTPUT_PROPERTY, "true");

如果你不去找莱恩斯

System.setProperty("webdriver.chrome.silentOutput", "true");
qzwqbdag

qzwqbdag4#

我曾经在C#项目中使用81.0.4044.13800版本的chrome驱动程序和selenium时遇到过同样的问题。更新到较新版本的驱动程序对我来说不起作用,进一步的启动参数也不起作用。
但由于这是一个日志问题,下面是对我有效的最终解决方案,如所述**here**:

ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.AddArguments(new List<string>() 
{ 
  "no-sandbox", 
  "headless", 
  "disable-gpu" 
});

ChromeDriverService service = ChromeDriverService.CreateDefaultService();
service.SuppressInitialDiagnosticInformation = true;

var driver = new ChromeDriver(service, chromeOptions);

相关问题