我最近对网络爬虫很感兴趣,并决定尝试 Jsoup。不过,我不太确定如何使用它登录网站。我看到了另一篇关于它的帖子,但无法拼凑出如何做到这一点。
我一直在尝试爬行网站 www.tickld.com,登录网站是“https://www.tickld.com/signin ”。
我不确定我是否正确使用了 Jsoup(我确定这是主要原因),错误是否是 .jks,或者我是否输入了错误的信息,但我不知道真正了解如何测试代码的哪一部分失败。
System.setProperty("javax.net.ssl.trustStore", "filePath\\keystore.jks");
Connection.Response loginForm = Jsoup.connect("https://www.tickld.com/signin")
.method(Connection.Method.GET).execute();
Document document = Jsoup.connect("https://www.tickld.com/signing")
.data("l_username", "myUsername")
.data("l_password", "myPassword")
.cookies(loginForm.cookies())
.post();
但无论我在做什么,它都不会登录该网站,它只会将我带到登录页面。
最佳答案
登录是由ajax处理的。我使用的是 chrome,所以这就是我所做的。
尝试从浏览器通过表单登录。按 F12,然后按控制台。
您将看到类似 XHR 完成加载:POST "https://www.tickld.com/ajax/login.php".
的内容。当您发出 POST 请求时,您将其发送到放置在 form
标记的 action
参数中的 URL。
在本例中,不存在这样的 url,因为它是由 javascript 处理的。
尝试一下,看看是否有效。
Document document = Jsoup.connect("https://www.tickld.com/ajax/login.php")
.data("l_username", "myUsername")
.data("l_password", "myPassword")
.cookies(loginForm.cookies())
.post();
如果没有,那么您可能需要使用一些 headless 浏览器(可以处理 js 执行),例如 selenium webdriver。
更新
Connection.Response login = Jsoup.connect("https://www.tickld.com/signin")
.data("l_username", "myUsername")
.data("l_password", "myPassword")
.method(Connection.Method.POST)
.execute();
Document document = Jsoup.connect("http://www.tickld.com/user/chosimbaaaa")
.cookies(login.cookies())
.get();
关于java - 如何使用Jsoup登录HTTPS网站?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30268309/