如何提取<br>标签后文本?Selenium获取随机车型名称失败求助
问题解决方法
1. 报错原因
你的JavaScript选择器#output-container p无法找到对应元素,导致返回null,进而触发Cannot read properties of null错误。从你提供的HTML代码来看,目标<p>标签并没有嵌套在id="output-container"的元素中,选择器写法错误。
2. 修正后的提取代码
方案一:精准定位文本节点提取
直接定位目标<p>标签,获取其最后一个文本节点(即车型名称所在节点):
String carName = (String) jsExecutor.executeScript("const p = document.querySelector('p[style=\"margin:1em auto; padding:0 1em; max-width:700px;\"]'); return p.childNodes[p.childNodes.length - 1].textContent.trim();"); System.out.println(carName);
方案二:拆分文本内容提取
如果页面中只有这一个目标<p>标签,可获取其innerText后按换行拆分,取最后有效行:
String text = (String) jsExecutor.executeScript("return document.querySelector('p').innerText;"); // 拆分并过滤空行,提取最后一行车型名称 String carName = Arrays.stream(text.split("\\n")) .map(String::trim) .filter(line -> !line.isEmpty()) .reduce((first, last) -> last) .orElse(""); System.out.println(carName);
说明
- 方案一的选择器通过样式精准匹配目标
<p>标签,避免页面其他<p>元素干扰;若页面仅存在这一个目标<p>,可简化为document.querySelector('p')。 - 两种方案都能适配页面随机生成的车型名称,精准提取类似
2013 Lamborghini Egoista的内容。
内容的提问来源于stack exchange,提问作者user24952292
相关产品推荐
相关产品推荐

