【问题标题】:Jsoup Java parser: cannot get all content HTML from websiteJsoup Java解析器:无法从网站获取所有内容HTML
【发布时间】:2014-08-10 08:39:33
【问题描述】:

我尝试获取网站https://launch.stellar.org/#/login 中的所有标签HTML。

但是我的结果没有任何输入标签,就像我在 Firefox 的 F12 工具中看到这个网站时一样。

我不明白这个问题的原因和解决方案是什么?

这是我的代码:

import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.net.CookieHandler; import java.net.CookieManager; import java.net.URL; import java.net.URLEncoder; import java.util.ArrayList; import java.util.List; import javax.net.ssl.HttpsURLConnection; import org.jsoup.Connection; import org.jsoup.Jsoup; import org.jsoup.helper.HttpConnection.Response; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; public class HttpUrlConnect { private HttpsURLConnection conn; private final String USER_AGENT = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.131 Safari/537.36"; public static void main(String[] args) throws Exception { String url = "https://launch.stellar.org/#/login"; HttpUrlConnect http = new HttpUrlConnect(); // 1. Send a "GET" request, so that you can extract the form's data. String page = http.GetPageContent(url); Document doc = Jsoup.parse(page); System.out.println(doc); } String GetPageContent(String url) throws Exception { URL obj = new URL(url); conn = (HttpsURLConnection) obj.openConnection(); // default is GET conn.setRequestMethod("GET"); conn.setUseCaches(false); // act like a browser conn.setRequestProperty("Host", "wallet.stellar.org"); conn.setRequestProperty("User-Agent", USER_AGENT); conn.setRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"); conn.setRequestProperty("Accept-Language", "vi-VN,vi;q=0.8,fr-FR;q=0.6,fr;q=0.4,en- US;q=0.2,en;q=0.2"); int responseCode = conn.getResponseCode(); System.out.println("\nSending 'GET' request to URL : " + url); System.out.println("Response Code : " + responseCode); BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream())); String inputLine; StringBuffer response = new StringBuffer(); while ((inputLine = in.readLine()) != null) { response.append(inputLine); } in.close(); return response.toString(); }

我在这里下载jsoup库:http://jsoup.org/download

【问题讨论】:

  • 你是如何解决这个问题的?你能得到你想要的吗

标签: java html jsoup


【解决方案1】:

但是我的结果没有任何输入标签,就像我在 firefox 的 F12 工具中看到这个网站时一样

“F12 工具”(Inspector/Firebug)可让您在客户端 (Firefox) 打开页面时查看源代码以及 javascript 对页面所做的所有修改。

实际上,如果您尝试查看从服务器接收到的源 (CTRLU),您会看到页面中没有 input 元素。

您看到的代码都是由 javascript 生成的,因此您需要一个工具来解释 javascript 代码并为您提供生成的 HTML 代码。


事实上,JSoup 只是一个 HTML 解析器。为此,您需要切换到SeleniumHTMLUnit

【讨论】:

  • @user2582163 JSoup 只是一个 HTML 解析器,因此您将无法使用它执行 javascript。您需要切换到SeleniumHTMLUnit - 但我从未使用过它们。我知道它们可以像真正的浏览器一样运行(因此它们也可以执行 javascript),但我从未使用过它们
  • 我尝试使用 selenium 和 HTMLUnit 进行谷歌搜索,但似乎没有详细的示例。
【解决方案2】:

来自服务器端的文本与您从 jsoup 获得的输出相同

在网页浏览器中加载页面后,输入标签是使用 javascript 动态创建的 所以只有你看不到输入标签。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-14
    • 1970-01-01
    • 2012-09-14
    • 2013-09-15
    相关资源
    最近更新 更多