如何使用Jsoup登录页面

3

经过几个小时的搜索,我仍然不太清楚如何在登录后访问HTML页面。查看这里的各种其他帖子以及Jsoup API,我了解到访问登录后的页面将需要像这样的代码:

    Connection.Response loginForm = Jsoup.connect("https://parentviewer.pisd.edu/")
            .method(Connection.Method.GET)
            .execute();

    Document document = Jsoup.connect("https://parentviewer.pisd.edu/")
            .data("username", "testUser")
            .data("password", "testPass")
            .data("LoginButton", "Login")
            .cookies(loginForm.cookies())
            .post();

不过,我认为我的理解可能有些偏差,因为我仍然不太明确每个值应该填写什么。

例如,在网站上,我会使用input name="ctl00$ContentPlaceHolder1$portalLogin$UserName"作为键,"testUser"作为值吗?

我处理这个任务的方法正确吗? 非常感谢您的帮助。


我认为你不能概括登录机制。每个网站之间的登录机制变化非常大。然而,大多数网站都会向您呈现输入表单并使用会话cookie。 - gerrytan
1个回答

6

是的,这段代码看起来和你的代码一样。

Connection.Response loginForm = Jsoup.connect("https://parentviewer.pisd.edu/")
        .method(Connection.Method.GET)
        .execute();

Document document = Jsoup.connect("https://parentviewer.pisd.edu/")
        .data("ctl00$ContentPlaceHolder1$portalLogin$UserName", "testUser")
        .data("ctl00$ContentPlaceHolder1$portalLogin$Password", "testPass")
        .cookies(loginForm.cookies())
        .post();

System.out.println(document.body().html());

如何使它生效?最好的方法是在浏览器中启用Web Developer Console,然后登录此页面。之后,检查从浏览器发送到服务器的内容,并使用JSoup发送此数据。
在您的示例请求数据中,其格式如下:
Request URL:https://parentviewer.pisd.edu/
Request Method:POST
Status Code:200 OK

FormData:
__LASTFOCUS:
__EVENTTARGET:
__EVENTARGUMENT:
__VIEWSTATE:/wEPDwULLTEwNjY5NzA4NTBkZMM/uYdqyffE27bFnREF10B/RqD4
__SCROLLPOSITIONX:0
__SCROLLPOSITIONY:106
__EVENTVALIDATION:/wEdAASCW34hepkNwIXSnvGxEUTlqcZt0XO7QUOibAd3ocrpayqHxD2e5zCnWBj9+m7TCi0S+C76MEjhL0ie/PsBbOp+Shjkt2W533uAqvBQcWZNXoh672M=
ctl00$ContentPlaceHolder1$portalLogin$UserName:testUser@gmail.com
ctl00$ContentPlaceHolder1$portalLogin$Password:testPass
ctl00$ContentPlaceHolder1$portalLogin$LoginButton:Login

并非所有数据都是必需的,请尝试使用最少的请求并检查是否有效。


1
这太棒了。我在互联网上找不到这个。非常感谢! - nsane
1
非常棒的答案。loginForm.cookies() 对我不起作用,所以我在Chrome cookies中查找,找到了添加的那个cookie,并手动添加到.cookies中。谢谢! - Eran Ben-Natan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接