如何获取由 HTML 完成的网络请求列表

IT技术 javascript html google-chrome google-chrome-devtools
2021-03-11 23:18:37

如何使用 HTML 完成的 Javascript 获取网络请求列表,如 chrome devtools 中所示。

例如: 在此处输入图片说明

这是 google.com 的开发工具。我想,使用 javascript 获取列表中的所有这些请求。这可能吗?如果是,如何?

5个回答

有些浏览器已经实现了一个版本的尚未规范资源定时API,你可以收集一些信息。

某些浏览器可能会将其中一些信息提供给浏览器扩展作为其开发人员工具支持的一部分,但这需要安装自定义扩展,而不是可以从常规网页完成的操作。

对于您控制调用代码或知道调用代码的非常具体的操作,可以检测一些东西。例如,如果您知道所有 ajax 调用都通过一个特定的函数,您可以挂钩该函数及其完成处理程序并监视所有 ajax 调用。

是否可以获取网页上的所有文件?如果您正在创建浏览器扩展程序?
2021-04-30 23:18:37
如果没有浏览器扩展,仍然没有办法做到这一点?即使有像节点这样的东西?
2021-05-03 23:18:37
为什么投反对票?这个答案有什么不正确的?或者什么会使它成为更好的答案?
2021-05-04 23:18:37
@oldboy - 我不知道。必须研究扩展 API 才能查看您可以访问的内容。
2021-05-09 23:18:37
这是对的。这个级别的任何类型的检查都必须在扩展程序中完成(至少在 Chrome 的情况下)。developer.chrome.com/extensions/devtools_network.html
2021-05-14 23:18:37

您可以使用Resource Timing API 获取有关正在您网站上加载的每个资源的所有相关信息(域查找、缓存命中、重定向等)。

你可以在这里阅读它还有一个书签可以使用此 API 生成页面加载瀑布。

Resource Timing API 在 Chrome、Chromium、Chrome Mobile 和 IE10 中可用。Firefox 团队似乎正在研究它

我发现您的回答比仅仅说“这是不可能的”更有用。谢谢。
2021-05-11 23:18:37

据我了解,您可以通过 JavaScript 查看请求列表。它是?“我不知道怎么。”

但是可以提供帮助的一种解决方案是...

您可以使用以下代码拦截所有申请。如果您的 JavaScript 在加载页面的早期运行,您将能够从列表中获取大部分请求。

看看这篇文章有多酷

XMLHttpRequest.prototype.realSend = XMLHttpRequest.prototype.send;
XMLHttpRequest.prototype.send = function(value) {
    this.addEventListener("progress", function(){
        console.log("Loading. Here you can intercept...");
    }, false);
    this.realSend(value);
};
我明白没有必要。因为达到最终状态后,实例不会再触发任何事件。
2021-04-29 23:18:37
请求结束后是否有必要删除事件侦听器?
2021-05-10 23:18:37

我已经使用Resource Timing API编写了代码

function captureNetworkRequest(e) {
    var capture_network_request = [];
    var capture_resource = performance.getEntriesByType("resource");
    for (var i = 0; i < capture_resource.length; i++) {
        if (capture_resource[i].initiatorType == "xmlhttprequest" || capture_resource[i].initiatorType == "script" || capture_resource[i].initiatorType == "img") {
            if (capture_resource[i].name.indexOf('www.demo.com OR YOUR URL') > -1) {
                capture_network_request.push(capture_resource[i].name)
            }
        }
    }
    return capture_network_request;
}

您可以获得页面加载时要发出的请求的 URL,但检索有关加载时间的任何类型的统计数据都是不切实际的。进行此类资源请求的查询元素,例如script,linkimg

例如:

var urls = Array.prototype.map.call(
    document.querySelectorAll("link, img, script, iframe"), // Elements which request external resources
    function(e) { // Loop over and return their href/src
        return e.href || e.src; 
    }
);
好吧,如果您想要有关它们的任何真实统计数据,您当然必须重复这些请求。
2021-04-22 23:18:37
我的意思是由元素自己完成的重定向......就像图像的来源是一个重定向到图像的页面
2021-05-17 23:18:37