ホームページ  >  に質問  >  本文

Mechanize を使用して .aspx Web サイトから GUID を抽出する POST リクエスト

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 の機械化がこの情報を抽出できるかどうかさえわかりません。ご協力をいただければ幸いです。他にここに掲載してほしいデータがあればお知らせください。

P粉564192131P粉564192131182日前445

全員に返信(1)返信します

  • P粉714890053

    P粉7148900532024-04-03 09:56:29

    これを行うには、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 を作成しました。

    返事
    0
  • キャンセル返事