2017-03-09 17 views
0

ウェブページに入力タグがあります。入力値はどのように機能しますか?

<input type="text" onmouseover="this.select();" readonly="" value="<embed src=&quot;https://imgcache.qq.com/tencentvideo_v1/playerv3/TPout.swf?max_age=86400&amp;v=20161117&amp;vid=d0380tpvuqx&amp;auto=0&quot; allowFullScreen=&quot;true&quot; quality=&quot;high&quot; width=&quot;480&quot; height=&quot;400&quot; align=&quot;middle&quot; allowScriptAccess=&quot;always&quot; type=&quot;application/x-shockwave-flash&quot;></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}">]> 
+1

'r-attr'属性の値に基づいて' value'を更新するjavascriptがあるようです。 'ノコギリ(Nokogiri) 'で得られた価値を得る方法はありません。 – mudasobwa

+0

あなたはそれを得ることができません。あなたはブラウザがそれを知っているので、ページのDOMを調べています。 Nokogiriはブラウザではなく、パーサであり、ブラウザの機能の一部に過ぎません。 Nokogiriが知っているのは、最初にHTMLを取得したときと同じように、HTMLが最初に検索されたときのようなものです。しかし、ブラウザはページ内に埋め込まれたすべてのスクリプトを実行し、CSSを処理して、変更されたページを表示します。ページを検査するときに表示されるものは、現在表示されているページであり、最初に受け取ったページではありません。 –

答えて

0

あなたは一人で鋸山で値を取得することはできません、あなたがロードされるツールを使用している場合しかし、あなたはそれを得ることができますあなたはHTMLを取得する前にjavascript。このようなツールの1つはSeleniumで、ブラウザを使用してページを最初にロードしています。

driver = Selenium::WebDriver.for :firefox 
driver.get("https://www.google.com") 

jsが終了したことを知るには、ページの変更を待つ必要があります。

driver.find_element(:css, '#some-id') 

それとも時間の設定anount待つ:javascriptのは、内容を変更した後

sleep(2) 

をあなたは、特定のCSSタグでいくつかの要素を待つことで出現していることを行うことができます

html_source = driver.page_source 
driver.quit 

は、その後、あなたがHTMLを解析するために鋸山を使用することができます。ページは、新しいHTMLソースを取得します

doc = Nokogiri::HTML(html_source) 
doc.at('input')['value'] 
関連する問題