2016-02-14 62 views
0

我试图用C#,phantomjs和Selen从以下网站中获取链接。它使用从登录链接触发的登录弹出窗体。当我执行下面的代码时,弹出窗口在保存的图像中正确显示,但是在driver.PageSource行中没有更新DOM。弹出窗口显示用户名和密码字段,其中用户名输入的元素ID为iptvauth_field_username。当phantomjs和Selenium.WebDriver执行javascript时,如何查看DOM的更改?

有没有办法获得最新的HTML输出后,触发更改DOM的JavaScript?这似乎是这样一个微不足道的事情,网上的所有例子都非常基本,不包括这一点。

这些都是我的NuGet包

PhantomJS版本= “2.1.1”

phantomjs.exe版本= “1.9.2.1”

Selenium.WebDriver版本= “2.52.0”

var driver = new PhantomJSDriver(); 
driver.Url = "http://www.ufc.tv/"; 
driver.Navigate(); 
var source = driver.PageSource; 
var loginLink = driver.FindElementByLinkText("Sign In"); 
loginLink.Click(); 

Screenshot sh = driver.GetScreenshot();   // shows popup 
sh.SaveAsFile(@"d:\Temp.jpg", ImageFormat.Png); 

var username = driver.FindElementById("iptvauth_field_username"); // does not exist 
source = driver.PageSource;  // does not show popup in 
+0

可能重复的[Selenium:无法访问iframe和其中的数据](http://stackoverflow.com/questions/9607964/selenium-unable-to-access-iframe-and-data-inside-it) –

+0

该模式作为iframe加载。这就是为什么你没有看到它的来源。你必须先切换到帧。 –

回答

0

检查以下代码它工作正常。 我测试过了。

  var driver = new FirefoxDriver(); 
      driver.Navigate().GoToUrl("http://www.ufc.tv/"); 
      var loginLink = driver.FindElementByLinkText("Sign In"); 
      loginLink.Click(); 

      Screenshot sh = driver.GetScreenshot();   // shows popup 
      sh.SaveAsFile(@"Temp.jpg", ImageFormat.Png); 

      driver.SwitchTo().Frame(driver.FindElement(By.Id("signInFrame"))); 
      var username = driver.FindElementById("iptvauth_field_username"); // it exist now 
      var password = driver.FindElement(By.Id("iptvauth_field_password")); 
      var logInButton = driver.FindElement(By.XPath(".//*[@id='iptvauth_page_login']/tbody/tr[5]/td[1]/a/span")); 
      var source = driver.PageSource;  // show popup in 
      username.SendKeys("userName"); 
      password.SendKeys("Password"); 
      logInButton.Click(); 

如果有问题,请让我知道。 谢谢。

相关问题