我将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/