使用 Jsoup 连接到 Instagram 页面后,我想从标签中提取整个外部 html。不知何故,当我检查页面并从标签复制外部 html 时,我得到了很多行,而使用 Jsoup 时我只得到了很少的行(不知何故,嵌套标签的 html 被忽略)任何帮助将不胜感激如何获取整个 html!
代码:
Document doc = Jsoup.connect("https://www.instagram.com/myUsername").get();
Element link = doc.selectFirst("span");
String linkOuter = link.outerHtml();
System.out.println(linkOuter);
输出:
<span id="react-root">
<svg width="50" height="50" viewbox="0 0 50 50"
style="position:absolute;top:50%;left:50%;margin:-25px 0 0
-25px;fill:#c7c7c7">
<path d="M25 1c-6.52 0-7.34.03-9.9.14-2.55.12-4.3.53-5.82..." />
</svg></span>
编辑: 我希望保存span标签的整个HTML(我想要与HtmlUnit/Jsoup相同的结果,就像我右键单击标签,单击编辑html,然后右键单击->复制外部html!
最佳答案
不幸的是,Instagram 是一个使用 JavaScript 框架 React 构建的 Web 应用程序。这意味着,最终的 HTML 不是从服务器返回的,而是在页面初始加载后由浏览器客户端的 javascript 生成的。
要查看 React 生成的 HTML,您需要评估从服务器返回的 JavaScript 代码。 JSoup
是简单的 HTML 解析器,无法评估 js,因此您必须使用另一个库,例如 HtmlUnit。
例如:
WebClient webClient = new WebClient(BrowserVersion.CHROME);
webClient.getOptions().setJavaScriptEnabled(true); // enable javascript
webClient.getOptions().setThrowExceptionOnScriptError(false); //even if there is error in js continue
HtmlPage page = webClient.getPage(new URL("https://www.instagram.com/myUsername"));
webClient.waitForBackgroundJavaScript(5000); // important! wait when javascript finishes rendering
page.getElementById("react-root");
关于java - Jsoup 无法获取带有嵌套标签的外部 HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55383188/