Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何找出DOM中的数据来自何处/将所有数据转储到内存中?_Javascript_Web Scraping - Fatal编程技术网

Javascript 如何找出DOM中的数据来自何处/将所有数据转储到内存中?

Javascript 如何找出DOM中的数据来自何处/将所有数据转储到内存中?,javascript,web-scraping,Javascript,Web Scraping,有一个页面,当您将鼠标悬停在图像上时,它会显示某个值。我需要通过编程从页面获取该值。我可以访问页面中的JS控制台,但无法确定它来自何处 我尝试在DOM更改上添加断点,但仍然不清楚数据来自何处 我也尝试过转储整个window对象,但它似乎没有转储足够的数据,也没有包含censor函数从中获取的数据编号 有什么办法可以让我在页面中得到一个完整的数据转储,这样我就可以搜索数据的确切来源,或者清楚地跟踪DOM中的数据的来源吗?DOM元素在图像悬停时添加,然后在鼠标移开时删除。使用Chrome开发工具,右

有一个页面,当您将鼠标悬停在图像上时,它会显示某个值。我需要通过编程从页面获取该值。我可以访问页面中的JS控制台,但无法确定它来自何处

我尝试在DOM更改上添加断点,但仍然不清楚数据来自何处

我也尝试过转储整个window对象,但它似乎没有转储足够的数据,也没有包含censor函数从中获取的数据编号

有什么办法可以让我在页面中得到一个完整的数据转储,这样我就可以搜索数据的确切来源,或者清楚地跟踪DOM中的数据的来源吗?DOM元素在图像悬停时添加,然后在鼠标移开时删除。

使用Chrome开发工具,右键单击元素并选择inspect。在右侧面板中,选择事件侦听器选项卡。在列表中,展开鼠标悬停或其他适当的事件

您将看到直接影响该元素的代码链接

编辑1

参考有关从其他一些可能不受控制的代码检索数据的注释:

如果该数据是在非代码创建的闭包中创建/派生/控制的,则不太可能检索到。这就是JavaScript中闭包的本质。数据可能位于您无法触及的气泡中

编辑2


您可以使用的一种方法是:在元素上强制执行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])))
}