我需要自动提取产品目录,我们是授权经销商。该公司是Ingram Micro,它们很庞大,但是他们没有提供一种简单的方法(比如Web服务)来查询他们的目录和库存,所以我们一直用LWP :: UserAgent提取它到目前为止,每天,我们的在线商店数据库。
最近,他们改变了他们的网站,有些东西我无法检测到阻止我的Perl脚本成功登录。如果我直接尝试浏览器,我会成功登录,但如果我尝试从Perl提交表单,我会再次获取登录页面(如登录失败)。
他们的网站是在AspNet上制作的,并且包含ASP生成的隐藏表单字段。起初,我正在做自己的'蜘蛛'来获取登录页面,读取所有隐藏的字段值并将其包含在我的POST登录请求中以及用户名和密码,但现在,在此问题之后,我开始使用WWW: :机械化以执行请求并使该任务自动正确。
但是,WWW :: Mechanize或LWP :: UserAgent无法成功登录。
我甚至尝试查看浏览器和服务器之间的确切HTTP对话,并在我的自动请求中使用正确的POST内容包含相同的标题,甚至这样做我从Perl获得了不成功的登录从浏览器成功登录。
我真的很绝望,我无法检测到问题,如果没有此目录更新,我们无法运行商店。
您可以在此处查看登录页面:https://www.imstores.com/ingrammicromx/
如果有人有类似问题的经验,或者有人可以查看该页面并检测浏览器与WWW :: Mechanize请求的不同之处,请告知我们。
谢谢。
答案 0 :(得分:5)
通常我用这种方式测试错误:
如果您已成功登录,而无需使用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的/ strong>(包括标题)。