Selenium读取Discord频道消息耗时过长问题排查与优化
Discord频道消息读取延迟排查与优化
我在操作Discord频道时,使用以下代码循环读取消息元素:
List<org.openqa.WebElement> ret = driver.findElement(By.tagName("main")) // driver = WebDriver .findElements(By.tagName("li")) .stream() .filter(message -> message.getAttribute("id") != null && message.getAttribute("id").contains("chat-messages")) .toList();
页面默认显示约40条消息,但每次读取耗时5-6秒,这个延迟完全无法接受。我知道当无匹配元素时findElements会触发隐式等待,但本次每次都能返回元素,因此想排查延迟原因并找到优化方案。
第一次优化尝试
根据建议,我简化了定位逻辑,改用XPath直接匹配元素:
List<WebElement> ret = driver.findElements(By.xpath("//main//li[contains(@id,'chat-messages')]"));
起初看似速度有所提升,但很快发现这只是临时现象,实际耗时仍和之前一致。
最终排查与解决方案
经过调试后发现,driver.findElements本身耗时不到20毫秒,真正导致5-6秒延迟的是读取所有返回元素的远程WebElement属性的操作。
针对这个问题,我重构了代码:不再读取所有消息元素的属性,仅获取findElements返回结果中最后一条消息的属性,并记录其时间戳,后续通过该时间戳识别新消息。调整后,读取延迟问题得到解决。
内容的提问来源于stack exchange,提问作者Kannan J
相关产品推荐
相关产品推荐

