2

RUBY を使用して、gridview を使用してデータを表示する Web ページ (asp.net で作成) をスクラップにしています。グリッドのページ 1 に表示されているデータを正常に読み取ることができますが、グリッドの次のページに移動してすべてのデータを読み取る方法がわかりません。

問題は、ページ番号のハイパーリンクが通常のハイパーリンク (URL 付き) ではなく、同じページへのポストバックを引き起こす JavaScript ハイパーリンクであることです..

ハイパーリンクの例:-

<a href="javascript:__doPostBack('gvw_offices','Page$6')" style="color:Black;">6</a>
4

4 に答える 4

2

処理に既に ruby​​ を使用している場合は、ブラウザー テスト用に設計された ruby​​ ライブラリである Watir を使用することをお勧めします。1 つには、ページ上の DOM 要素へのより優れたインターフェイスが提供され、次のようなリンクをクリックしやすくなります。

ie.link(:text, '6').click

もちろん、テーブルをナビゲートするためのより簡単な方法もあります。このプロセスを自動化するのは簡単です:

1..total_number_of_pages.each do |next_page|

  ie.link(:text, next_page).click
  # table processing goes here

end

あなたのユースケースはわかりませんが、このアプローチには長所と短所があります。1 つには、実際にブラウザー インスタンスを実行するため、完全に自動化された方法でバックグラウンドで頻繁に静かに実行する必要がある場合、これは最善の方法ではない可能性があります。一方、ブラウザー インスタンスを起動しても問題ない場合は、ポストバックのナンセンスについて心配する必要はなく、ユーザーであるかのようにリンクをクリックするだけで済みます。

説明: http://wtr.rubyforge.org/

于 2009-03-25T17:07:46.643 に答える
2

実際の URL を把握する必要があります。

オプション 1a: 開発者のサポートが充実しているブラウザー (Web 開発ツールを備えた firefox など) でページを開き、ソースを調べて_doPostBackが定義されている場所を見つけます。構築している URL を特定します。メインページのソースではなく、ページがロードするものに含まれている可能性があることに注意してください。

オプション 1b: 同上、ただし ruby​​ に任せる。Net:HTTP を使用してページを取得している場合は、__doPostBackすでに定義を見つけるためのツールがあります (文字列としての本体、Ruby の grep、スクリプト タグなどの追加ファイルを要求する機能)。

オプション 2: ブラウザーとページの間のトラフィックを監視して (ログ プロキシなどを使用)、URL を確認します。

オプション 3: Web ページの所有者に問い合わせます。

オプション 4: 推測します。これは思ったほど悪くはないかもしれませんが (たとえば、元の URL が "...?page=1" などで終わっている場合)、一般的にこれが機能する可能性は最も低くなります。

編集(他の質問に対するあなたのコメントに応じて):

Net:HTTP ライブラリを使用していると仮定すると、 yourgetをに置き換えるだけでポストバックを実行できます。postmy_http.post(my_url)my_http.get(my_url)

編集(danieltalskyの回答に応じて):

watirはあなたにとって本当に良い解決策かもしれません (私はそれを考えていなかったので自責の念を抱いています) が、あなたが望むものを得るために手動でイベントを起動したり、他のフープを通過したりする必要があるかもしれないことに注意してください. 特定の問題として、このような非同期フェッチでは、スクレイピングする前に完全な応答が返されたことを確認する必要があります。自分でリクエストをインラインで実行している場合、それは問題ではありません。

于 2009-03-25T17:02:13.987 に答える
1

ポストバックを実行する必要があります。データはフォーム POST でサーバーに戻されます。Markus が言ったように、FireBug や IE 8 の Developer Tools やフィドラーなどを使用してトラフィックを監視します。しかし正直なところ、これは肥大化した GridView を使用した Web フォームであり、楽しい冒険が待っています。;)

于 2009-03-25T17:09:56.653 に答える
0

javascriptの実行が実行しているHTTPリクエストを把握するには、調査を行う必要があります。私は、Firebugプラグインと「LiveHTTPヘッダー」プラグインを備えたMozillaブラウザーを使用して、何が起こっているのかを判断しました。次のページに移動するためにどのリクエストを行う必要があるかが明らかになる可能性があります。設定されるCookieに注意を払うようにしてください。

Mechanizeをスクレイピングに使用して本当に良い成功を収めました。これは、HTTP通信、htmlの解析と検索(Nokogiriを使用)、リダイレクト、およびCookieの保持のすべてをラップします。ただし、Javascriptの実行方法がわからないため、自分で実行するhttpリクエストを把握する必要があります。

于 2009-03-25T18:47:40.380 に答える