“找不到注入节点”是因dom未加载或选择器错误,需改@run-at为document-idle/end,再用开发者工具验证节点存在性及选择器准确性,动态页面须用mutationobserver监听并加防重与超时兜底。

米侠浏览器脚本管理器运行用户脚本时提示“找不到注入节点”,说明脚本试图操作的 DOM 元素在执行时刻尚未加载或选择器写错,需逐层验证页面结构与执行时机。
确认脚本执行时机是否过早
默认情况下,米侠脚本管理器可能在 document.readyState === 'loading' 阶段就尝试执行,此时 body 甚至 head 都未完全解析,querySelector 必然返回 null。
将脚本 @run-at 注释改为 【@run-at document-idle】 或 【@run-at document-end】,强制延迟到 DOM 构建完成后再执行。
改完后刷新页面重试;若仍报错,说明节点确实不存在或动态加载逻辑更复杂。
检查目标节点是否存在及选择器是否准确
方法一:手动验证节点
按 F12 打开开发者工具 → 切换到 Elements 面板 → Ctrl+F 输入你的选择器(如 #main-content 或 .item-list > li:first-child)→ 确认是否高亮匹配项。
注意:如果页面用 Vue/React 渲染,元素可能是 JS 动态插入的,Elements 面板里能看到但初始 HTML 源码里没有,此时必须等框架挂载完成。
方法二:在控制台模拟查询
切换到 Console 面板,输入 document.querySelector('你的选择器'),回车。返回 null 就是选择器无效;返回 Element 但脚本仍失败,大概率是执行时机问题。
如果选择器含空格、特殊字符或伪类(如 :nth-child(2)),需确保字符串被正确转义,建议优先用 class 或 id 这类稳定标识。
处理动态渲染内容(SPA 页面专用)
第一步:监听 DOM 变化
在脚本中使用 MutationObserver 监听目标父容器的 childList 变化,一旦检测到目标节点出现,立即执行操作逻辑。
第二步:设置防重复触发保护
在 observer 回调开头加 if (document.querySelector('你的目标节点')) { /* 执行主体 */ observer.disconnect(); },避免节点反复插入导致多次运行。
第三步:加超时兜底
用 setTimeout 包裹一次最终 fallback 查询,比如 3 秒后强制尝试一次 document.querySelector,防止 observer 漏掉首次插入。











