问题描述
我将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硒等待页面完全加载?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!