输入值如何工作?

时间:2017-03-09 16:54:22

标签: html ruby nokogiri html-input

网页中有一个输入标记。当我检查它时:

<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}}

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']