2016-02-05 44 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