2011-07-27 9 views
3

フォームにデータを入力してから、結果をa site using framesにスクラップしようとしています。私はMechanize(ruby gem)を使ってフォームにデータを入力していますが、これは問題ありません。問題はMechanize treats frames as linksであり、フレームを「読み込み」、そこに含まれるフォームを「参照」するには、フレームを「クリック」し、別のHTMLページのようにページを読み込む必要があります。フレームを使用したサイトのフォームとスクレイピングの自動化(Mechanizeを使用)

このサイトでは、認証、検索フォーム、および結果に別々のフレームを使用しているため、フレームをクリックしてフォームに入力してからフレームを取得し、クリックするとフレームが表示されます。元のURLを読み込んで戻ろうとすると、前のフレームで行ったことが緩んでしまいます。

すべてのコンテンツをクリックしなくても読み込むアプリがあれば、それは完璧です。私はまだ1つを発見していない。

Rubyや、フレームを読み込むMechanize(とnokogiriで動作する)と同じ機能を実行するアプリを使って、これを行う方法はありますか?

答えて

0

Mechaniseはセッションをいくつかサポートしていますが、ログインページをクリックするとウェブサイトにはログインしないでください。back()に電話して検索ページに移動しますか?

フォームが過去に私を不満に思ったとき、私はしばしばLiveHTTPHeaders(または同様のプラグイン)を使用してログインして検索するときに実行されているPOSTを検出してから、ページ自体。

私は認証でうまくいくかどうかはよくわかりません。

+0

ベン、ご返信ありがとうございます。私は[Firewatir](http://wiki.openqa.org/display/WTR/FireWatir+Installation)を使ってFirefoxブラウザを自動化し、そのID構文を使ってフレーム内のフレームと要素を特定しました。 b.frame(:name、 "frame")。 – Andrew

0

私は、Mechanizeがフレームにアクセスできないという問題に私の解決策を掲示し、特定のサイトでは逆戻りしたときに認証を解除するため、フレームに戻ることができると考えました。 call back()を使用する彼の解決策はおそらくほとんどのサイトで機能しますが、その間に別のルートをとることになりました。

Firewatirを使用して、Firefoxブラウザからフォームにデータを渡しました。フレーム内の要素にアクセスするためのコードは次のようになります。あなたはこのような状況では、フレームに移動する必要はありませんので

b.frame(:name, "frame_name").field_type(:name, "field_name").action 

、あなたは認証解除したり再ロード依存フレームを心配する必要はありません前後にナビゲートしています。 Mechanizeは便利なツールですが、条件が上記のようなフレームで作業する場合、Firewatirがより良い選択肢であることがわかりました。

関連する問題