在页面停止加载之前选择元素
调用 driver.Navigate().GoToUrl(url);
时,代码执行将停止,直到页面完全加载。当你只想提取数据时,这有时是不必要的。
注意:下面的代码示例可能被视为黑客攻击。没有官方的方式这样做。
创建一个新线程
创建并启动用于加载网页的线程,然后使用 Wait 。
C#
using (var driver = new ChromeDriver())
{
new Thread(() =>
{
driver.Navigate().GoToUrl("http://stackoverflow.com");
}).Start();
new WebDriverWait(driver, TimeSpan.FromSeconds(10))
.Until(ExpectedConditions.ElementIsVisible(By.XPath("//div[@class='summary']/h3/a")));
}
使用超时
使用 WebDriverTimeout,你可以加载页面,并在一段时间后,它将抛出异常,这将使页面停止加载。在 catch 块中,你可以使用 Wait 。
C#
using (var driver = new ChromeDriver())
{
driver.Manage().Timeouts().SetPageLoadTimeout(TimeSpan.FromSeconds(5));
try
{
driver.Navigate().GoToUrl("http://stackoverflow.com");
}
catch (WebDriverTimeoutException)
{
new WebDriverWait(driver, TimeSpan.FromSeconds(10))
.Until(ExpectedConditions.ElementIsVisible
(By.XPath("//div[@class='summary']/h3/a")));
}
}
问题 :当你将超时设置得太短时,无论你是否存在所需元素,页面都将停止加载。当你将超时设置太长时,你将否定性能优势。