使用Jsoup按ID提取Unix毫秒级时间戳失败,寻求解决方法
解决动态生成的Unix毫秒时间戳获取问题
问题原因
你用Jsoup获取不到epochMs元素的内容,核心原因是这个时间戳是前端JavaScript实时动态生成并刷新的,而Jsoup只能抓取服务器返回的静态HTML源码,不会执行页面中的JS代码,所以静态源码里epochMs元素本身就是空的,和点击停止计时器无关。
解决方案
方案1:直接在Java中生成(最优)
完全不需要爬取外部网站,Java本身就提供了获取当前Unix毫秒级时间戳的API:
long currentEpochMs = System.currentTimeMillis(); String content = String.valueOf(currentEpochMs);
这是最可靠、高效的方式,避免了网络请求和页面依赖的问题。
方案2:用支持JS执行的工具抓取(如果必须从目标页面获取)
如果一定要从目标页面获取,需要使用能模拟浏览器执行JS的工具,比如HtmlUnit。以下是示例代码:
import com.gargoylesoftware.htmlunit.WebClient; import com.gargoylesoftware.htmlunit.html.HtmlPage; public class EpochTimestampFetcher { public static void main(String[] args) throws Exception { try (WebClient webClient = new WebClient()) { // 启用JS执行 webClient.getOptions().setJavaScriptEnabled(true); // 等待JS完成初始渲染 webClient.waitForBackgroundJavaScript(1000); HtmlPage page = webClient.getPage("https://www.freeformatter.com/epoch-timestamp-to-date-converter.html"); String content = page.getElementById("epochMs").getTextContent(); System.out.println(content); } } }
使用HtmlUnit需要添加Maven依赖(若用Maven管理项目):
<dependency> <groupId>net.sourceforge.htmlunit</groupId> <artifactId>htmlunit</artifactId> <version>2.70.0</version> </dependency>
内容的提问来源于stack exchange,提问作者Mixalis Navridis
相关产品推荐
相关产品推荐

