0

所以我正在尝试使用 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());

所有名称和值都是正确的,并且用户和密码有效,因为我可以使用 Web 浏览器登录。执行代码后,在输出中我得到以下信息:

消息:UserAgent.sendPOST;Connection error requestUrl: http://webpagehere.com/default.aspx [posting __VIEWSTATE=%2FwEPDwUJLTk5MDc0NjQ2ZBgBBR5fX0NvbnRyb2xzUmVxdWlyZVBvc3RCYWNrS2V5X18WAgURTG9naW4xJFJlbWVtYmVyTWUFF0xvZ2luMSRMb2dpbkltYWdlQnV0dG9upWcarODJIwpeMt8HCmfaBn6iMWI%3D&__VIEWSTATEGENERATOR=CA0B0334&Login1%24UserName=USER&Login1%24Password=PASSWORD&Login1%24LoginButton=GO] response: [none]

表格 div 是这样的:

<form name="form1" method="post" action="Default.aspx" onsubmit="javascript:return WebForm_OnSubmit();" id="form1" style="text-align:center">

有什么想法可能是我的问题吗?如果 Jaunt 不允许我进行此登录,有人可以向我推荐一个用于网络抓取和交互的库吗?谢谢!

4

1 回答 1

0

好像你被卡住了。实际上 .aspx 页面使用 AJAX 分页。您必须提取 __VIEWSTATE、__VIEWSTATEGENERATOR 和所有其他表单值的值,然后在请求正文中使用 POST 方法发送它们。您可以使用Fiddler获取包含所有这些隐藏变量和表单条目的请求正文。

在 Java 中,您可以使用 Selenium 或 HTMLUnit,它们是 Java 无 GUI 浏览器,支持 JavaScript,来运行网页。

编辑:您也可以使用 Jaunt-api,我只是用它尝试过,您所做的只是发送一个 POST 请求以及请求正文,您可以使用 Fiddler 轻松检查它,它可以工作!

HTTP POST 中的表单值在请求正文中发送,格式与查询字符串相同。您可以通过使用 Fiddler 检查链接的请求正文,然后从 Textview 复制请求正文并将编码数据作为请求正文发送。

UserAgent userAgent = new UserAgent();
userAgent.sendPOST("<your link to form page>","<request body>");
于 2015-07-01T06:45:03.543 回答