网页自动化填表踩坑实录:TinyMCE、DevUI勾选框与透明覆盖层的正确打开方式

举报
yd_253349733 发表于 2026/10/22 00:33:59 2026/10/22
【摘要】 网页自动化填表三大高频坑:TinyMCE 富文本藏在 iframe 里、DevUI 勾选框是自绘元素、透明覆盖层吞点击。附 Playwright 实战解法与代码片段。

做网页自动化(Playwright 驱动真实站点填表提交)时,最耗时的往往不是业务逻辑,而是组件库的"表里不一"。本文记录三个高频踩坑点与解法,均来自近期实战。


## 一、富文本编辑器在 iframe 里:主文档找不到 contenteditable


很多站点的富文本是 TinyMCE/UEditor,正文区是 <iframe id="editor_ifr">。此时在主文档查 [contenteditable="true"] 会一无所获,fill() 也无处下手。


正确做法:用 frameLocator 进入 iframe,先 click 让焦点进编辑器,再键盘输入:


const fr = page.frameLocator('#editor_ifr');

await fr.locator('body').click();

await page.keyboard.press('Meta+A');

await page.keyboard.insertText(content);


注意 insertText 要打到 page(顶层)的键盘上,焦点会跟着进入 iframe。另外 Meta+A 全选前必须先确保点击落在编辑器内,否则会选中整个页面。


## 二、勾选框是"自绘"的:input 隐藏,要点旁边的方框


DevUI/por-ui 等组件库的 checkbox 常见结构:真正的 input[type=checkbox] 是 0x0 或 display:none,视觉上的方框是 span 自绘元素(如 devui-checkbox__material)。对 input 调 check() 或 click() 往往无效或状态不回写框架。


正确做法:用真实鼠标点自绘方框的中心坐标:


const box = await page.evaluate(() => {

  const el = document.querySelector('.devui-checkbox__material');

  const r = el.getBoundingClientRect();

  return { x: r.x + r.width/2, y: r.y + r.height/2 };

});

await page.mouse.click(box.x, box.y);


验证状态时别只看 input.checked,要看外层 class 是否出现 checked/is-checked。


## 三、透明覆盖层吞掉所有点击


登录弹窗、新手引导层常留一个空的 .popup-container 盖在页面上,Playwright 的 click 看似成功但事件被覆盖层吃掉,页面毫无反应(force: true 也没用)。


正确做法:先摘掉指针事件再操作:


await page.addStyleTag({ content: '.popup-container,.popup-container *{pointer-events:none!important}' });


或者直接用 page.mouse.click(坐标) 绕开命中测试。


## 小结


自动化填表的稳定性,取决于对"真实 DOM 结构"的尊重:iframe 要切进去、自绘控件要点图形、覆盖层要先清场。把这三板斧做成工具函数后,提交成功率从反复重试降到一次通过。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。