Javascript 如何找出DOM中的数据来自何处/将所有数据转储到内存中?
有一个页面,当您将鼠标悬停在图像上时,它会显示某个值。我需要通过编程从页面获取该值。我可以访问页面中的JS控制台,但无法确定它来自何处 我尝试在DOM更改上添加断点,但仍然不清楚数据来自何处 我也尝试过转储整个window对象,但它似乎没有转储足够的数据,也没有包含censor函数从中获取的数据编号 有什么办法可以让我在页面中得到一个完整的数据转储,这样我就可以搜索数据的确切来源,或者清楚地跟踪DOM中的数据的来源吗?DOM元素在图像悬停时添加,然后在鼠标移开时删除。使用Chrome开发工具,右键单击元素并选择inspect。在右侧面板中,选择事件侦听器选项卡。在列表中,展开鼠标悬停或其他适当的事件 您将看到直接影响该元素的代码链接 编辑1 参考有关从其他一些可能不受控制的代码检索数据的注释: 如果该数据是在非代码创建的闭包中创建/派生/控制的,则不太可能检索到。这就是JavaScript中闭包的本质。数据可能位于您无法触及的气泡中 编辑2Javascript 如何找出DOM中的数据来自何处/将所有数据转储到内存中?,javascript,web-scraping,Javascript,Web Scraping,有一个页面,当您将鼠标悬停在图像上时,它会显示某个值。我需要通过编程从页面获取该值。我可以访问页面中的JS控制台,但无法确定它来自何处 我尝试在DOM更改上添加断点,但仍然不清楚数据来自何处 我也尝试过转储整个window对象,但它似乎没有转储足够的数据,也没有包含censor函数从中获取的数据编号 有什么办法可以让我在页面中得到一个完整的数据转储,这样我就可以搜索数据的确切来源,或者清楚地跟踪DOM中的数据的来源吗?DOM元素在图像悬停时添加,然后在鼠标移开时删除。使用Chrome开发工具,右
您可以使用的一种方法是:在元素上强制执行mouseover事件。这会将您要查找的值放入DOM中。从DOM中提取值。然后关闭鼠标悬停活动。这是一个很好的建议!我已经试过了,但不幸的是,代码都被缩小了,所以它不是一个很好的读物:这就是为什么我更多地寻找一种方法来检索实际数据,因为它必须存储在可访问的地方,因为它以某种方式连接到特定的DOM元素。因此,希望找到一些路径来检索呈现的值。从浏览器中获得的任何内容都将是完全相同信息的解构。不能简单地取消缩小代码以复制原始代码,也不能自动进行反向工程。建立一个链接,我将尝试回答这个问题。是的,这就是为什么我的想法是数据仍然包含在JS中的某个地方,并连接到DOM元素。因此,如果我能够以某种方式获取内存中的所有数据或其他信息,然后搜索显示的特定数字,也许我可以找到一种方法通过JS控制台获取这些数据?感谢更新。这是有道理的。数据是通过AJAX请求来的,所以它不是在闭包中创建的——我猜它可能是以某种容量附加到DOM元素的?这次讨论给了我截取AJAX请求的另一个想法,所以我也将尝试这种方法。如果它来自AJAX请求,那么它很可能位于闭包内。无论如何,您总是返回到附加到DOM,这是您的错误。JS中并非所有内容都与DOM相关。JavaScript虚拟机V8管理自己的堆栈、堆和调用缓冲区;您的数据可能在堆中,并且在mouseover事件期间仅在DOM中。因此,当mouseover被触发时,您可以从DOM中抓取它,而不是在其他时间。
function censor(censor) {
var i = 0;
return function(key, value) {
if(i !== 0 && typeof(censor) === 'object' && typeof(value) == 'object' && censor == value)
return '[Circular]';
if(i >= 1129)
return '[Unknown]';
++i; // so we know we aren't using the original object anymore
return value;
}
}
for(var key in window){
console.log(key);
if(key === 'frames' || key === 'self' || key === 'window' || key === 'parent' || key === 'top' || key === 'document') continue;
console.log(JSON.stringify(window[key], censor(window[key])))
}