【发布时间】:2016-10-12 20:33:35
【问题描述】:
我正在尝试从公共网站的 div 中获取数据。 Selenium WebDriver 似乎没有找到任何元素。即使使用 XPath,我也尝试找到具有 id 和 class 的元素,但仍然没有找到任何东西。 查看 PageSource 时我可以看到 html 页面代码,这证实了驱动程序工作正常。我在这里做错了什么? Selenium V2.53.1 // IEDriverServer Win32 v2.53.1
我的代码:
IWebDriver driver = new InternetExplorerDriver("C:\\Program Files\\SeleniumWebPagetester");
driver.Navigate().GoToUrl("D:\\test.html");
await Task.Delay(30000);
var src = driver.PageSource; //shows the html page -> works
var ds = driver.FindElement(By.XPath("//html//body")); //NoSuchElementException
var test = driver.FindElement(By.Id("aspnetForm")); //An unhandled exception of type 'OpenQA.Selenium.NoSuchElementException' occurred in WebDriver.dll
var testy = driver.FindElement(By.Id("aspnetForm"), 30); //'OpenQA.Selenium.NoSuchElementException'
var tst = driver.FindElement(By.XPath("//*[@id=\"lx-home\"]"), 30); //'OpenQA.Selenium.NoSuchElementException'
driver.Quit();
简单的 HTML 页面:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
</head>
<body>
<form action="#" id="aspnetForm" onsubmit="return false;">
<section id="lx-home" style="margin-bottom:50px;">
<div class="bigbanner">
<div class="splash mc">
<div class="bighead crb">LEAD DELIVERY MADE EASY</div>
</div>
</div>
</section>
</form>
</body>
</html>
附注,我的 XPath 与 HtmlWeb 完美搭配:
string Url = "D:\\test.html";
HtmlWeb web = new HtmlWeb();
HtmlDocument doc = web.Load(Url);
var element = doc.DocumentNode.SelectNodes("//*[@id=\"lx-home\"]"); //WORKS
【问题讨论】:
-
代码在我看来没问题。您能否在“GoToUrl”步骤之后尝试显式等待,以及是否可以读取 div 元素?想检查 webdriver 是否只是表单本身或所有元素有问题。
-
另外,请提及 IE 和驱动程序版本
-
@Sid 我为您更新了代码,在正文中添加了等待和 xpath。我什至删除了 html 页面上的 from,没有运气
-
在任何框架/iframe 中是否存在元素??
-
造成此类问题的一般因素有: 1. 浏览器和驱动程序版本不匹配。并非所有驱动程序版本都适用于所有浏览器版本 2. 驱动程序没有实现页面刷新 - 页面等待 3. 元素被其他一些元素重叠 - 元素不可见或类似 4. 未选择框架/iframe - 元素不会被搜索页面右侧部分尝试: var clss = driver.FindElement(By.Class("bigbanner"), 30);并让我们知道是否找到了该元素。
标签: c# internet-explorer selenium xpath selenium-webdriver