使用 Jsoup 从页面获取元素
Using Jsoup to get an Element from a page
我想使用 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。我在这里做错了什么?
很多事情都可能是造成这种情况的原因。没有 URL 我不能确定,但这里有一些线索:
一些页面通过 AJAX 加载它们的内容。 Jsoup 无法处理这个问题,因为它不解释任何 JavaScript。您可以通过使用 curl 下载页面或在浏览器中关闭 JavaScript 来检查这一点。要处理使用 JavaScript 呈现自身的页面,您可以使用 Selenium webdriver 或 HTMLUnit 等工具。
您尝试加载的页面的网络服务器可能需要存在 cookie。您需要查看加载该页面时发生的网络流量。在 chrome 或 firefox 中,您可以在网络选项卡的开发人员工具中看到它。
网络服务器对不同客户端的响应可能不同。这就是为什么您可能必须在 JSoup http 请求中将 UserAgent 字符串设置为已知的浏览器。
Jsoup.connect("url").userAgent("Mozilla/5.0")
JSoup 的下载 html 源文件大小限制为 1MB。如果需要,您可以关闭它或将其设置为更大的值。
Jsoup.connect("url").maxBodySize(0)
Jsoup 可能会在请求时超时。要更改超时行为,请使用
Jsoup.connect("url").timeout(milliseconds)
可能还有其他原因我现在没有想到。
我想使用 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。我在这里做错了什么?
很多事情都可能是造成这种情况的原因。没有 URL 我不能确定,但这里有一些线索:
一些页面通过 AJAX 加载它们的内容。 Jsoup 无法处理这个问题,因为它不解释任何 JavaScript。您可以通过使用 curl 下载页面或在浏览器中关闭 JavaScript 来检查这一点。要处理使用 JavaScript 呈现自身的页面,您可以使用 Selenium webdriver 或 HTMLUnit 等工具。
您尝试加载的页面的网络服务器可能需要存在 cookie。您需要查看加载该页面时发生的网络流量。在 chrome 或 firefox 中,您可以在网络选项卡的开发人员工具中看到它。
网络服务器对不同客户端的响应可能不同。这就是为什么您可能必须在 JSoup http 请求中将 UserAgent 字符串设置为已知的浏览器。
Jsoup.connect("url").userAgent("Mozilla/5.0")
JSoup 的下载 html 源文件大小限制为 1MB。如果需要,您可以关闭它或将其设置为更大的值。
Jsoup.connect("url").maxBodySize(0)
Jsoup 可能会在请求时超时。要更改超时行为,请使用
Jsoup.connect("url").timeout(milliseconds)
可能还有其他原因我现在没有想到。