【问题标题】:Jsoup select method always returns nullJsoup select方法总是返回null
【发布时间】:2019-05-28 00:50:50
【问题描述】:

在上图中,我想从突出显示的行中提取值Rs. 4794

这是我尝试过的。

Document document = Jsoup.connect(url).get();

Element price = document.select("#mountRoot > div > div > main > div.pdp-details > div.pdp-description-container > div.pdp-price-info > p.pdp-selling-price > strong").first();

System.out.println(price);

但是代码返回null。

我们将不胜感激任何形式的帮助。

【问题讨论】:

  • 首先,不要依赖浏览器的 HTML 查看器/检查器。许多元素可以稍后通过 JavaScript 添加,并且不会在原始服务器回复中添加。 Jsoup 不是浏览器模拟器,因此它不会执行可以添加此类元素的 JavaScript。它只解析服务器发送的内容。打印调用 System.out.println(document) 以查看您实际解析的内容并检查它是否包含您要查找的内容。
  • 如果没有,那么您将需要使用其他提供浏览器仿真的工具,例如 Selenium webdriver。
  • 请不要发布解决您问题的人可能需要的 XML 或任何其他文本文件的图片。没有人会从图像中重新键入它。您需要提供一个可以直接复制粘贴到文本编辑器的示例。

标签: java html jsoup


【解决方案1】:

您尝试使用 Jsoup 解析的网页会动态更新内容。

你得到一个空值,因为网页没有完全加载。为了获得价格值,您必须等到页面加载。使用 Jsoup 无法做到这一点。

您可以选择使用 Selenium。使用 selenium,您可以等待页面加载或等到元素可见。然后你可以得到价格值。

您可以找到 here 使用 selenium 使元素可见。并且有很多关于这个主题的教程。

【讨论】:

  • 请将代码和数据添加为文本 (using code formatting),而不是图像。图片:A)不允许我们复制粘贴代码/错误/数据进行测试; B) 不允许根据代码/错误/数据内容进行搜索;和many more reasons。一般来说,文本格式的代码/错误/数据>>>>作为图像的代码/错误/数据>>没有。除了代码格式的文本之外,只有在图像添加了一些重要的东西,而不仅仅是文本代码/错误/数据传达的内容时,才应该使用图像。
【解决方案2】:

依靠绝对布局来查找 div 是不好的。尝试使用更通用的方法:

Element price = document.select("#mountRoot p.pdp-selling-price > strong").first();

要输出标签内容,使用.text()方法:

System.out.println(price.text());

【讨论】:

  • 它抛出 NullPointerException。
猜你喜欢
  • 2020-08-16
  • 2016-07-04
  • 2016-07-10
  • 2016-02-10
  • 1970-01-01
  • 1970-01-01
  • 2016-03-31
  • 1970-01-01
  • 2012-08-01
相关资源
最近更新 更多