我有此代码:
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秒,那么正确的方法是什么?
答案 0 :(得分:1)
您可以为页面加载保留明确的等待条件。为了进行明确的等待,请从页面中标识一些元素,然后在条件中提供WebElement。驱动程序将在哪里等到该项目存在。
WebDriverWait.until(condition-that-finds-the-element);
您还可以通过添加等待的秒数(在原位置更改10)来如下设置隐式等待。
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);