在頁面停止載入之前選擇元素
呼叫 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")));
}
}
問題 :當你將超時設定得太短時,無論你是否存在所需元素,頁面都將停止載入。當你將超時設定太長時,你將否定效能優勢。