2011-02-25 8 views
35

私はウェブサイトへのログインとフォームの提出を自動化しようとしています。httpフォームの投稿をブラウザで記録する

HTTP GETおよびPOSTリクエストを後で再生できる形式で記録できるブラウザプラグイン(FirefoxまたはChrome用)がありますか?私はスクリプトから自動化することが可能なものを探しています。カールまたはwgetを介して。

Chromeデベロッパーツールを使用してPOSTフォームデータを取得しようとしましたが、クッキーやその他のパラメータが不足していることを示すwgetでリクエストを複製しようとするとエラーが発生します。理想的には、多くの試行錯誤を繰り返すのではなく、これを行うための素晴らしい自動化された方法があります。

答えて

5

まったくブラウザプラグインではありませんが、FiddlerはすべてのHTTPデータを前後にキャプチャできます。 FiddlerScriptまたはFiddlerCoreとすると、exportがテキストファイルに変換され、cURLに要求ヘッダーと要求本文として渡されます。

0

Safariの開発ツールとFirebugで十分です。

22

単純なやりとりのために、Seleniumのような、記録や再生要求をするツールは本当に必要ありません。

は、あなただけが、すでに言及したツールが必要:[ネットワーク]タブを使用します。

  1. Chromeはすでに必要な開発ツールが付属しています。ダウンロードするプラグインはありません。 Safariが動作するかどうかは分かりません。開発ツールに「ネットワーク」タブが表示されません。
  2. curlwgetはクッキーとPOSTデータをサポートしていますが、私は自動化のためにカールを試みました。

(これはいくつかの経験をとる)適切に行われる必要があるいくつかの重要なステップがあります:

  1. 実際のユーザーとの対話をモデル化する必要性を要求されたページのシーケンス。これは、バックエンドがフォームまたは認証をどのように処理するかを正確に把握していないため、重要です。これはChromeのデベロッパーツールの[ネットワーク]タブが表示される場所です(ログが消去されないようにする「記録」ボタンがあります)。分析のために実際のユーザー操作を記録する準備ができたら、各セッションの始めにクッキーをクリアしてください。
  2. curlwgetという適切なオプションを使用すると、Cookieとリダイレクトが正しく処理されます。
  3. すべてのPOSTフォームフィールドは、おそらくあなたは、多くの場合、ここでは3カールのサンプルは私がダウンロードして書いたautomation scriptのために書いたことを呼び出しますCSRF

を防ぐために、一回だけの値を持つフィールドが表示されます(送信する必要があります。私のISPからのブロードバンド利用状況:

curl \ 
    --silent \ 
    --location \ 
    --user-agent "$USER_AGENT" \ 
    --cookie-jar "$COOKIES_PATH.txt" \ 
    'https://idp.optusnet.com.au/idp/optus/Authn/Service?spEntityID=https%3A%2F%2Fwww.optuszoo.com.au%2Fshibboleth&j_principal_type=ISP' >$USAGE_PATH-1.html 2>&1 && sleep 3 && 

# --location because the previous request returns with a series of redirects "302 Moved Temporarily" or "302 Found" 
curl \ 
    --silent \ 
    --location \ 
    --user-agent "$USER_AGENT" \ 
    --cookie "$COOKIES_PATH.txt" \ 
    --cookie-jar "$COOKIES_PATH.txt" \ 
    --referer 'https://idp.optusnet.com.au/idp/optus/Authn/Service?spEntityID=https%3A%2F%2Fwww.optuszoo.com.au%2Fshibboleth&j_principal_type=ISP' \ 
    --data "spEntityID=https://www.optuszoo.com.au/shibboleth&j_principal_type=ISP&j_username=$OPTUS_USERNAME&j_password=$OPTUS_PASSWORD&j_security_check=true" \ 
    'https://idp.optusnet.com.au/idp/optus/Authn/Service' >$USAGE_PATH-2.html 2>&1 && sleep 1 && 

curl \ 
    --silent \ 
    --location \ 
    --user-agent "$USER_AGENT" \ 
    --cookie "$COOKIES_PATH.txt" \ 
    --cookie-jar "$COOKIES_PATH.txt" \ 
    --referer 'https://www.optuszoo.com.au/' \ 
    'https://www.optuszoo.com.au//r/ffmu' >$USAGE_PATH-3.html 2>/dev/null 

--cookie-jar--cookie、および--locationの慎重な使用に注意してください。sleeps、--user-agent、および--refererは必要ない場合があります(バックエンドではチェックされない場合があります)が、エラーの可能性を最小限に抑えるためにそれらを含めるほど簡単です。

この例では、動的なPOSTフィールドがないことが幸運でした。反CSRFナンスの分野で、私は抽出して、後続の要求に渡す必要がありました。この自動化は認証用であるためです。他のタイプのWebインタラクションを自動化するには、ユーザーが既にログインした後に、これらの動的生成フィールドの多くを実行する可能性があります。

+8

これはかなり古いと思いますが、私のようにGoogleから来た場合、ChromeはネットワークタブのXHRリクエストを右クリックして「cURLとしてコピー」を選択すると完全なものをコピーしますあなたのクリップボードへのリクエスト。 :) –

+1

@SSHhisあなたは私の人生を保存しました!最高の答えを!ありがとうございました:) – Cyborg

2

あなたが選ぶ方法が多すぎます。

  1. Firefoxとselenium IDEを使用してください。あなたのブラウザの動作を記録することができます

  2. ユーザーセレンウェブドライバ。 RubyやJavaで記述したスクリプトを使って、異なるブラウザアクションをシミュレートすることができます。

  3. Firefox用のマクロプラグインを使用して、絶対クリックとキー入力をシミュレートします。

  4. は、実際のフォームポストまたはクッキーinterationsをシミュレートするために(例えば、PHPのような)スクリプトを書く3

  5. と同じOSレベルマクロアプリケーションを使用して行います。

No.1が一般的で使いやすいです。 No.4は強力ですが、自動化を磨く時間が必要です。
No.3はNo.4とNo.1の中間にあります。 No.2は、環境テストとストレステストのツールでもあります。 No.5は最も柔軟でリソースを節約しているようです。

3

Firefox Firebugには、ウェブリクエストをカールリクエストとしてコピーできる機能が既に用意されているので、コマンドラインでリクエストのさまざまな要素をすべて見ることができます。

Firebugをオンにして、Netパネルでリクエストを右クリックし、[cURLとしてコピー]を選択します。そして、POSTをキャプチャすることを確認するFirebugオプションを永続をオンにし、Firefoxのでcurl https://hacks.mozilla.org/2013/08/firebug-1-12-new-features/#copyAsCURL

+3

Google Chromeデバッガにも "cURLとしてコピー"があります - すばらしい:) – nealmcb

4

でそれを使用しています。その後、"Bookmark POST"アドオンをインストールして使用し、POSTリクエストを後で使用するようブックマークします。