javascript - 如何在 Java 中使用 HtmlUnit 从页面获取“发布日期”动态值?
问题描述
作为一个简单的编码练习,我正在做一个小项目,将当前系统日期与几个网页中的日期进行比较(看看是否有新的更新)。对于他们中的大多数人来说,一切都很好,但是有一个给我带来了一些问题。
页面: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 元素。我建议阅读入门文档->“查找特定元素”。
推荐阅读
- javascript - 按下鼠标时将键盘滚动事件从一个元素转发到另一个元素
- angular - 如何为 Angular CLI 的新配置启用增量构建模式?
- node.js - Nodejs 中的电子邮件正则表达式模式
- spring-boot - 从 sentry.properties 中的环境获取 Sentry 发布版本
- installation - 如何删除文件和文件夹 Inno Setup
- python - Django DeprecationWarning 使用 .. 或绝对路径
- python-3.x - 从列表中删除特定单词
- search - Microsoft FHIR - 搜索名称
- python - 在模式中添加缺失的部分
- java - 使用java枚举的Json反序列化