与PhantomJs硒等待页面完全加载? [英] selenium with PhantomJs wait till page fully loaded?

查看:527
本文介绍了与PhantomJs硒等待页面完全加载?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我将Selenium与Phantomjs结合使用,并希望在页面完全加载后获取页面内容.

I use Selenium with Phantomjs, and want to get the page content after the page fully loaded.

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

I tried http://docs.seleniumhq.org/docs/04_webdriver_advanced.jsp but it seems not working with 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);这不是一个好的解决方案.

The content is still lacking. The only way is to put Thread.Sleep(waitTime); which is not a good solution for this.

谢谢.

推荐答案

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

For your "Explicit wait:" option, I think the correct sequence should be:

1)导航至目标网址,方法是:

1) Navigate to target url by:

driver.Navigate().GoToUrl(url);

2)等待直到目标URL被

2) Wait until the target url fully loaded by

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之前等待页面完全加载.

In this way next line will wait page fully loaded before read PageSource.

这篇关于与PhantomJs硒等待页面完全加载?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆