关于Java:与我的浏览器相比,Jsoup提供了不同的HTML文档

Jsoup is giving a different HTML document compared to my browser

我确保使用浏览器的用户代理,并且仍然提供不同的HTML。 我还尝试使用Jsoup.parse(Url,int)而不是Jsoup.connect(String)。 两次尝试:

1
2
3
Document doc = Jsoup.connect("https://www.bulq.com/lots/search/?category=Consumer%20Electronics&condition%5B%5D=Brand%20New")
.userAgent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6)AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.1Safari/605.1.15")
.get();

1
2
URL mainUrl = new URL("https://www.bulq.com/lots/search/category=Consumer%20Electronics&condition%5B%5D=Brand%20New");
Document doc = Jsoup.parse(mainUrl, 6000);

我在"元素"标签中使用Safari的"显示页面源"。 我试图在下面复制一些HTML,但是格式不起作用:(所以这是一个小例子。

示例:Jsoup HTML中的div类之一是:

1
div class="row ng-cloak" ui-view

而Safari HTML是:

1
div class="row ng-scope" ui-view


我认为您可以尝试使用jsoup发送User-Agent作为标头

1
2
3
Document doc = Jsoup.connect(url)
                    .userAgent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/601.7.7 (KHTML, like Gecko) Version/9.1.2 Safari/601.7.7")
                    .get();

尝试获取url1的内容时遇到相同的问题,但jsoup返回another url的内容(可能是jsoup被重定向)。
感谢@Zendy的回答,我找到了解决方案:

  • 第一步:打开浏览器并按F12打开开发人员工具,导航至Network选项卡。
  • 将浏览器导航到获取内容所需的URL
  • 在请求标头上获取用户代理,并将其设置到您的jsoup中。
    enter image description here

如果您正在"元素"选项卡中查看实时DOM,则这些类中的某些类可能由于JavaScript而有所不同,因为Jsoup从服务器获取原始HTML时将不会运行该类。


您可以尝试通过以下方式获取页面:

1
2
3
4
5
6
7
8
9
URL u = new URL("https://www.google.com/"); //replace https://www.google.com/ with your url
InputStream in = u.openStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
StringBuilder result = new StringBuilder();
String line;
while((line = reader.readLine()) != null) {
    result.append(line);
}
System.out.println(result.toString());

那不需要图书馆,也许那将返回确切的页面...