作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
作为一个简单的编码练习,我正在开发一个小项目,该项目将当前系统日期与几个网页中显示的日期进行比较(以查看是否有新的更新)。对于大多数人来说,一切都很好,但有一个给我带来了一些问题。
页面: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/
我是一名优秀的程序员,十分优秀!