js调试:找到修改目标元素内容的代码

on under auxilary
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如果直接用目标元素的情况下不会触发中断,则需要使用它的父元素,如果它的父元素还不行,则继续使用父元素的父元素,以此类推,直到可行

js
home
github
archive
category