无法从 HTML 网页获取元素

我正在尝试使用 Selenium 在 C# 中填充 HTML 网页(http://wasitviewed.com),但无论我尝试什么,当我尝试查找带有以下错误的网站元素时,它总是崩溃:


OpenQA.Selenium.NoSuchElementException: 'no such element: Unable to locate element: {"method":"name","selector":"href"}

我正在使用以下代码:


using (IWebDriver driver = new ChromeDriver())

{

    driver.Navigate().GoToUrl("http://www.wasitviewed.com/");

    IWebElement query = driver.FindElement(By.Name("href"));

    query.SendKeys("test");

}

http://img3.mukewang.com/61a35f7b0001ddce16650765.jpg

我也试过使用 xPath 但也失败了。

有没有更简单的方法来查找网页的元素,或者有没有一种方法可以遍历整个网页来查找不同的元素及其各自的 ID?


蝴蝶不菲
浏览 344回答 3
3回答

临摹微笑

在上面提到的 URL 中,所有元素都驻留在 iframe 中。因此,您需要在找到查询元素之前将 foucs 移动到框架中,否则NoSuchElementException将被抛出。每当 iframe 中存在任何元素时,您都需要使用以下任何一种方法将 foucs 移动到框架中。使用索引:索引从第 0 帧开始。因此,您可以使用如下索引切换到该帧driver.SwitchTo().Frame(0);//Here only one frame is available.so, Index is 0使用帧名称或 ID:按(框架)名称或 ID 选择框架。name 属性总是优先于 id 属性。driver.SwitchTo().Frame(<<Frame Name or ID>>);目前,上述 URL 中没有框架名称/ID。因此,您不能使用框架名称或 ID。使用框架 WebElement:您需要WebElement使用任何一种定位器策略找到框架(Name,Id,ClassName,TagName,XPath,CssSelector),它可用于将焦点移动到相应的框架。//Here only one frame is available.So, I have used FindElementvar frameElement= driver.FindElement(By.TagName("iframe"));driver.SwitchTo().Frame(frameElement);工作代码:选项1 :using (IWebDriver driver = new ChromeDriver()){&nbsp; &nbsp; driver.Navigate().GoToUrl("http://www.wasitviewed.com/");&nbsp; &nbsp; driver.SwitchTo().Frame(0);&nbsp; &nbsp; IWebElement query = driver.FindElement(By.Name("href"));&nbsp; &nbsp; query.SendKeys("test");}选项 2:using (IWebDriver driver = new ChromeDriver()){&nbsp; &nbsp; driver.Navigate().GoToUrl("http://www.wasitviewed.com/");&nbsp; &nbsp; var frameElement= driver.FindElement(By.TagName("iframe"));&nbsp; &nbsp; driver.SwitchTo().Frame(frameElement);&nbsp; &nbsp; IWebElement query = driver.FindElement(By.Name("href"));&nbsp; &nbsp; query.SendKeys("test");}

莫回无

顺便提一句。当你会与 iframe 混淆时,你应该使用哪个 iframe 来切换,那么你也可以使用类似的东西driver.SwitchTo().DefaultContent();或者&nbsp;driver.SwitchTo().Window(driver.WindowHandles.Last());<-- 这个切换到最后,这在某些情况下很好,当你已经切换到 iframe 的 2-3 级并且你想要返回时。我经常与两者一起使用。当我使用弹出窗口时,我也在使用两者。

小怪兽爱吃肉

作为 iframe 中的元素,首先转到 iframe,然后找到要运行的元素IWebElement FirstIFrame= driver.FindElement(By.XPath("//iframe[@src='index.php']"));driver.SwitchTo().Frame(FirstIFrame);//Now perform operations&nbsp;&nbsp;IWebElement query = driver.FindElement(By.Name("href"));&nbsp;query.SendKeys("test");
打开App,查看更多内容
随时随地看视频慕课网APP