2013-02-01 85 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