我试图用C#,phantomjs和Selenium从以下网站上删除链接。它使用从登录链接触发的登录弹出窗体。当我执行下面的代码时,弹出窗口在保存的图像中正确显示,但DOM没有在driver.PageSource行中更新。弹出窗口显示用户名和密码字段,其中用户名输入的元素ID为iptvauth_field_username。
有没有办法在触发更改DOM的javascript后获取输出的最新html?这看起来像是一件微不足道的事情,网上的所有例子都是非常基本的,并没有涵盖这一点。
这些是我的nuget包
PhantomJS版本=" 2.1.1"
phantomjs.exe version =" 1.9.2.1"
Selenium.WebDriver version =" 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 :(得分: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();
如果有任何问题,请告诉我。 感谢。