我正在开发一个项目,我需要在JSOUP中废弃数据并在我的网页中显示为HTML,并且点击查看更多我转发到报废的网址,问题是GET网址工作正常但是POST请求aspx没有工作,因为它期望一些 __ EVENTVALIDATION 等,...作为表单输入。
该网页为kepler.sos.ca.gov,如果您点击公司名称然后输入ESCROW,然后提交,将会出现一些结果,我可以在JSOUP中进行,但无法使用javascript:__doPostBack('ctl00$content_placeholder_body$SearchResults1$GridView_SearchResults_Corp','DetailCorp$0').
重定向
请建议。
答案 0 :(得分:1)
JSoup不是浏览器。它不解释JavaScript,您无法通过JavaScript链接触发POST请求。
然而,JSoup非常有能力做POST请求。要在此处使用JSoup,您需要弄清楚JavaScript是如何构建实际请求的。然后,您可以运行用Java编码的相同算法并创建链接并执行POST请求。
实现您想要的更简单的方法可能是技术转换。例如,您可以使用selenium,这样可以实现远程控制"一个真正的浏览器,运行该页面的JavaScript应该没有问题。
答案 1 :(得分:1)
这里有一个答案:unable to get results from jsoup while giving post request
`Connection.Response response = Jsoup.connect(url) 。方法(Connection.Method.GET) .execute();
Document responseDocument = response.parse();
Map<String, String> loginCookies = response.cookies();
Element eventValidation = responseDocument.select("input[name=__EVENTVALIDATION]").first();
String validationKey = eventValidation.attr("value");
Element viewState = responseDocument.select("input[name=__VIEWSTATE]").first();
String viewStateKey = viewState.attr("value");
response = Jsoup.connect(url)
.cookies(loginCookies)
.data("__EVENTTARGET", "")
.data("__EVENTARGUMENT", "")
.data("__LASTFOCUS", "")
.data("__VIEWSTATE", viewStateKey)
.data("__VIEWSTATEENCRYPTED", "")
.data("__EVENTVALIDATION", validationKey)
.data("ctl00$content_placeholder_body$BusinessSearch1$TextBox_NameSearch", "aaa") // <- search
.data("ctl00$content_placeholder_body$BusinessSearch1$RadioButtonList_SearchType", "Corporation Name")
.data("ctl00$content_placeholder_body$BusinessSearch1$Button_Search", "Search")
.method(Connection.Method.POST)
.followRedirects(true)
.execute();
Document document = response.parse(); //search results
System.out.println(document);`