You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Jsoup解析以[email protected]形式呈现的受保护邮箱地址

嘿,刚好我之前处理过类似的Jsoup解析加密邮箱的问题,来给你一步步拆解解决方案!

首先得明确:你遇到的[email protected]是网站为了防爬虫做的邮箱保护手段,不同网站的实现逻辑不一样,咱们得针对性处理,下面是几种最常见的场景和解决方法:

1. 邮箱被拆分成多个DOM元素(CSS拼接显示)

很多网站会把真实邮箱拆成「用户名」「@」「域名」三部分,分别放在不同的子标签里,然后通过CSS让它们在页面上显示成完整的邮箱,但直接用elements.select(".email").text()只能拿到页面显示的占位符[email protected]。

举个例子,页面的真实DOM结构可能是这样的:

<span class="email">
  <span class="email-user">user</span>
  <span class="email-at" style="visibility:hidden;">@</span>
  <span class="email-domain">example.com</span>
</span>

解决方法:直接提取各部分的文本再拼接:

// 先拿到邮箱容器元素
Element emailContainer = doc.selectFirst(".email");
// 提取用户名和域名部分
String username = emailContainer.select(".email-user").text();
String domain = emailContainer.select(".email-domain").text();
// 拼接成真实邮箱
String realEmail = username + "@" + domain;

如果@是通过CSS伪元素(比如::before)插入的,Jsoup拿不到伪元素内容,这时候直接按「用户名+@+域名」的规律拼接就行,大部分场景都适用。

2. 真实邮箱藏在元素属性里

有些网站会把真实邮箱放在元素的自定义属性中(比如data-email、data-original),页面显示的[email protected]只是占位符。

比如DOM结构:

<span class="email" data-email="user@example.com">[email protected]</span>

解决方法:直接读取对应属性的值:

String realEmail = doc.selectFirst(".email").attr("data-email");

3. 邮箱需要JS动态解码

如果网站用JS对邮箱做了加密(比如ASCII编码、Base64或者自定义算法),然后在页面加载时动态渲染成真实邮箱,这时候Jsoup静态解析只能拿到占位符,因为它不执行JS。

解决方法:结合支持JS渲染的工具(比如HtmlUnit或Selenium)先让页面执行JS,再用Jsoup解析渲染后的内容。

以HtmlUnit为例,示例代码:

// 初始化支持JS的WebClient
WebClient webClient = new WebClient(BrowserVersion.CHROME);
webClient.getOptions().setJavaScriptEnabled(true);
webClient.getOptions().setThrowExceptionOnScriptError(false); // 忽略无关的JS错误
webClient.getOptions().setCssEnabled(false);

// 加载目标页面并等待JS执行完成
HtmlPage page = webClient.getPage("你的目标网页URL");
webClient.waitForBackgroundJavaScript(1000); // 等待1秒让JS跑完

// 把渲染后的页面转成Jsoup的Document对象
Document doc = Jsoup.parse(page.asXml());

// 现在再提取邮箱就能拿到真实地址了
String realEmail = doc.select(".email").text();

通用排查思路

如果以上方法都不适用,你可以按这个步骤自己排查:

  • 打开浏览器开发者工具(F12),找到显示[email protected]的元素,查看它的真实DOM结构;
  • 检查元素的所有属性,看有没有藏着真实邮箱;
  • 查看页面的JS代码,找有没有解密邮箱的逻辑(比如搜索email、decode等关键词);
  • 模仿JS的解密逻辑,在Java里实现对应的解码方法。

内容的提问来源于stack exchange,提问作者Tonton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:56:59