cari

Rumah  >  Soal Jawab  >  teks badan

POST meminta untuk mengekstrak GUID daripada tapak web .aspx menggunakan Mechanize

Terdapat tapak web bernama https://www.guidgenerator.com/online-guid-generator.aspx yang menjana pengecam unik di peringkat global. Saya cuba menggunakan Perl's Mechanize untuk menerbitkan ke tapak web untuk mengekstrak panduan. Saya sedar ini berasaskan javascript tetapi tertanya-tanya sama ada saya boleh membuat siaran yang betul untuk menarik nombor. Saya mengesannya dari pelayar dan mendapat semua tajuk dalam permintaan, tetapi html yang dikembalikan tidak mengandungi panduan.

Ini adalah hasil larian yang berjaya:

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

Ini skrip saya:

<textarea name="txtResults" rows="2" cols="20" id="txtResults" style="font-family:Courier New,Courier,monospace;font-size:Larger;font-weight:bold; Tinggi: 152px; Lebar: 421px;

Ini adalah borang dalam halaman: Dalam skrip saya, saya membuang borang dan medan input yang diperlukan berikut:

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

Hasilnya

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

Ini adalah siaran

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',
     },
);

Apabila saya menjejak di tapak web, saya mendapat pengepala, tetapi terdapat tab lain yang dipanggil "Muatan Muatan". Ini mengandungi kebanyakan medan yang disenaraikan di atas. Saya cuba memasukkan medan ke dalam POST tetapi tidak pasti sama ada saya perlu melakukan ini secara berbeza atau tidak mengapa kerana ia adalah javascript?

Saya tahu ini adalah banyak maklumat. Saya tidak pasti mekanisasi Perl boleh mengeluarkan maklumat ini. Sebarang bantuan amatlah dihargai. Sila beritahu saya sebarang data lain yang anda ingin saya siarkan di sini.

P粉564192131P粉564192131234 hari yang lalu533

membalas semua(1)saya akan balas

  • P粉714890053

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

    Anda boleh menggunakan fungsi terbina dalam Mech untuk melakukan ini. Tidak perlu menyerahkan sebarang medan atau tajuk tambahan.

    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');
    

    Ini akan mengeluarkan yang berikut:

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

    Kunci di sini ialah anda tidak boleh menggunakan $mech- >submit 因为这不会提交提交按钮的值。这有点烦人。因此,您必须使用 $mech->click, yang berpura-pura bahawa butang hantar lalai borang lalai diklik dan oleh itu nilai juga diserahkan. Beginilah cara butang berfungsi pada borang, dalam kes ini bahagian belakang menyemak nilai untuk melihat yang mana satu telah diklik.

    Anda kemudian boleh menggunakan $mech->value$mech->value 获取字段值。您可能想要 split untuk mendapatkan nilai medan. Anda mungkin mahu memisahkan untuk memprosesnya dengan lebih lanjut.

    JavaScript dalam halaman ini sebenarnya tiada kaitan langsung dengan fungsi. Apa yang dilakukannya ialah menyimpan dan memulihkan tetapan yang anda pilih dalam kuki supaya apabila anda kembali, kotak pilihan yang sama akan ditandakan. Ini baik, tetapi mungkin lebih baik menggunakan storan tempatan pada bahagian hadapan buat masa ini. Walau bagaimanapun, anda tidak perlu berurusan dengan JS sama sekali untuk mengikis halaman ini. Fungsi utama ialah bahagian belakang.


    Anda juga mungkin berminat dengan $mech->dump_forms, bantuan penyahpepijatan yang hebat yang mencetak semua borang dengan medan dan nilai. Satu lagi bantuan penyahpepijatan yang hebat apabila menggunakan Mech (atau mana-mana kelas berasaskan LWP) ialah LWP::ConsoleLogger::Everywhere. Inilah yang saya gunakan untuk membandingkan permintaan program dengan permintaan penyemak imbas untuk mencari medan borang butang yang hilang.

    Penafian: Saya adalah penyelenggara WWW::Mechanize dan saya menulis LWP::ConsoleLogger::Di mana-mana sahaja.

    balas
    0
  • Batalbalas