perl - 使用 WWW::Mechanize 重定向登录网站

标签 perl authentication web-scraping www-mechanize webautomation

我知道这听起来像是一个已经在论坛上问过的问题,但我相信我这里的情况略有不同..

我尝试使用 Perl 登录到需要身份验证的网站。我已经意识到完成此任务最方便的工具是使用 WWW::Mechanize 模块,在该模块中填写和提交表格非常容易。

就我而言,我遇到了以下困难:

  1. 似乎没有与我要填写的字段相关的“表格”。相反,这些字段被包裹在一个表中 <table></table> .
  2. 按钮本身似乎启动了一些我知道 Mechanize 模块不支持的 javascript。然而,为了测试这个页面的行为,我在我的 Chrome 浏览器中禁用了 javascript,但我仍然能够点击按钮并登录到该网站。所以我认为 javascript 在这里不是必须的。
  3. 我使用以下代码,似乎输入的详细信息(用户/密码)无关紧要,出于某种原因,我总是遵循“成功”场景并收到“登录成功!”:

    my $mech = WWW::Mechanize->new(
     cookie_jar      => {},
     autocheck       => 1,
     onerror         => \&Carp::croak,);
    
    # Login Form
    my $response = $mech->get($url);
    if (!$response->is_success) {
        die "Login page unreachable $url: ",  $response->status_line, "\n";
    }
    
    $mech->field('Email', $Email);
    $mech->field('Password', $Password);
    $response = $mech->click();
    if ($response->is_success) {
        print "Login Successful!\n";
    } else {
        die "Login failed: ",  $response->status_line, "\n";
    }
    

因此,脚本的运行似乎是成功的,但是当我假设我已经登录并尝试从站点获取任何数据时,我看到(在嗅探器中)我被不断转发到“注册”页面。

非常感谢任何帮助!

提前致谢!

最佳答案

如果它不在表单标记中,那么某处有一个提交按钮,它使用 GET 请求将所有变量发送到相同(最有可能)的 URL。

您为什么要尝试使用浏览器模拟单击身份验证按钮,是否有其他隐藏字段或您需要访问的内容?

在我看来,最好的方法是找出实际验证用户和密码的页面,然后对该页面使用 SSL POST 请求。

如果页面有这样的东西:

<input type="text" name="user" />
<input type="password" name="pass" />

通过 HTTP POST 请求发送登录页面(如果未定义

则可能是同一页面)。 POST 变量将为 user=$value 和 pass=$other_value。

关于perl - 使用 WWW::Mechanize 重定向登录网站,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8657285/

相关文章:

java - android 如何处理url中的空格

objective-c - 通过提升的助手和 SMJobBless 获得根访问权限

python - Scrapy 蜘蛛获取链接内的信息

python - Perl 到 Python 正则表达式需要帮助

r - Rstudio 中的源 .bashrc

linux - 无法在@INC 中找到 DBI.pm 无法解析

Apache 基本身份验证(允许的除外)

python - 为什么使用了 "selenium",页面却下不去?

r - 从具有多个元素和包含 URL 的行的数据框中下载文件

Perl:通过配置文件传递两个参数