在頁面停止載入之前選擇元素

呼叫 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")));
    }
}

問題 :當你將超時設定得太短時,無論你是否存在所需元素,頁面都將停止載入。當你將超時設定太長時,你將否定效能優勢。