java - WebDriver 等到网站完全加载
问题描述
我有这个代码:
String chromeDriverPath = "C:\\buildtools\\chromedriver.exe" ;
System.setProperty("webdriver.chrome.driver", chromeDriverPath);
ChromeOptions options = new ChromeOptions();
options.addArguments("--headless", "--disable-gpu", "--window-size=1920,1200","--ignore-certificate-errors");
WebDriver driver = new ChromeDriver(options);
driver.get(prerenderUrl);
//driver.wait(timeout);
String pageSource = driver.getPageSource();
log(pageSource);
如果driver.wait(timeout);
添加了代码,则会抛出
java.lang.IllegalMonitorStateException
at java.lang.Object.wait(Native Method)
无需等待页面呈现,但问题是需要呈现的网站是纯 Javascript,意思是,它看起来像这样
<html>
<body>
<div id="rootPanel">Website will be rendered here</div>
<script type="text/javascript" language="javascript" src="app.nocache.js"></script>
</body>
</html>
这是一个使用 Javascript 呈现的类似网站:http: //samples.gwtproject.org/samples/Showcase/Showcase.html
而app.nocache.js
将触发整个 DOM 的渲染(至少这是它在普通浏览器上所做的)
如果driver.wait()
功能不是正确的等待 5 到 10 秒,那么正确的方法是什么?
解决方案
您可以为页面加载保留明确的等待条件。对于显式等待,从页面中识别一些元素并在条件中给出 WebElement。司机将在哪里等到该项目存在。
WebDriverWait.until(condition-that-finds-the-element);
您还可以通过添加等待秒数来设置隐式等待,如下所示(将 10 更改为原位)。
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
推荐阅读
- python - 使用应用注册更改 Azure VM 本地管理员密码的权限
- python - FastAPI 项目命名约定/结构
- html - 确保两个倾斜的 div 始终垂直连接,没有间距
- python - 如何删除 django-rest 中的帖子评论?
- python-3.x - 从列表中对子列表进行排序,然后将它们保存为子列表
- javascript - 如果同时有componentWillReceiveProps和onSubmit,我们要优先考虑onSubmit
- php - 使用 PHP 一致地获取网站的 Alexa 排名
- postgresql - 如何在 Postgres 和 NPGSQL 中做
- php - 在 Wordpress 中编辑带有事件皮肤 (uael_post_event_date) 的 Ultimate Addons Elementor 帖子中出现的发布日期
- regex - 正则表达式:一起找到两个辅音但不在列表中