私は機械化でログインが必要なページに接続しています。それは正面ページ上のいくつかのJavaScriptを使用して機械化をまっすぐに難しくしています。私はログインするためにどのようなフォームを提出しなければならないかを知っています。毎回同じようにjsによって常に生成されるものです。ページにないカスタムフォームを送信するだけで機械化するにはどうすればよいですか?基本的にthis perl problemと同等ですが、Pythonではpython mechanize - カスタムフォームを送信
2
A
答えて
5
(注:これは、最近再び上がってきた私は実際にそれが今で動作するようになった)
これは動作するようです:
br.open(URL)
res = mechanize._form.ParseString(FORM_HTML, BASE_URL)
br.form = res[1]
#continue as if the form was on the page and selected with .select_form()
br['username'] = 'foo'
br['password'] = 'bar'
br.submit()
URL
は、訪問したサイトの完全なURLです。 BASE_URL
はURLが入っているディレクトリです。FORM_HTML
二つの形式を返しますmechanize._form.ParseString
何らかの理由により、form
要素を持っている任意のHTML、例えば:
<form method='post' action='/login.aspx'>
<input type='text' name='username'>
<input type='text' name='password'>
<input type='hidden' name='important_js_thing' value='processed_with_python TM'>
</form>
です。最初は、入力なしでベースURLへのGET
要求です。 2番目は、適切に解析された形式FORM_HTML
です。
0
ページを解析して、必要な要素を抽出し、ページを改訂して機械化に戻します。
私が取り組んだプロジェクトでは、シミュレートされたブラウザを使用しなければならず、Mechanizeがフォーム処理に非常に貧弱であることがわかりました。 Javascriptのブロックから解釈されない要素をヤンクして死ぬだろう。私は、それがフォームパーサーに到達する前に死ぬ原因となるすべてのビットを取り除くためにBeautifulSoupを使用した回避策を書く必要がありました。
あなたはその問題に遭遇するかもしれないし、そうでないかもしれないが、心に留めておくべきことだ。私は最終的にMechanizeアプローチを放棄して終了し、Seleniumと一緒に行きました。フォームハンドラははるかに優れており、JSを処理することができます。それは問題を抱えています(ブラウザには複雑さが加わります)が、作業がはるかに簡単です。
関連する問題
- 1. Mechanize(Python)でフォームを送信
- 2. Python Mechanizeモジュールの暗号化
- 3. PYTHON Mechanizeログインフォームクラス
- 4. Outlookカスタムフォーム - イベント送信時にメッセージを編集する
- 5. python mechanize:フォームを作成して提出する
- 6. Ruby Mechanizeの送信ボタンが正しく動作しない
- 7. Pythonでhttpヘッダーを送信
- 8. Python Mechanize選択フォームFormNotFoundError
- 9. WWW :: Mechanizeを使ってHTMLにないフォームを送信するには?
- 10. 投稿の送信リクエストpython
- 11. Python on Heroku - バックグラウンドワーカーに送信
- 12. Pythonの機械化でHtmlフォームを送信する際の問題
- 13. Pythonで非ASCII POSTリクエストを送信しますか?
- 14. PythonからJavascript(JSON)にデータを送信
- 15. python urllib2 file問題を送信する
- 16. pythonスクリプトでstdinをサブプロセスに送信
- 17. appengine + pythonからツイートを送信する
- 18. Pythonでメール送信プログラムを書く
- 19. PythonでHtmlファイルを送信する
- 20. ftpでファイルを送信するpythonテスト
- 21. メールをPython経由で送信
- 22. PythonのZeroMQで生のバイトを送信
- 23. Python 2.3でSSLでメールを送信
- 24. python-cgiからAJAXにデータを送信
- 25. Python/MechanizeでECONNRESETから回復する
- 26. Python Mechanize select_form() - ParseError:SELECTの外側のOPTION
- 27. mechanize for Python 2.7のインストール方法は?
- 28. Mechanize 2.0のクッキー
- 29. Pythonを使用して機械化してフォームデータを送信し、認証する
- 30. Wordpressカスタムフォーム
私はできればあなたに+100を与えるだろう。これはどうやって分かりましたか? Web上の他の誰もこれを思いついた人はいません。多くの人がこの解決策なしであきらめてしまいました。 –
@mh ..:ハハ、それを聞いてうれしい!私は束を機械化して使用したので、私はちょうどソースコードを掘り下げて、たくさんのものを試して、やっとそれを動作させたと思います... – Claudiu