gpt4 book ai didi

javascript - 如何在Java中使用HtmlUnit从页面获取 "Publish Date"动态值?

转载 作者:行者123 更新时间:2023-12-02 05:51:22 25 4
gpt4 key购买 nike

作为一个简单的编码练习,我正在开发一个小项目,该项目将当前系统日期与几个网页中显示的日期进行比较(以查看是否有新的更新)。对于大多数人来说,一切都很好,但有一个给我带来了一些问题。

页面:https://access.redhat.com/security/security-updates/#/security-advisories

我想要获取的值:发布日期

问题:如何在 Java 中做到这一点?

尝试使用简单的 BufferedReader,尝试将整个页面保存到文件中 - 无济于事。我做了一些研究,似乎我需要使用 HtmlUnit,但我觉得我需要建议来了解它是如何工作的。

public static void main(String[] args) {

Logger.getLogger("com.gargoylesoftware").setLevel(Level.OFF);
System.setProperty("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.NoOpLog");

String START_URL ="https://access.redhat.com/security/security-updates/#/security-advisories";

try{

WebClient webClient = new WebClient(BrowserVersion.CHROME);

webClient.getOptions().setCssEnabled(true);
webClient.getOptions().setJavaScriptEnabled(true);
webClient.waitForBackgroundJavaScript(5000);

HtmlPage page = webClient.getPage(START_URL);
String pageContent = page.asText(); //this will NOT include dates
System.out.println(pageContent);


} catch (IOException ex){
ex.printStackTrace();
}
}

}

我想从 https://access.redhat.com/security/security-updates/#/security-advisories 获取第一个“发布日期”框的内容页面,但是无论我尝试什么方法,动态值都永远不可见并且无法存储/检查。

最佳答案

您可以使用:

public static void main(String[] args) {
try {

WebClient webClient = new WebClient(BrowserVersion.CHROME);
webClient.getOptions().setJavaScriptEnabled(true);

HtmlPage page = webClient.getPage("https://access.redhat.com/security/security-updates/#/security-advisories");
webClient.waitForBackgroundJavaScript(15000);
HtmlTable table = (HtmlTable) page.getElementById("DataTables_Table_0");
for (HtmlTableRow row : table.getRows()) {
List<HtmlElement> timeElements = row.getElementsByTagName("time");
if (timeElements.size() > 0) {
HtmlElement timeElement = timeElements.get(0);

// GET THE TIME FROM THE CELL
String time = timeElement.getAttribute("datetime"); // time in format "2019-05-08T17:34:20Z"
System.out.println("TIME: " + time);
} else {
// This row does not contain a element with time tag
}
}

} catch (IOException ex) {
ex.printStackTrace();
}
}

这是未经测试的,也许到正确节点的路径需要改变一些东西,但这应该给你一个开始:)

更新:我现在测试了它,它正在将所需的时间打印到控制台。这是一种方法。 HTMLUnit 中还有许多其他方法来获取所需的 DOM 元素。我建议阅读getting started document ->“查找特定元素”。

关于javascript - 如何在Java中使用HtmlUnit从页面获取 "Publish Date"动态值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56043905/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com