【问题标题】:How to call Javascript __doPostBack from JSOUP如何从 JSOUP 调用 Javascript __doPostBack
【发布时间】:2014-02-18 23:14:10
【问题描述】:

我有一个为特定链接调用 __doPostBack 的网站。我尝试加载链接加载的页面,但手动输入 POST 数据并手动设置 __EVENTTARGET 和 __EVENTARGUMENT,但我一直收到错误页面。如果有人使用过 JSOUP 库并找到解决此问题的方法,请让我知道。以下是使用 POST 数据调用网站的代码:

Connection.Response res = Jsoup.connect("https://parentaccess.ocps.net/Progress/ProgressSummary.aspx?T=2").data(target.substring(0,target.length()-5)+"txtClass_DBID",dBID).data("__LASTFOCUS","").data("__EVENTVALIDATION", eventValidation).data("__VIEWSTATE", viewState).cookie("ASP.NET_SessionId", cookie).data("__EVENTTARGET",target).data("DropDownListGradingPeriod","3").data("__EVENTARGUMENT","").header("Content-Type","text/html; charset=utf-8").header("Connection", "keep-alive").header("Cache-Control", "private").method(Method.POST).execute();
                Document doc = res.parse();
                Document doc2 = Jsoup.connect("https://parentaccess.ocps.net/Progress/ProgressDetails.aspx").data(target.substring(0,target.length()-5)+"txtClass_DBID",dBID).data("__LASTFOCUS","").data("__EVENTVALIDATION", eventValidation).data("__VIEWSTATE", viewState).cookie("ASP.NET_SessionId", cookie).data("__EVENTTARGET",target).data("DropDownListGradingPeriod","3").data("__EVENTARGUMENT","").header("Content-Type","text/html; charset=utf-8").header("Connection", "keep-alive").header("Cache-Control", "private").get();

请注意,我已经使用 POST 数据尝试了 Connection.Response 和 JSOUP.connect,但一直收到 doc2 的错误(res 将加载页面,但不能传递信息,因为没有生成表给定的 POST 数据)。谢谢!

【问题讨论】:

  • 运气好能解决这个问题吗?
  • 不幸的是我无法解决这个问题,我尝试了一切但没有成功

标签: java javascript android jsoup


【解决方案1】:

使用 HTMLUNIT 处理 javascript。

【讨论】:

  • 看起来很有希望!我会尽快尝试并告诉你情况如何:)
  • 嘿,我在 Android 上尝试了这个库,但没有成功。它不会让项目正确编译。
  • @user1064249,HtmlUnit 不适用于 Android。相反,您可以找出 doPostBack() 请求的去向,然后自己进行模拟。
【解决方案2】:

花了几天后,我找到的唯一解决方案是 htmlunit。

这是工作代码:

HtmlPage page = webClient.getPage("PAGE_URL");
InputStream inputStream = 
page.getElementById({EL_ID}").click().getWebResponse().getContentAsStream();
OutputStream outputStream = new FileOutputStream(new File("FILE_NAME"));
IOUtils.copy(inputStream, outputStream);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-19
    • 2018-09-08
    • 2014-02-20
    • 1970-01-01
    • 2011-04-05
    • 2011-09-15
    相关资源
    最近更新 更多