https://www.guidgenerator.com/online-guid-generator.aspx という名前の Web サイトがあり、グローバルに一意の識別子を生成します。 Perl の Mechanize を使用して Web サイトに公開してガイドを抽出しようとしています。これが JavaScript ベースであることはわかっていますが、数値を取得するための適切な投稿を作成できるかどうか疑問に思っていました。ブラウザからそれをトレースし、リクエスト内のすべてのヘッダーを取得しましたが、返された HTML には guid が含まれていません。
これは実行が成功した結果です:
<textarea name="txtResults" rows="2"cols="20" id="txtResults" style="font-family:Courier New,Courier,monospace;font-size:Larger;font-weight:太字;高さ: 152px; 幅: 421px;">qk5DF22bhkm4C2AwZ5OcZw==</textarea>
これは私のスクリプトです:
<textarea name="txtResults" rows="2"cols="20" id="txtResults" style="font-family:Courier New,Courier,monospace;font-size:Larger;font-weight:太字;高さ: 152px; 幅: 421px;">></textarea>
これはページ内のフォームです:
私のスクリプトでは、次の必須フォームと入力フィールドをダンプしました:
リーリー ###結果### リーリーこれが投稿です
リーリーWeb サイト上でトレースするとヘッダーが取得されますが、「Payload」という別のタブがあります。これには、上記のフィールドのほとんどが含まれます。 POST にフィールドを入力しようとしましたが、これを別の方法で実行する必要があるのか、それとも JavaScript なので問題ないのかわかりません。
これは多くの情報であることは承知しています。 Perl の機械化がこの情報を抽出できるかどうかさえわかりません。ご協力をいただければ幸いです。他にここに掲載してほしいデータがあればお知らせください。
これを行うには、Mech の組み込み機能を使用できます。追加のフィールドやヘッダーを送信する必要はありません。
リーリーこれにより、次が出力されます:
リーリーここで重要なのは、
$mech- >submit
は、送信ボタンの値を送信しないため、使用できないことです。これは少し面倒です。したがって、$mech->click
を使用する必要があります。これは、デフォルト フォームのデフォルトの送信ボタンがクリックされたように見せかけ、値も送信されます。これはフォーム上でボタンがどのように機能するかです。この場合、バックエンドは値をチェックしてどれがクリックされたかを確認します。その後、
$mech->value
を使用してフィールド値を取得できます。split
を使用してさらに処理することもできます。このページの JavaScript は、実際には機能とはまったく関係ありません。選択した設定を Cookie に保存して復元し、戻ってきたときに同じチェックボックスがオンになるようにするだけです。これは問題ありませんが、現時点ではフロントエンドでローカル ストレージを使用する方が良いかもしれません。ただし、このページをスクレイピングするために JS を扱う必要はまったくありません。主な機能はバックエンドです。
$mech->dump_forms
にも興味があるかもしれません。これは、フィールドと値を含むすべてのフォームを出力する優れたデバッグ支援機能です。 Mech (または任意の LWP ベースのクラス) を使用する場合のもう 1 つの優れたデバッグ補助手段は、LWP::ConsoleLogger::Everywhere です。これは、プログラムのリクエストとブラウザのリクエストを比較して、不足しているボタン フォーム フィールドを見つけるために使用します。免責事項: 私は WWW::Mechanize のメンテナーであり、LWP::ConsoleLogger::Everywhere を作成しました。