2016-02-05 59 views
0

我有以下HTML,並且我需要獲取粗體標記之外的文本。例如「提交時間:」我需要獲取後面的時間戳。您會看到'提交時間:被大膽標記包圍,時間戳記如下,我無法檢索它。如何使用watir webdriver檢索innerhtml

<body> 
    <h2> … </h2> 
    <b> … </b> 
    jenkins 
    <br></br> 
    <b> … </b> 
    <br></br> 
    <b> … </b> 
    <a href=""> … </a> 
    <br></br> 
    <b> … </b> 
    <br></br> 
    <b> 
     Submitted At: 
    </b> 
    29-Jan-2016 17:12:24 

我試過的東西。

@ browser.body.text.split( 「\ n」 個)

@ browser.body.split( 「\ n」 個)

body_html =引入nokogiri :: HTML.parse(@browser。 。body.html)

body_html.xpath( 「// //身體b」)文本

  • 返回:「用戶:作業名:JobConf:工作的ACL:所有用戶都allowedSubmitted在:在推出:完成時間:狀態:分析此作業「

我已經嘗試過幾種方法,比如xpath,普通的舊文本檢索,但是我無法得到我需要的東西。我也做過幾次搜索,找不到我需要的東西。

+0

它看起來很脆弱和跛腳,但你可以鏈'String :: scan'來拉時間戳。構造示例:'b.text.scan(/ \ d。* \ d /)' – orde

+0

請閱讀「[問]」,包括底部的鏈接和「[mcve]」。我們需要看到你試圖解決問題,否則它看起來像你想讓我們爲你寫代碼。 –

+0

你可能會更好,只是將它解析爲一個巨大的字符串。 upvoting只是爲了防止新用戶失去業力。也投票結束 –

回答

0

首先,HTML bereft的類和ID總是會提供一個挑戰。當你想訪問僅僅在body標籤中的文本時,情況會更糟糕。 在這種特定的實例,這應該工作:

browser.b(index: 4)

+0

謝謝你的迴應。在發佈之前,我確實嘗試了以上內容,但它只給了我「提交時間:」,我需要後面的時間戳,而不是標籤所包圍的時間戳。 – Joe

+0

是的,這是b標籤之間的文字,我錯過了你需要實際的時間戳,這是正確的。如果您使用的是直接位於body標籤中的文字,那麼您將面臨困難時間並被迫處理不雅的解決方案。 – titusfortner

0
  1. 的innerHTML是從字面上它是什麼 - 它的內部HTMLstart和結束標記。因此,您實際上正在查看InnerHtml的外部標籤 - <body>

  2. .text<Body>標籤會給你全文。如果標籤是動態索引不起作用。所以如果你知道時間戳長度總是相同的話,那麼獲取整個文本,根據這個字符串「提交時間:」來劃定/解開字符串到最大時間戳長度。這將是一個穩定的解決方案,而不是硬編碼的索引值,如果它可能會改變。即從該標記開始到最大時間戳的拾取子字符串。

+0

謝謝你的迴應。我試過標籤上的.text,但時間戳不返回。我做了browser.text和我需要的信息,雖然我不覺得這是獲取數據的最有效方式。 – Joe

+0

@Joe,你是說'browser.body.text'返回的東西不同於'browser.text'嗎? –

+0

@joe你可以給我完整的HTML嗎?你怎麼找到標籤元素 –

0

的HTML看起來具有的結構:

  • 一個<b>標籤即字段描述和
  • 也就是字段值的以下文本節點。

Watir只能返回所有元素文本節點的連接。因此,它不能很好地處理這種需要文本節點分離的結構。儘管可以解析串聯的字符串,但根據可能的字段描述/值,可能會出現錯誤。

因此,我建議使用Nokogiri解析HTML,因爲它可以返回單個文本節點。這看起來像:

html = browser.html 
doc = Nokogiri::HTML(html) 
p doc.at_xpath('//b[normalize-space(text()) = "Submitted At:"] 
       /following-sibling::text()[1]').text.strip 
#=> "29-Jan-2016 17:12:24" 

在這裏,我們使用XPath找到<b>標籤包含相關領域的描述,「提交了」。從該節點開始,我們找到文本節點,即「29-Jan-2016 17:12:24」,它緊隨其後。

+0

我給了一個嘗試,它返回:NoMethodError:未定義的方法'文本'爲零:NilClass 從cdh5.rb:137:在'get_info' – Joe