c# - Selenium 与 PhantomJs 等到页面完全加载?

标签 c# selenium phantomjs

我将Selenium 与Phantomjs 一起使用,并希望在页面完全加载后获取页面内容。

我试过了 http://docs.seleniumhq.org/docs/04_webdriver_advanced.jsp但它似乎不适用于 phantomjs

显式等待:

using (IWebDriver driver = new PhantomJSDriver())
{
    IWait<IWebDriver> wait = new OpenQA.Selenium.Support.UI.WebDriverWait(driver, TimeSpan.FromSeconds(30.00));
    wait.Until(driver1 => ((IJavaScriptExecutor)driver).ExecuteScript("return document.readyState").Equals("complete"));

    driver.Navigate().GoToUrl(url);

    content = driver.PageSource;

    driver.Quit();
}

另一个测试:

using (IWebDriver driver = new PhantomJSDriver())
{
    WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));

    driver.Url = url;

    IWebElement myDynamicElement = wait.Until<IWebElement>((d) =>
        {
            return d.FindElement(By.Id("footer")); // failed because it's not yet loaded full content 
        });

    content = driver.PageSource;
}

或隐式等待:

using (IWebDriver driver = new PhantomJSDriver())
{
    driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(30));
    driver.Navigate().GoToUrl(url);

    content = driver.PageSource;

    driver.Quit();
}

内容还欠缺。唯一的方法是把 Thread.Sleep(waitTime);这不是一个好的解决方案。

谢谢。

最佳答案

对于您的“显式等待:”选项,我认为正确的顺序应该是:

1) 通过以下方式导航到目标网址:

driver.Navigate().GoToUrl(url);

2) 等到目标url完全加载完毕

IWait<IWebDriver> wait = new OpenQA.Selenium.Support.UI.WebDriverWait(driver, TimeSpan.FromSeconds(30.00));
wait.Until(driver1 => ((IJavaScriptExecutor)driver).ExecuteScript("return document.readyState").Equals("complete"));

通过这种方式,下一行将在读取 PageSource 之前等待页面完全加载。

关于c# - Selenium 与 PhantomJs 等到页面完全加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16760527/

相关文章:

java - 如何使用 selenium webdriver java 测试或验证复选框是否被选中

mysql - 如何从 mysql 获取 highcharts-convert.js 中的系列和类别数据

c# - VS 2017 .Net core 2.2 中缺少 Blazor 模板

c# - 将十进制(用户字符串)转换为带有 0x 前缀的十六进制

ios - 未下载 WebDriverAgent 项目的依赖项

laravel - 将 View 另存为 png laravel

php - 使用 phantomjs 设置 cron 作业

c# - 将文本 block 绑定(bind)到两个属性

c# - 如何切换该代码以使用 LINQ

python - 使用 Selenium Webdriver 单击下拉元素菜单