在Java中加载javascript的init方法后获取HTML文件

问题描述 投票:0回答:2

我有一个Java代码,我想在其中加载HTML文件并对其进行解析。我正在使用jsoup库,一切正常。

问题是,当我获取HTML资源时,需要花费一些时间来加载和完成页面,可能正在运行一些JavaScript代码并从数据库中获取数据以放入HTML资源中。

但是当使用Java获取资源时,它不会等待资源完成并返回带有空字段的HTML文件。

我尝试了经典的jsoup方法:

Connection conn = Jsoup.connect("http://www.tsetmc.com/loader.aspx?ParTree=151311&i=43362635835198978");
Document doc = conn.get(); 
String title = doc.title();
System.out.println(title);

WebClient包:

WebClient client = new WebClient(BrowserVersion.FIREFOX_60);
client.waitForBackgroundJavaScriptStartingBefore(5000);
HtmlPage page = client.getPage("http://www.tsetmc.com/loader.aspx?ParTree=151311&i=43362635835198978");
String pageTxt = page.asText();
System.out.println(pageTxt);

但是都没有。

我如何让我的程序等到一切完成?

javascript java jsoup http-get
2个回答
1
投票

要在加载html资源后返回它,您需要异步检索数据。为此,我相信您想使用Java Future。尝试查看CompletetableFuture类Java Futures

您也可以查看此问答How to execute an array of CompletetableFuture

作为在JavaScript中这样做的附带说明,可以使用Callback或Promise来完成,在此概述了其优缺点:Javascript Promises


1
投票

使用Java对网络服务器进行轮询-并希望您的程序实际运行您尝试下载的页面上可能存在或无法出现的任何Java脚本,将根本无法工作。如果您的Java程序似乎正在打印或保存的HTML看上去与使用Web浏览器加载同一页面时得到的HTML完全不同-那么*是*-您可能是正确的-Java脚本没有被您的JVM执行。

JAVA在使用类“ URLConnection”时不会构建文档对象模型(DOM)树。我不知道有什么Java工具能够构建DOM树,然后运行这些天通常通常在HTML的每个页面上运行的脚本...

根据我所读的内容,“非常接近”的最常见方法是使用“硒包”。 Selenium不会构建DOM树或执行Java脚本,而是执行一个Web浏览器实例,然后要求浏览器加载页面并运行该页面上可用的所有Java Script,然后返回HTML转换为Java ..

© www.soinside.com 2019 - 2024. All rights reserved.