1

我需要自动提取产品目录,我们是授权经销商。这家公司是 Ingram Micro,规模很大,但他们没有提供简单的方法(如 Web 服务)来查询他们的目录和库存,所以到目前为止,我们每天都在使用 LWP::UserAgent 提取它,用于我们的在线商店数据库。

最近,他们更改了他们的网站,我无法检测到阻止我的 Perl 脚本成功登录的东西。如果我直接在浏览器上尝试,我会成功登录,但如果我尝试从 Perl 提交表单,我会再次获得登录页面(就像登录不成功)。

他们的网站是在 AspNet 上制作的,并且充满了 ASP 生成的隐藏表单字段。起初,我正在做自己的“蜘蛛”来获取登录页面,读取所有隐藏字段值并将它们与用户名和密码一起包含在我的 POST 登录请求中,但现在,在这个问题之后,我开始使用 WWW: :Mechanize 执行请求并正确自动执行该任务。

但是,不是 WWW::Mechanize 或 LWP::UserAgent 能够成功登录。

我什至尝试查看浏览器和服务器之间的确切 HTTP 对话,并在我的自动请求中包含相同的确切标头以及正确的 POST 内容,甚至这样做我从 Perl 登录不成功,从 Perl 登录成功浏览器。

我真的很绝望,我无法检测到问题,如果没有此目录更新,我们将无法运行商店。

您可以在此处查看登录页面:https ://www.imstores.com/ingrammicromx/

请,如果有人有类似问题的经验,或者有人可以查看该页面并检测浏览器与 WWW::Mechanize 请求不同的原因,请告诉我。

谢谢你。

4

1 回答 1

5

通常我用这种方式来测试有什么问题:

  1. 清除浏览器中的所有 cookie
  2. 禁用 Javascript
  3. 打开登录页面
  4. 尝试登录

如果您成功登录,则无需额外技巧即可使用 WWW::Mechanize 进行此操作,只是不要忘记button => "submit_button_name"像这样使用:

$mech->submit_form(
    with_fields => {
        login_field_field => $login,
        password_field_name => $password,
    },
    button => "submit_button_name",
);

即使您无法从禁用 Javascript 的浏览器登录,您仍然可以使用 Mechanize 执行此操作,但您需要查看浏览器的 HTTP 请求(我为此使用 HTTPFox)并从 Mechanize 发出完全相同的请求(包括标头)。

于 2013-04-01T13:37:38.030 回答