js调试:找到修改目标元素内容的代码
1 minute read
0x1 About
有时为了找出修改html页面中的某个元素的内容的js代码,可通过在console中执行如下代码,执行了如下代码后可触发中断,触发中断后可在调用堆栈中的前几个函数中逐一查找,可找到目标函数
0x2 执行代码
// 步骤 1:先验证并获取目标元素(强制确保元素有效)
const target = document.querySelector("body > main > div.album.py-4.bg-light > div > div > div.col-xs-12.col-sm-9.right-col > div > div.content_block > div.table-responsive.table_normal")
if (!target) {
console.error('❌ 错误:未获取到目标元素!请先通过 Elements 面板选中目标元素再注入代码.');
} else {
console.log('✅ 成功获取目标元素:', target);
// 步骤 2:保存初始文本(改用 textContent,兼容更多场景)
let lastText = target.textContent; // 替换 innerText 为 textContent,覆盖更广
console.log('✅ 初始文本:', lastText);
// 步骤 3:创建 MutationObserver 实例(优化回调和配置)
const observer = new MutationObserver((mutationsList, observer) => {
// 强制刷新当前元素文本(避免缓存)
const currentText = target.textContent;
// 优化:即使文本相同,也打印日志(方便验证是否捕获到变化)
console.log('� 检测到 DOM 变化,当前文本:', currentText);
// 步骤 4:文本真的变化时,触发中断(保留原有逻辑,增加容错)
if (currentText !== lastText) {
console.log('� 检测到文本实际改变!');
console.log('� 旧值:', lastText);
console.log('� 新值:', currentText);
// 更新最后一次文本
lastText = currentText;
// 触发调试中断(如果想跳过重复中断,可保留这个 if 判断;想每次变化都中断,可移到 if 外面)
debugger;
}
});
// 步骤 5:优化监听配置(更全面,捕获所有可能的文本变化场景)
const observerConfig = {
characterData: true, // 监听文本节点内容变化
childList: true, // 监听子节点(添加/删除/修改)
subtree: true, // 监听所有后代节点(解决嵌套元素文本变化)
characterDataOldValue: true, // 保留旧的文本值(方便调试)
attributes: false // 关闭属性监听(减少无关触发,如需监听可改为 true)
};
// 步骤 6:启动监听,并打印提示
observer.observe(target, observerConfig);
console.log('✅ 监听已启动!操作页面触发文本变化,会自动中断.');
console.log('ℹ️ 如需停止监听,执行:observer.disconnect()');
}
0x3 注意事项
在上面的代码中:
const target = document.querySelector("body > main > div.album.py-4.bg-light > div > div > div.col-xs-12.col-sm-9.right-col > div > div.content_block > div.table-responsive.table_normal")
这里设置的target如果直接用目标元素的情况下不会触发中断,则需要使用它的父元素,如果它的父元素还不行,则继续使用父元素的父元素,以此类推,直到可行