网页中有一个输入标记。当我检查它时:
<input type="text" onmouseover="this.select();" readonly r-attr="{value:shareHtml}">
但当我查看其'页面来源:
时nokogiri
它是如何工作的?如何通过#<Nokogiri::XML::Element:0x3fcc71309c60 name="input" attributes=[#<Nokogiri::XML::Attr:0x3fcc71309be8 name="type" value="text">, #<Nokogiri::XML::Attr:0x3fcc71309bd4 name="onmouseover" value="this.select();">, #<Nokogiri::XML::Attr:0x3fcc71309bc0 name="readonly" value="readonly">, #<Nokogiri::XML::Attr:0x3fcc71309bac name="r-attr" value="{value:shareHtml}">]>
获取输入值,因为解析后的结果如下所示:
{{1}}
答案 0 :(得分:0)
您无法单独使用Nokogiri获得价值,但是如果您使用的工具在获取html之前加载了javascript,则可以获得该值。像这样的一个工具是Selenium,它使用浏览器首先加载页面。
driver = Selenium::WebDriver.for :firefox
driver.get("https://www.google.com")
您需要等待页面上的某些更改,才能知道js已经完成。 你可以通过等待某个带有某个css标签的元素来实现:
driver.find_element(:css, '#some-id')
或者只是等待一段时间:
sleep(2)
在javascript更改了页面内容后,您将获得新的html源代码:
html_source = driver.page_source
driver.quit
然后你可以使用Nokogiri来解析html:
doc = Nokogiri::HTML(html_source)
doc.at('input')['value']