3

サイトにログインした後にのみアクセスできる株式取引 Web サイトがあります。ログイン後、抽出しようとしている株価があります。その番号はすぐには入手できず、会社のデータベースから更新されるため、読み込みに時間がかかります。

数値を抽出してプログラムで使用できるようにするスクリプトを Ruby で作成しようとしています。

firebug では、タグは次のようになりますが、番号が読み込まれた後でのみです。

<span id="ContentPlaceHolderTodaysStock">10,747</span>

hpricot や nokogiri などのライブラリを調査し、次のようなコードを試しました。

require "nokogiri"
require "open-uri"
doc = Nokogiri::HTML(open("website.com/stocks"))
puts doc.xpath("//span/text()")

私が遭遇する問題は、1) "website.com/stocks" ではなく、ログイン ページ "website.com" からのみ html を読み取ることです。 JavaScriptがロードされましたか?

私もWatirを試したので、問題#1を乗り越えることができましたが、次のようなことをしても問題#2は元のhtmlソースを提供するため、役に立ちません...

require 'net/http'
source = Net::HTTP.get("website.com/stocks", '/')

この問題を解決するための助けをいただければ幸いです。ありがとうございました!

4

2 に答える 2

2

Watir を使用してログインできるので、ページからテキストを取得するために使用することもできます。Watir には、非同期コンポーネントがロードされるのを待機するためのメソッドが組み込まれています。 http://watirwebdriver.com/waiting/を参照してください。

テキストを取得するには、次のようなものが必要です。

puts browser.span(:id => 'element_id').when_present.text
于 2013-03-12T19:28:00.473 に答える
0

事後ロードの場合、ノコギリには見えません。Watir のようなものを使用する必要があります。


ログインを通過したら、javascript がロードされた後に html コードを使用するにはどうすればよいですか?

ノコギリではたどり着けません。追加された HTML は、OpenURI を介してベース HTML が与えられているため、ノコギリの世界には存在しません。Nokogiri は JavaScript を実行しません。

一方、Watir はそのすべてを行うことができるため、それを選択するしかありません。ログインページをナビゲートし、ストックページをリクエストし、ループして、テキストが表示されるまで待ってから、それを取得して、それで好きなことをする方法を理解する必要があります.

于 2013-03-12T19:08:23.393 に答える