我有以下HTML,我需要获取大胆标记之外的文本。例如'Submitted At:'我需要获取后面的时间戳。你会看到'Submitted At:被粗体标签包围,时间戳跟随,我无法检索它。
<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”)。文本
我已经尝试了几个东西,比如xpath,普通的旧文本检索,但我无法得到我需要的东西。我也做了几次搜索,找不到我需要的东西。
答案 0 :(得分:0)
首先,html失去了类和ID总是会带来挑战。当您想要访问仅在body标签中的文本时,情况会更糟。 在这个特定的例子中,这应该工作:
flushdemo<-function()
{
cat("Please select the file folder where you would like the information to be populated\n")
flush.console()
file <- choose.dir()
return(file)
}
flushdemo()
答案 1 :(得分:0)
InnerHtml实际上就是它 - 它在HTMLstart和结束标记中。因此,您实际上正在查看外部标记的InnerHtml - <body>
。
.text
标记的<Body>
会为您提供全文。如果标签将是动态索引是不会工作的。因此,如果您知道时间戳长度总是相同的,请获取整个文本,根据此字符串'Submitted At:'分隔/取消串,以达到最大时间戳长度。如果可能发生变化,这将是稳定的解决方案,而不是硬编码的索引值。即从该标签开始的拾取子串到时间戳的最大长度。
答案 2 :(得分: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>
标记,“提交时间:”。从那个节点,我们找到了文本节点,即“紧随其后的”2016年1月29日17:12:24“。