2

WWW::Mechanizeまたは任意の Perl モジュールで、Web サイトにアクセスした後にファイルを読み取る方法はありますか。たとえば、「受信」ボタンをクリックすると、メッセージを含むファイル (.txt) が表示されます。どうすれば内容が読めるようになりますか? 回答は非常に高く評価されています..私はこれに何日も取り組んできました.また、私はすべての可能性を試しました. 誰でも助けることができますか?アイデアを教えてください。:)

ここに私のコードの一部があります:

...

my $username = "admin";<br>
my $password = "12345";<br>

my $url = "http://...do_gsm_sms.cgi";

my $mech = WWW::Mechanize->new(autocheck => 1, quiet => 0, agent_alias =>$login_agent, cookie_jar => $cookie_jar);

$mech->credentials($username, $password);<br>
$mech->get($url);

$mech->success() or die "Can't fetch the Requested page";<br>

print "OK! \n"; #This works <br> 

$mech->form_number(1);

$mech->click()

;

この後、[ダウンロード] ダイアログ ボックスが表示されるので、ファイルを保存できます (ただし、保存する代わりにすぐに開くようにデフォルトを設定することもできます)。質問は、このファイルの内容をどのように読み取ることができるかです。

..

4

6 に答える 6

4

つまり、Webサイトは、保存したい非HTML応答(たとえば、「テキスト/プレーン」ファイル)を返すことによってフォーム送信に応答します。

私はあなたが欲しいと信じています$mech->save_content( $filename )

追加した:

結果の(テキスト)ファイルを保存する前に、まずWWW:Mechのフォーム送信を送信する必要があります。clickボタンをクリックするためのものですが、$mech->submit()またはを使用してフォームを送信します$mech->submit_form( ... )

#!/usr/bin/perl

use strict;
use warnings;

use WWW::Mechanize;

my $username = "admin";
my $password = "12345";
my $login_agent = 'WWW::Mechanize login-agent';
my $cookie_jar;

#my $url = "http://localhost/cgi-bin/form_mech.pl";
my $url = "http://localhost/form_mech.html";

my $mech = WWW::Mechanize->new(autocheck => 1, quiet => 0, 
               agent_alias => $login_agent, cookie_jar => $cookie_jar
           );

$mech->credentials($username, $password);
$mech->get($url);

$mech->success() or die "Can't fetch the Requested page";

print "OK! \n"; #This works

$mech->submit_form(
   form_number => 1,
);
die "Submit failed" unless $mech->success;

$mech->save_content('out.txt');
于 2010-02-15T02:45:44.877 に答える
2

クリック後(想定どおりの動作をしていると仮定)、返されたデータは$mechオブジェクトに保存されます。でファイルデータを取得できるはずです$mech->content()。おそらく、で成功を確認し、$mech->status()で応答のタイプを確認した後$mech->content_type()です。

WWW::Mechanizeがブラウザに取って代わることを覚えておくと役立つ場合があります。ダウンロードウィンドウを表示してファイルを保存するなど、ブラウザが実行したことは実際には発生しませんが、ブラウザが持っていたすべての情報には、WWW::Mechanizeのメソッドを介してアクセスできます。

于 2010-02-15T02:44:56.860 に答える
1

私はこれをLWPで常に行っていますが、Mechでも同様に可能であると確信しています。

あなたが間違っているかもしれないところは、ボタンがクリックされたときにボタンがブラウザに送信されるページからコンテンツを実際に要求したいときに、Mechを使用してボタンが付いているページを要求することだと思います。

あなたがする必要があるのは、ダウンロードを開始するボタンでページのhtmlソースを確認し、ボタンに関連付けられたアクションが何であるかを確認することです。ほとんどの場合、GETを実行するためのいくつかの非表示フィールドまたはURLを含むPOSTになります。

クリックのターゲットURLには、ボタンが付いているページのURLではなく、実際に取得したいものが含まれています。

于 2010-02-15T22:33:48.130 に答える
1

あえてお願いします...これを試しましたか?

my $content = $mech->content();
于 2010-02-15T02:45:37.523 に答える
1

このような問題の場合、ブラウザが処理する一連のイベント全体を調査する必要があることがよくあります。HTTP スニファ ツールを使用して、ブラウザがファイル file に到達するまでのすべての動作を確認します。その後、Mech でも同じことを行う必要があります。

于 2010-02-26T02:00:59.543 に答える
1

ブラウザ内でファイルを表示しているかのように、ファイルを ([ダウンロード] ウィンドウではなく) 開きます。数行のコードで後で保存できます。

インストール済みの場合HTML::TreeBuilder:

my $textFile = $mech->content(format => "text");

開いた結果のウィンドウのテキストを取得する必要があります。

次にファイルハンドルを開き、結果を書き込みます:

open my $fileHandle, ">", "results.txt";
print $fileHandle $textFile;
close $fileHandle;
于 2010-02-15T06:17:14.430 に答える