输入值如何工作?
How does input value work?
网页中有输入标签。当我检查它时:
<input type="text" onmouseover="this.select();" readonly="" value="<embed src="https://imgcache.qq.com/tencentvideo_v1/playerv3/TPout.swf?max_age=86400&v=20161117&vid=d0380tpvuqx&auto=0" allowFullScreen="true" quality="high" width="480" height="400" align="middle" allowScriptAccess="always" type="application/x-shockwave-flash"></embed>">
但是当我查看它的页面来源时:
<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}">]>
您无法单独使用 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']
网页中有输入标签。当我检查它时:
<input type="text" onmouseover="this.select();" readonly="" value="<embed src="https://imgcache.qq.com/tencentvideo_v1/playerv3/TPout.swf?max_age=86400&v=20161117&vid=d0380tpvuqx&auto=0" allowFullScreen="true" quality="high" width="480" height="400" align="middle" allowScriptAccess="always" type="application/x-shockwave-flash"></embed>">
但是当我查看它的页面来源时:
<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}">]>
您无法单独使用 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']