Ruby watir webdriver:如何从HTML中检索我在其中找到子字符串的整行内容?

Ruby watir webdriver:如何从HTML中检索我在其中找到子字符串的整行内容?,ruby,webdriver,watir-webdriver,Ruby,Webdriver,Watir Webdriver,我从服务器上得到了类似于HTML的东西: <html ...> <head ...> .... <link href="http://mydomain.com/Digital_Cameras--~all" rel="canonical" /> <link href="http://mydomain.com/Digital_Cameras--~all/sec_~product_list/sb_~1/pp_~2" rel="next" /> ...

我从服务器上得到了类似于HTML的东西:

<html ...>
<head ...>
....
<link href="http://mydomain.com/Digital_Cameras--~all" rel="canonical" />

<link href="http://mydomain.com/Digital_Cameras--~all/sec_~product_list/sb_~1/pp_~2" rel="next" />
...
</head>
<body>
...
</body>
</html>

....
...
...
如果b持有导航到我需要查看的页面的浏览器对象,我可以使用
b.html.include?
语句找到
rel=“canonical”
,但是我如何检索找到此子字符串的整行?我还需要下一行(不是空的)。

您可以使用
字符串#每行
迭代
b.html
中的每行,并检查
rel=

b.goto('http://www.iana.org/domains/special')
b.html.each_line {|line| puts line if line.include? "rel="}
它应该返回所有字符串,包括
rel=
(尽管它可能返回您不希望的行,例如
来解析HTML:

require 'nokogiri'
require 'open-uri'

doc = Nokogiri::HTML(open("http://www.iana.org/domains/special"))
nodes = doc.css('link')
nodes.each { |node| puts node}
您可以使用
String#每一行
b.html
中迭代每一行,并检查
rel=

b.goto('http://www.iana.org/domains/special')
b.html.each_line {|line| puts line if line.include? "rel="}
它应该返回所有字符串,包括
rel=
(尽管它可能返回您不希望的行,例如
来解析HTML:

require 'nokogiri'
require 'open-uri'

doc = Nokogiri::HTML(open("http://www.iana.org/domains/special"))
nodes = doc.css('link')
nodes.each { |node| puts node}
您可以使用css定位器(或xpath)来获取链接元素

下面将返回rel属性值为“canonical”的link元素的html(即行):

b.element(:css=>'link[rel=“canonical”]').html
#=> 
我不知道你所说的“我还需要下一个(不是空的)”是什么意思。如果你的意思是你想要一个rel属性值为“next”的,你也可以这样做:

b.element(:css => 'link[rel="next"]').html
#=> <link href="http://mydomain.com/Digital_Cameras--~all/sec_~product_list/sb_~1/pp_~2" rel="next" />
b.element(:css=>'link[rel=“next”]').html
#=> 
您可以使用css定位器(或xpath)获取链接元素

下面将返回rel属性值为“canonical”的link元素的html(即行):

b.element(:css=>'link[rel=“canonical”]').html
#=> 
我不知道你所说的“我还需要下一个(不是空的)”是什么意思。如果你的意思是你想要一个rel属性值为“next”的,你也可以这样做:

b.element(:css => 'link[rel="next"]').html
#=> <link href="http://mydomain.com/Digital_Cameras--~all/sec_~product_list/sb_~1/pp_~2" rel="next" />
b.element(:css=>'link[rel=“next”]').html
#=> 

orde:谢谢你的想法。出于某种原因,
b.html。每行
返回每个符号,而不是每行。我做错了什么?所以你的整个表达式返回整个html文件。earlyadopter:不确定为什么它对你不起作用。我尝试了一下,得到了预期的结果。我将更新我的答案,并包含一个替代的Nokogiri-基于(可能更好)solution.orde:谢谢你的想法。出于某种原因,
b.html。每行
返回每个符号,而不是每行。我做错了什么?所以你的整个表达式返回整个html文件。EarlyDopter:不确定为什么它对你不起作用。我尝试了一下,得到了预期的结果。我将更新我的答案,并包含一个替代的Nokogi基于ri(可能更好)解决方案。+1用于使用CSS选择器获取元素和使用Watir的html方法获取html。请注意,默认情况下,Ruby Selenium WebDriver绑定中的元素对象上找不到html方法。@bLoad,虽然您对Selenium WebDriver的看法似乎是正确的,但我不确定这如何适用于此问题。只要watir-webdriver有一个获取html的方法,这不是所有的watir webdriver用户都会关心的吗?包含这些信息很有帮助,因为并非所有的webdriver Ruby用户都使用watir框架(我就是其中之一!)。然而,仅仅因为一个问题是基于Watir的问题,并不意味着主要使用基于Ruby的SWD绑定的用户会跳过这个问题。我已经多次查看基于Watir的问题,以帮助解决我想要解决的问题。我想我并不孤单。此外,这只是一个补充传统注释,这与我编辑响应以包含该信息不同。+1用于使用CSS选择器获取元素,以及使用Watir的html方法获取html。请注意,默认情况下,在Ruby Selenium WebDriver绑定中的元素对象上找不到html方法。@bLoad,虽然您对Selenium WebDriver的看法似乎是正确的,但我我不确定这对这个问题有何影响。只要watir webdriver有一个获取html的方法,这难道不是所有watir webdriver用户都会关心的吗?包含这些信息很有帮助,因为并非所有webdriver Ruby用户都使用watir框架(我就是其中之一!)。然而,仅仅因为一个问题是基于Watir的问题,并不意味着主要使用基于Ruby的SWD绑定的用户会跳过这个问题。我已经多次查看基于Watir的问题,以帮助解决我想要解决的问题。我想我并不孤单。此外,这只是一个补充传统的评论,它不像我编辑的回应,包括该信息。