使用Jsoup获取页面后,如何自动触发onload事件或提交隐藏表单?
关于Jsoup触发onload事件或提交隐藏表单的问题
先看你提供的HTML代码:
<html> <head> <title>No Login </title> </head> <body onload="document.forms['login'].submit()"> <div> <center> <form name="login" method="post" action=""> <input hidden="hidden" type="submit" value=""/> </form> </center> </div> </body> </html>
直接给你结论:Jsoup本身没办法触发onload事件里的JavaScript代码,也不会自动帮你提交表单——因为Jsoup本质是个HTML解析工具,不是浏览器,它不具备执行JS或模拟DOM事件的能力。
不过别担心,我们可以手动模拟表单提交的HTTP请求来达到同样的效果,毕竟表单提交的本质就是发送一个符合要求的HTTP请求。具体步骤如下:
- 第一步:从解析后的HTML里提取表单的关键信息:
- 表单的请求方法:这里是
post - 表单的提交地址:
action属性为空,意味着要提交到你获取这个页面的原URL
- 表单的请求方法:这里是
- 第二步:用Jsoup的
ConnectionAPI构造并发送POST请求,模拟表单提交
给你写个具体的代码示例:
// 假设你已经通过Jsoup获取到了页面的Document对象 Document doc = Jsoup.connect("原页面URL").get(); // 定位到目标表单 Element loginForm = doc.selectFirst("form[name=login]"); if (loginForm != null) { // 确定提交的目标URL,action为空则用原页面URL String submitUrl = loginForm.attr("action").isEmpty() ? "原页面URL" : loginForm.attr("action"); // 发送POST请求模拟表单提交 Connection.Response submitResponse = Jsoup.connect(submitUrl) .method(Connection.Method.POST) // 如果表单有其他隐藏参数,这里可以用.data()添加,这个例子里不需要 .execute(); // 可以解析提交后的响应页面 Document resultDoc = submitResponse.parse(); // 接下来就可以处理resultDoc里的内容了 }
补充一句:你的这个表单里只有一个隐藏的submit按钮,没有其他需要传递的参数,所以直接发送POST请求到目标URL就足够模拟提交行为了。如果之后遇到带其他输入字段的表单,只需要用.data("字段名", "字段值")把参数加进去就行。
内容的提问来源于stack exchange,提问作者hublo
相关产品推荐
相关产品推荐

