我想使用Jsoup登录https网站,然后拨打3-4个服务来检查作业是否完成。
public class JSOUPTester {
public static void main(String[] args){
System.out.println("Inside the JSOUP testing method");
String url = "https://someloginpage.com";
try{
Document doc = Jsoup.connect(url).get();
String S = doc.getElementById("username").text();// LINE 1
String S1 = doc.getElementById("password").text();// LINE 2
}catch(Exception e){
e.printStackTrace();
}
}
}
例外:
java.lang.NullPointerException
JSOUPTester.main(JSOUPTester.java:7)
我已在Chrome中检查过这些网页包含ID为“username”和“password”的元素。 上面的行抛出NullPointerException。我在这里做错了什么?
答案 0 :(得分:2)
很多事情可能是造成这种情况的原因。没有URL,我无法确定,但这里有一些线索:
有些网页通过AJAX加载内容。 Jsoup可以解决这个问题,因为它不解释任何JavaScript。您可以通过使用curl下载页面或在关闭JavaScript的情况下在浏览器中检查这一点。要处理使用JavaScript呈现自己的页面,可以使用Selenium webdriver或HTMLUnit等工具。
您尝试加载的网页的网络服务器可能需要存在Cookie。您需要查看冲浪加载该页面时发生的网络流量。在chrome或firefox中,您可以在网络选项卡的开发人员工具中看到这一点。
对于不同的客户,网络服务器可能会有不同的响应。这就是为什么您可能必须将UserAgent字符串设置为JSoup http请求中的已知浏览器。
Jsoup.connect("url").userAgent("Mozilla/5.0")
对于下载的html源,JSoup的大小限制为1MB。如果需要,您可以将其关闭或将其设置为更大的值。
Jsoup.connect("url").maxBodySize(0)
Jsoup可能会因请求而超时。要更改超时行为,请使用
Jsoup.connect("url").timeout(milliseconds)
我可能还有其他原因。