2011-01-03 13 views
0

私は毎週記入しなければならない複数ページの「フォーム」を記入するスクリプトを作成しようとしています(実際には失業フォーム)。チェックボックスと2つのラジオボタンは、すべてJavascriptで構築されています。 Mechanizeを使ってこのページに移動すると、3つのコントロールがなくてもhtmlが返ってくるので、私はそのプロセスの中でさらに遠くに行くことはできません。Ruby MechanizeがJavascriptの組み込みページを正しく返していない

これはよくある問題ですか?
フォームに記入してpage = agent.submit(form, form.buttons.first)と呼んでいますが、それらのコントロールが構築されていない状態で戻ってきます。

答えて

2

Mechanizeは、JavaScriptインタプリタではなくHTMLパーサーです。それがHTMLにない場合は、何もできません。 「適切な」ブラウザが必要です。 (「適切」とは、少なくともHTMLを解析し、JavaScriptを実行し、CSSを解釈することができるものを意味します) Firefox、Internet Explorer、…)、この使用例のための完全にスクリプト化可能なGUIレスブラウザを構築する努力がなされています。

注:失業保険機関は、差別禁止法(特に政府機関の場合)に違反している可能性があるので、JavaScriptを使用しないこれはa)短期的な解決策ではなく、b)あなたの弁護士のためのトピックであり、StackOverflowではありません。

0

Windowsの場合はWatir、Mac/Linuxの場合はFirewater、Macの場合はsafariwatirを使用してください。すべては基本的に同じコードであり、同じサイトにあります。

ウェブサイトをテストする方がより重視されますが、xpathを使用してページのコンテンツにアクセスすることができます。うまくいけば、ブラウザはあなたのためにJavaScriptを処理し、それを返すでしょう。いくつかのブラウザでは、ソース表示でJSレンダリングされたHTMLが表示され、他のブラウザでは表示されないので、どのような結果が得られるかはわかりません。

1

生成されたフォームの値は予測可能ですか?私は、多くの場合、すべての個々のフォームヘルパーをバイパスして、ちょうど直接フォームに投稿することが便利見つける:他の回答で述べたように

browser = Mechanize.new 
browser.post(some_url, { field1 => val1, field2 => val2, ... }) 
0

、あなたはそこにあるとして、実際のWebブラウザを駆動するものを使用する必要があります現在のところ、ライブラリを解析することはできませんそのレベルはです(javascriptのリダイレクトに続くものもありますが、それはかなりです)。これは理想的であり、維持しやすい。

メカニカルアプローチを本当にしたいのであれば、ポストフィールドを手動で追加するだけで済みます。

自動投稿を回避するためにcaptchaを使用する場合は、簡単なdecaptchaサービス(2000クレジットは10ドルで十分です)に頼る必要があります。

最後に、この問題をすべて解決しないと賢明なことがあります。

関連する問題