在页面停止加载之前选择元素

调用 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")));
    }
}

问题 :当你将超时设置得太短时,无论你是否存在所需元素,页面都将停止加载。当你将超时设置太长时,你将否定性能优势。