Fra*_*ozo 1 asp.net-mvc perl web-crawler www-mechanize lwp-useragent
我需要自动提取产品目录,我们是授权经销商.该公司是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请求的不同之处,请告诉我.
谢谢.
通常我用这种方式测试出错了什么:
如果你有成功登录,你可以使用WWW :: Mechanize,而不需要额外的技巧,不要忘了这样使用button => "submit_button_name":
$mech->submit_form(
with_fields => {
login_field_field => $login,
password_field_name => $password,
},
button => "submit_button_name",
);
Run Code Online (Sandbox Code Playgroud)
即使您无法在禁用Javascript的情况下从浏览器登录,您仍然可以使用Mechanize执行此操作,但您需要查看浏览器的HTTP请求(我使用HTTPFox)并从Mechanize 发出完全相同的请求(包括标题).