所以我试着用Jaunt登录到一个网页。首先要提到的是,网页是.aspx,提交按钮有一个选项onclick="javascript:WebForm_DoP...",据我所知,Jaunt不支持Javascript,对吗?如果我错了,我正在使用的代码是Jaunt示例中的代码:
Form form = userAgent.doc.getForm(0);
form.setTextField("Login1$UserName","USER");
form.setPassword("Login1$Password","PASSWORD");
form.setCheckBox("Login1$RememberMe",false);
form.submit("GO");
System.out.println(userAgent.getLocation());所有的名称和值都是正确的,用户和密码工作,因为我可以登录使用网络浏览器。在执行代码之后,在输出中我得到以下内容:
消息: UserAgent.sendPOST;连接错误requestUrl:http://webpagehere.com/default.aspx发布requestUrl响应:无
表格div是这样一个:
<form name="form1" method="post" action="Default.aspx" onsubmit="javascript:return WebForm_OnSubmit();" id="form1" style="text-align:center">我有什么问题吗?如果case不允许我做这个登录,有人能推荐给我一个图书馆进行网络抓取和交互吗?谢谢!
发布于 2015-07-01 06:45:03
看来你被困住了。实际上,.aspx页面使用AJAX分页。您必须提取__VIEWSTATE、__VIEWSTATEGENERATOR和所有其他表单值的值,然后在请求正文中使用POST方法发送它们。您可以使用费德勒获取包含所有这些隐藏变量和表单条目的请求体。
在Java中,您可以使用Selenium或HTMLUnit (它们是Java无浏览器,支持JavaScript )再次运行网页。
编辑:你也可以使用Jaunt,我刚刚试用了它,你所做的只是发送一个随请求一起发送的请求-body,你可以很容易地用Fiddler检查它,而且它工作!!
HTTP POST中的表单值以与查询字符串相同的格式在请求正文中发送。您可以通过使用Fiddler检查链接的请求正文,然后从Textview复制请求正文并将编码的数据作为请求正文发送。
UserAgent userAgent = new UserAgent();
userAgent.sendPOST("<your link to form page>","<request body>");https://stackoverflow.com/questions/30922192
复制相似问题