HtmlUnit中asNormalizedText()返回空字符串的原因排查
HtmlUnit中asNormalizedText()返回空字符串的原因
问题场景
代码示例
HtmlPage rowPage = ... String address1 = ((HtmlDivision)rowPage.getFirstByXPath("//div[contains(@class, 'client_address1')]")).asXml(); System.out.println("address1 = " + address1); String address1_2 = (( ((HtmlDivision)rowPage.getFirstByXPath("//div[contains(@class, 'client_address1')]")).asNormalizedText(); System.out.println("address1_2 = " + address1_2);
执行输出
address1 = <div class="client_address1 clientRow"> 123 Somewhere ln </div> address1_2 =
期望asNormalizedText()返回"123 Somewhere ln",但实际返回空字符串,以下是可能的原因:
可能的原因
- 文本所在子元素被隐藏:如果目标div内的文本实际嵌套在设置了
display:none、visibility:hidden的子元素中,HtmlUnit会忽略不可见元素的文本内容。 - 文本由JavaScript动态生成:若地址文本是页面加载完成后通过JS动态插入的,而HtmlUnit未启用JavaScript,或者在JS执行完毕前就获取了元素,会导致
asNormalizedText()无法拿到内容。 - 文本被CSS视觉隐藏:比如使用
text-indent: -9999px、opacity:0等CSS技巧将文本移出可视区域,HtmlUnit会识别这类隐藏规则,不返回对应文本。 - HtmlUnit解析异常:部分特殊HTML结构(比如异常换行、嵌套空格)可能导致HtmlUnit解析偏差,使原本的文本被识别为空。可以尝试用
asText()方法对比结果,或确认XPath是否精准定位到目标节点。 - 文本被包裹在HTML注释中:如果地址文本处于HTML注释(
<!-- ... -->)内部,asNormalizedText()不会提取注释里的内容。
内容的提问来源于stack exchange,提问作者ryvantage
相关产品推荐
相关产品推荐

