0

約 5 か月前に stackoverflow.com であなたが尋ねた質問を読みました。より正確には、次のとおりです。 WWW::Mechanize を使用して Amazon サイトのフォームをナビゲートする

サイトにアクセスして資格情報を入力し、最終的にサイトのソース コードを保存して情報を解析できるようにするスクリプトを作成しています。

問題があります。私のスクリプトは、.pl スクリプトとして、または Eclipse で使用すると、まったく問題なく動作します。しかし、一度 .exe にパッケージ化すると機能しません。それは私のサイトの種類に関連していることに気付きました。より正確には、資格情報を必要とするサイトは機能する実行可能ファイルにパッケージ化できません。ひょっとして、何が問題なのか想像できますか?

どうもありがとうございます!

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

#!/usr/local/bin/perl

use Spreadsheet::WriteExcel;
use WWW::Mechanize;

use Win32::Registry;
use LWP::Protocol::https;
use LWP;
use HTTP::Cookies;
use HTTP::Server::Simple;
use Net::HTTP;
use Pod::Usage;
use HTTP::Status;
use HTML::Form;
use Bundle::WWW::Mechanize::Shell;

# kills cmd prompt when .exe used on win32
BEGIN {
  if ($^O eq 'MSWin32') {
    require Win32::Console;
    Win32::Console::Free( );
  }
}

# Create a new instance of Mechanize
my $bot = WWW::Mechanize->new();

$bot->agent_alias( 'Windows Mozilla' );


# Connect to the login page
my $response = $bot->get('https://siteWithCredentials.com/' );
die "GET failed url" unless $response->is_success;

# Get the login form. You might need to change the number.
$bot->form_number(3);

# Enter the login credentials.
$bot->field( username => 'a username' );
$bot->field( password => 'a password' );
$response = $bot->click();

$bot->get('http://sitewithCredentials/directoryIamParsing.html' );
my $content = $bot->content();

my $outfile = "out.txt";
open(OUTFILE, ">$outfile");
print OUTFILE  $content;
close(OUTFILE);

open(FILE,$outfile);
my @releasesAU;
my @releasesAU3G;


while (<FILE>) {
    chomp;
    my $lineDATA = $_;
        if(index($lineDATA, "HN+_US_AU3G") != -1){

            if( $lineDATA =~ /">([_+\w]*)<\/a>/){
                print $1, "\n";
                push(@releasesAU3G,$1);
            }
        }

        if(index($lineDATA, "HN+R_US_AU") != -1){

            if( $lineDATA =~ /">([_+\w]*)<\/a>/){
                print $1, "\n";
                push(@releasesAU,$1);
            }
        }   
}
close(FILE);

my $row = 0;
my $col=0;
my $workbook = Spreadsheet::WriteExcel->new("test.xls");
my $worksheet = $workbook->add_worksheet();
$worksheet->write($row,  $col, "Releases HN+R_US_AU3G");
$worksheet->write($row,  $col+1, "Releases HN+R_US_AU3G");
$row=2;

foreach my $SOP (@releasesAU){
    $worksheet->write($row,   $col, $SOP);
    $row = $row+1;
}
$row =2;

foreach my $SOP (@releasesAU3G){
    $worksheet->write($row,   $col+1, $SOP);
    $row = $row+1;
}   

$workbook->close();
4

1 に答える 1

0

提案:
1) エラーが報告されるのは「require」行ですか?
Windows exe にコンパイルすることがわかっているので、テスト MSWin32 は冗長です。テストを削除し、「require」を「use」ステートメントに変換して、それが役立つかどうかを確認します。
2) エラー メッセージがあれば質問を更新してください。
3) PERL 101 - 厳密と警告を使用します。
4) open、print、close など、失敗する可能性のあるステートメントの結果をチェックするコードを追加します。
5) ファイル内容の書き込みは本当に必要ですか? <FILE> を $content の分割に置き換えます
。 6) 型グロブ (FILE、OUTFILE など) は推奨されません。パッケージ FileHandle を試してください。

于 2012-10-19T04:44:40.680 に答える