2013-02-01 48 views
0

我的目标是要解析的HTML代码块象下面这样获得的文本,评论和回复字段作为块独立的部分:硒的webdriver findElements()对单失败行情

<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)

你帮助/建议非常感谢!

+0

HTML是无效的。 – aimbire

回答

0

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

+0

不幸的是,我没有机会编辑HTML。如果HTML规范不允许使用单引号,那么具有此HTML代码的页面如何正确加载? – kip2

1

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

您将有更好的机会与HTMLAgilityPack:

http://htmlagilitypack.codeplex.com/

这是一个好一点,当谈到糟糕形成(这这是)HTML。

下面是一个SO贴子,其中有几种不同的语言的选项,例如HTMLAgilityPack。你应该找到一个合适的:

Options for HTML scraping?

+0

我没有机会修复HTML,因为我无法访问它。 HTMLAgilityPack看起来是一个很好的选择,但是你知道在Java/C++/Ruby中是否有其他选择吗? – kip2

+0

@ user1145905,道歉,没有看到你使用的是Java。还有其他一些类似的工具,但是有一个SO帖子专门列出所有这些不同的工具,所以编辑了我的帖子以链接到它。根据“为什么”这个页面加载正确:感谢您的浏览器,我会说,它会尝试加载任何它给出的,不管它是否符合HTML。 – Arran

+0

不是问题,谢谢@Arran。我将尝试其中一种Java建议。关于HTML合规性问题也一样。 – kip2