我最近对webcrawlers感兴趣并决定尝试Jsoup。我不确定如何使用它登录网站。我看到了另外一篇关于它的SO文章,但却无法拼凑出如何做到这一点。
我一直在尝试浏览网站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();
但无论我在做什么,它都没有登录网站,只是带我去登录页面。
答案 0 :(得分:4)
登录由ajax处理。我使用的是铬,所以这就是我所做的。
尝试从浏览器通过表单登录。按F12,然后按控制台。
您会看到类似XHR finished loading: POST "https://www.tickld.com/ajax/login.php".
的内容。当您发出POST请求时,可以将其设置为action
标记的form
参数中的网址。
在这种情况下,不存在这样的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();
如果它没有,那么你可能需要使用一些无头浏览器(可以处理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();