2016-02-14 75 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(); 

如果有問題,請讓我知道。 謝謝。