调用page.type向网页Description输入文本报找不到节点,如何定位正确selector
报错原因
input[name="DescriptionJson"]是隐藏的状态存储字段,仅用于EditorJS提交时承载序列化后的内容,本身不支持输入,若脚本执行早于页面DOM渲染,也会出现找不到节点的问题。- 真正的输入载体是EditorJS动态生成的内部带
contenteditable="true"属性的段落节点,这类节点不会在页面初始DOM中直接存在,没有等待渲染就直接执行type操作,必然触发找不到节点的错误。 - 直接对
#DescriptionJson_editor等父容器执行输入操作无效,可编辑事件只会绑定到内部的段落节点上。
正确实现代码
// 等待可编辑节点完成渲染,最长等待10秒 await page.waitForSelector( '#DescriptionJson_editor div.ce-paragraph[contenteditable="true"]', { timeout: 10000 } ); // 聚焦节点激活编辑器输入状态 await page.focus('#DescriptionJson_editor div.ce-paragraph[contenteditable="true"]'); // 输入目标文本 await page.keyboard.type('Lorem ipsum dolor sit amet');
补充注意事项
- 不要手动修改
input[name="DescriptionJson"]的value,EditorJS在表单提交时会自动将当前编辑器内的内容序列化,覆盖该字段的原有值,手动修改的内容会被清空。 - 如果等待后仍找不到节点,先检查编辑器是否嵌套在iframe内,需要先通过
page.frames()定位到对应iframe的frame对象,再在该frame上执行上述等待、聚焦、输入操作。
内容的提问来源于stack exchange,提问作者Ada
相关产品推荐
相关产品推荐

