Selenium WebDriver findElements()在单引号上失败

时间:2013-02-01 05:29:02

标签: java html selenium selenium-webdriver

我的目标是解析一段HTML代码,如下所示,以获取文本,评论和回复字段作为块的单独部分:

<div id='fooID' class='foo'>
<p>
    This is the top caption of picture's description</p>
<p>
    T=<img src="http://www.mysite.com/images/img23.jpg" alt="" width="64" height="108"/>       </p>
<p>
    And here is more text to describe the photo.</p> 
<div class=comments>(3 comments)</div>
<div id='reply13' class='replies'>
   <a href=javascript:getReply('13',1)>Show reply </a></div>
</div>

我的问题是Selenium的WebDriver似乎不支持HTML中的非字符串标识符(注意HTML中的类字段是'foo'而不是“foo”)。从我在Selenium文档和其他SO帖子中看到的所有示例中,后一种格式是WebDriver通常期望的。

以下是我的Java代码的相关部分以及我的各种(不成功)尝试:

java.util.List<WebElement> elementList =    driver.findElements(By.xpath("//div[@class='foo']"));
java.util.List<WebElement> elementList = (List<WebElement>)  ((JavascriptExecutor)driver).executeScript("return $('.foo')[0]");
java.util.List<WebElement> elementList = driver.findElements(By.xpath("//div[contains(@class, 'foo')]"));
java.util.List<WebElement> elementList = driver.findElements(By.cssSelector("div." + foo_tag)); // where foo_tag = "'foo'".replace("'", "\'");
java.util.List<WebElement> elementList = driver.findElements(By.cssSelector("'foo'"));

有没有办法解决这个问题?或者是否有另一种更好的方法来提取上述字段? 其他信息:

  1. 我是一个HTML菜鸟,但已努力了解HTML代码/标签的结构
  2. 使用Firefox(以及相应的FirefoxDriver)
  3. 非常感谢您的帮助/建议!

2 个答案:

答案 0 :(得分:1)

这是无效的HTML,所以Selenium没有机会。你应该修理它。

您将有更好的机会使用HTMLAgilityPack:

http://htmlagilitypack.codeplex.com/

对于格式错误(这是)HTML,它会好一点。

以下是一篇SO帖子,其中包含几种不同语言的几种不同选项,以及HTMLAgilityPack等工具。你应该找到一个合适的人:

Options for HTML scraping?

答案 1 :(得分:0)

问题是,就我所知,html规范并不知道单引号。因此你对Selenum webdriver没有问题,问题是html。 你有机会编辑html代码吗?