Puppeteer(Node.js)获取textContent时丢失换行问题排查
解决textContent丢失
换行的问题
换行的问题
textContent本身不会将<br>标签转换为换行符,它只会提取元素下所有文本内容并忽略这类格式标签,所以会出现换行丢失的情况。以下是两种可行的解决方法:
方法一:通过innerHTML替换
为换行符
先获取元素的HTML内容,再将所有<br>(包括<br/>形式)替换为换行符:
const [e3] = await page.$x('//*[@id="highlightContent"]'); const descHtml = await e3.getProperty('innerHTML'); const rawHtml = await descHtml.jsonValue(); const rawDesc = rawHtml.replace(/<br\s*\/?>/gi, '\n');
方法二:遍历子节点手动处理换行
直接在页面上下文遍历元素的子节点,遇到<br>标签就添加换行符,其他节点提取文本:
const [e3] = await page.$x('//*[@id="highlightContent"]'); const rawDesc = await page.evaluate(el => { let text = ''; for (const node of el.childNodes) { if (node.nodeType === Node.ELEMENT_NODE) { node.tagName === 'BR' ? text += '\n' : text += node.textContent; } else if (node.nodeType === Node.TEXT_NODE) { text += node.textContent; } } return text; }, e3);
这两种方法都能保留<br>对应的换行,同时保留<I>这类标签包裹的文本内容。
内容的提问来源于stack exchange,提问作者hamdatnoob
相关产品推荐
相关产品推荐

