Mechanize Perl-通过表单登录Amazon失败

Mechanize Perl-通过表单登录Amazon失败,perl,login,amazon,mechanize,Perl,Login,Amazon,Mechanize,我有一个奇怪的问题——几天前,我无法使用Perl中的Mechanize登录Amazon。我的目标是自动检索我的订单历史记录 这是我的代码(sniplet),几天前就开始工作了: my $url = URI->new( 'http://www.amazon.com/gp/css/order-history/' ); ############ LOGIN ############ # Create browser instance my $browser = WWW::Mechanize-&

我有一个奇怪的问题——几天前,我无法使用Perl中的Mechanize登录Amazon。我的目标是自动检索我的订单历史记录

这是我的代码(sniplet),几天前就开始工作了:

my $url = URI->new( 'http://www.amazon.com/gp/css/order-history/' );

############ LOGIN ############
# Create browser instance
my $browser = WWW::Mechanize->new(  stack_depth => 25,
                                agent => 'Mac Safari',
                                autocheck   => 0   # Turn off autocheck, check manually
                                );
$browser->conn_cache(LWP::ConnCache->new);                          

# Connect to the login page
my $response = $browser->get( $url );
# Get the login form - based on the current design.
$browser->form_name( 'signIn' );

# Enter the login credentials.
$browser->field( email => $myEmail );
$browser->field( password => $myPassword );
$browser->tick("rememberMe", "true");

my $retry = 1; # just once
RETRY: { 
    while ($retry > 0) {
        $browser->submit();

        #check if login successful:
        if ($browser->content() =~ m/Your Orders/) {
            print OUT "LOGIN: Login was successful - proceeding...<br>\n";
            last RETRY;
        }
        else {
            $browser->save_content( $errlog );
            $retry--;
        }
    }
    print OUT "LOGIN: Login was unsuccessful - please check parameters and " . $errlog . "<br><br> </body> </html>\n";
    die("Login was unsuccessful - please check parameters and $errlog\n");
}
my$url=URI->new('http://www.amazon.com/gp/css/order-history/' );
############登录############
#创建浏览器实例
my$browser=WWW::Mechanize->new(堆栈深度=>25,
代理=>“Mac Safari”,
自动检查=>0#关闭自动检查,手动检查
);
$browser->conn_缓存(LWP::ConnCache->new);
#连接到登录页面
my$response=$browser->get($url);
#获取登录表单-基于当前设计。
$browser->form_name('signIn');
#输入登录凭据。
$browser->field(email=>$myEmail);
$browser->field(密码=>$myPassword);
$browser->tick(“rememberMe”、“true”);
我的$retry=1;#就一次
重试:{
而($retry>0){
$browser->submit();
#检查登录是否成功:
如果($browser->content()=~m/您的订单/){
打印“登录:登录成功-正在进行…
\n”; 最后一次重试; } 否则{ $browser->save_内容($errlog); $retry--; } } 打印“登录:登录失败-请检查参数和“$errlog”。

\n”; die(“登录失败-请检查参数和$errlog\n”); }
现在执行脚本时,我会看到一个错误页面:

有个问题 您的电子邮件或密码不正确。请再试一次


但由于我没有更改任何东西(用户名或密码),其他东西不起作用-直到上周它才起作用。有什么想法吗?

我可以想象,亚马逊已经采取了专门的措施来阻止您的尝试:允许自动登录是一个巨大的安全问题。我怀疑是否有人能够帮助您,您最好的办法可能是将您的程序发送的消息与真实浏览器发送的消息进行比较,看看您是否可以更精确地模拟它。另一种方法是改用,它驱动一个真正的Firefox浏览器,应该可以消除大部分问题。我可以想象,亚马逊已经采取措施专门防止您尝试这样做:允许自动登录是一个巨大的安全问题。我怀疑是否有人能够帮助您,您最好的办法可能是将您的程序发送的消息与真实浏览器发送的消息进行比较,看看您是否可以更精确地模拟它。另一种方法是使用它,它驱动一个真正的Firefox浏览器,应该可以消除大部分问题