如何在Playwright中选中并高亮句子中的部分指定文本?
Playwright 选中元素内指定文本实现高亮的方案
核心实现逻辑是调用浏览器原生的Range和Selection接口,定位目标单词的文本偏移量完成选中,再执行右键点击即可,完整示例代码如下:
from playwright.sync_api import sync_playwright with sync_playwright() as p: # 启动浏览器,headless设为False方便查看效果 browser = p.chromium.launch(headless=False) page = browser.new_page() # 替换为你的实际页面访问地址 page.goto("你的页面地址") # 等待目标元素加载完成 target_div = page.locator(".line-text") target_div.wait_for(state="visible") # 执行JS脚本高亮选中"account"单词 target_div.evaluate("""element => { const textContent = element.textContent; const targetStr = "account"; // 查找目标单词的起始位置 const startIndex = textContent.indexOf(targetStr); // 找不到目标单词直接返回 if (startIndex === -1) return; const endIndex = startIndex + targetStr.length; const range = document.createRange(); const selection = window.getSelection(); // 清空之前的选中内容 selection.removeAllRanges(); // 绑定起止位置到文本节点 range.setStart(element.firstChild, startIndex); range.setEnd(element.firstChild, endIndex); // 应用选中实现高亮 selection.addRange(range); }""") # 对目标元素执行右键点击 target_div.click(button="right") # 调试用,执行完暂停3秒查看效果 page.wait_for_timeout(3000) browser.close()
注意事项
- 如果当前元素内存在多个
account单词,上述代码只会选中第一个匹配项,需要匹配第N个时可修改indexOf的查找逻辑,传入第二个参数指定查找起始位置即可 - 如果目标文本是动态渲染的,需要提前增加等待逻辑,确保文本已经渲染完成再执行选中操作,避免出现偏移量计算错误
内容的提问来源于stack exchange,提问作者For Testing
相关产品推荐
相关产品推荐

