POST-Anfrage zum Extrahieren der GUID von der ASPX-Website mithilfe von Mechanize
P粉564192131
P粉564192131 2024-04-02 12:43:40
0
1
539

Es gibt eine Website namens https://www.guidgenerator.com/online-guid-generator.aspx, die weltweit eindeutige Identifikatoren generiert. Ich versuche, Perls Mechanize zum Veröffentlichen auf einer Website zu verwenden, um den Leitfaden zu extrahieren. Mir ist klar, dass dies auf Javascript basiert, aber ich habe mich gefragt, ob ich den richtigen Beitrag verfassen könnte, um die Zahlen zu ermitteln. Ich habe es über den Browser verfolgt und alle Header in der Anfrage abgerufen, aber der zurückgegebene HTML-Code enthält nicht die GUID.

Das ist das Ergebnis eines erfolgreichen Laufs:

<textarea name="txtResults" rows="2" cols="20" id="txtResults" style="font-family:Courier New,Courier,monospace;font-size:Larger;font-weight:bold; Höhe: 152px; Breite: 421px; ">qk5DF22bhkm4C2AwZ5OcZw==</textarea>

Das ist mein Drehbuch:

<textarea name="txtResults" rows="2" cols="20" id="txtResults" style="font-family:Courier New,Courier,monospace;font-size:Larger;font-weight:bold; Höhe: 152px; Breite: 421px; "></textarea>

Dies ist das Formular auf der Seite:

In meinem Skript habe ich die folgenden erforderlichen Formular- und Eingabefelder abgelegt:

my @forms = $mech->forms;
foreach my $form (@forms) {
  my @inputfields = $form->param;
  print Dumper \@inputfields;
}

Ergebnisse

$VAR1 = [
          '__EVENTTARGET',
          '__EVENTARGUMENT',
          '__LASTFOCUS',
          '__VIEWSTATE',
          '__VIEWSTATEGENERATOR',
          '__EVENTVALIDATION',
          'txtCount',
          'chkUppercase',
          'chkBrackets',
          'chkHypens',
          'chkBase64',
          'chkRFC7515',
          'chkURL',
          'LocalTimestampValue',
          'btnGenerate',
          'txtResults'
        ];

Das ist der Beitrag

my $mainpage = "https://www.guidgenerator.com/online-guid-generator.aspx";
$mech->post( "$mainpage",
     fields      => {
       'txtCount' => "1",
       'chkBase64' => "on",
       'LocalTimestampValue' => "Date%28%29.getTime%28%29",
       'btnGenerate' => "Generate+some+GUIDs%21",
       'txtResults' => "",
       '__EVENTTARGET' => 'on',
       '__EVENTARGUMENT', => 'on',
       '__LASTFOCUS', => 'on',
       '__VIEWSTATEGENERATOR' => "247C709F",
       '__VIEWSTATE' => 'on',
       '__EVENTVALIDATION' => 'on',
       'chkUppercase' => 'off',
       'chkBrackets' => 'off',
       'chkHypens' => 'off',
       'chkRFC7515' => 'off',
       'chkURL' => 'off',
     },
);

Wenn ich die Website verfolge, erhalte ich die Header, aber es gibt eine weitere Registerkarte namens „Payload“. Dieses enthält die meisten der oben aufgeführten Felder. Ich habe versucht, die Felder in einen POST einzugeben, bin mir aber nicht sicher, ob ich das anders machen soll oder ob es keine Rolle spielt, da es Javascript ist?

Ich weiß, das sind viele Informationen. Ich bin nicht einmal sicher, ob Perls Mechanisierung diese Informationen extrahieren kann. Jede Hilfe wäre sehr dankbar. Bitte teilen Sie mir alle weiteren Daten mit, die ich hier veröffentlichen soll.

P粉564192131
P粉564192131

Antworte allen(1)
P粉714890053

您可以使用 Mech 的内置功能来执行此操作。无需提交任何额外的字段或标头。

use strict;
use warnings;
use feature 'say';

use WWW::Mechanize;

my $mech = WWW::Mechanize->new;
$mech->get('https://www.guidgenerator.com/online-guid-generator.aspx');
$mech->field( txtCount => 10 );
$mech->click;

say $mech->value('txtResults');

这将输出如下内容:

$ perl mech.pl                                  
211b3cad1665483ca303360bdbda0c61
ecc3348d83cb4bb5bdcb11c6148c5ae1
0a3f2fe5748946a1888a4a5bde8ef2e6
acb26deb9fda4411aa64638cdd1ec5f1
2afe609c355b4a10b6a0ae8c74d3aef1
30fd89ab170147cfb24f131346a203e3
2301d258e1d045aa8f0682f2ea14464c
f064507ca3e14a4eb860b0a30ba096ed
9a42b15d5c79420c921dcc07c306459b
5bea2e345f75453caaf795681963866a

这里的关键是你不能使用 $mech- >submit 因为这不会提交提交按钮的值。这有点烦人。因此,您必须使用 $mech->click,它假装单击了默认表单的默认提交按钮,因此也提交了该值。这就是按钮在表单上的工作方式,在本例中,后端检查值以查看单击了哪一个。

然后您可以使用 $mech->value 获取字段值。您可能想要 split 来进一步处理它。

该页面中的 JavaScript 实际上与功能完全无关。它所做的只是保存和恢复您在 cookie 中选择的设置,这样当您回来时,相同的复选框将被选中。这很好,但现在在前端使用本地存储可能会更好。然而,你根本不需要处理 JS 来抓取这个页面。主要功能是后端。


您可能还对 $mech->dump_forms,这是一个很好的调试辅助工具,可以打印出所有带有字段和值的表单。使用 Mech(或任何基于 LWP 的类)时另一个很好的调试辅助工具是 LWP::ConsoleLogger ::无处不在。这就是我用来将程序的请求与浏览器的请求进行比较以找到丢失的按钮表单字段的方法。

免责声明:我是 WWW::Mechanize 的维护者,我编写了 LWP::ConsoleLogger::Everywhere。

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage