ウェブサイトへのログインとフォームの送信を自動化しようとしています。
HTTP GET および POST リクエストを、後で再生できる形式で記録できるブラウザ プラグイン (Firefox または Chrome 用) はありますか? curl や wget などのスクリプトから自動化できるものを探しています。
Chrome 開発者ツールを使用して POST フォーム データをキャプチャしようとしましたが、wget でリクエストを複製しようとするとエラーが発生し、Cookie やその他のパラメータが不足していることがわかりました。試行錯誤を何度も繰り返すのではなく、これを自動化できる優れた方法があれば理想的です。
ベストアンサー1
単純なやり取りの場合、リクエストを記録して再生する Selenium のようなツールは実際には必要ありません。
必要なのはすでに述べたツールだけです:
- Chrome には必要な開発者ツールがすでに付属しています。ネットワーク タブを使用してください。プラグインをダウンロードする必要はありません。Safari が動作するかどうかはわかりません。Safari の開発者ツールには「ネットワーク」タブがありません。
curl
とはどちらもwget
Cookie と POST データをサポートしていますが、自動化には curl のみを試しました。
適切に実行する必要がある重要な手順がいくつかあります (これにはある程度の経験が必要です)。
- 要求されるページのシーケンスは、実際のユーザー インタラクションをモデル化する必要があります。バックエンドがフォームや認証をどのように処理するかは正確にはわからないため、これは重要です。ここで、Chrome のデベロッパー ツールの [ネットワーク] タブが役立ちます (ログのクリアを防ぐ [記録] ボタンがあることに注意してください)。分析のために実際のユーザー インタラクションをログに記録する準備をするときは、各セッションの開始時に Cookie をクリアすることを忘れないでください。
- クッキーとリダイレクトが適切に処理されるようにするには
curl
、の適切なオプションをすべて使用する必要があります。wget
- すべてのPOSTフォームフィールドは送信する必要がある可能性が高いです(多くの場合、フィールドはナンス値で保護されます)。CSRF
これは私が書いた3つのcurl呼び出しのサンプルです。自動化スクリプト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
およびsleep
は必須ではない可能性があります (バックエンドがチェックしない可能性があります) が、これらは十分に単純なので--user-agent
、--referer
エラーの可能性を最小限に抑えるために含めています。
この例では、動的な POST フィールド (CSRF 対策 nonce フィールドなど) がなかったのは幸運でした。動的な POST フィールドを抽出して後続のリクエストに渡す必要はありませんでした。これは、この自動化が認証用であるためです。他の種類の Web インタラクションを自動化する場合は、ユーザーがログインした後、これらの動的に生成されるフィールドがさらに多く発生する可能性があります。