首页 > 解决方案 > 如何在 javascript 中捕获 xmlhttprequests 挂起计数

问题描述

如前所述,如何在 javascript 中捕获 xmlhttprequests 未决计数。我在 python 中使用 selenium。

想要捕获等待完成的 xmlhttprequests 的数量。

找到了一个有用的链接并尝试了答案中提到的以下javascript。但是没有正确理解并且总是将 XMLHttpRequest.active 设为零。任何人都可以解释逻辑或任何其他建议。

获取网页中发生的网络调用计数

来自用户https://stackoverflow.com/users/2887618/florent-b

我已经包含了动态注入屏幕的javascript。

jscript = ("(function() {" + 
"  var send = XMLHttpRequest.prototype.send;" + 
"  var release = function(){ --XMLHttpRequest.active };" + 
"  var onloadend = function(){ setTimeout(release, 1) };" + 
"  XMLHttpRequest.active = 0;" +
"  XMLHttpRequest.prototype.send = function() {" + 
"    ++XMLHttpRequest.active;" + 
"    this.addEventListener('loadend', onloadend, true);" + 
"    send.apply(this, arguments);" +
"  };})();")

print(jscript)

driver.execute_script(jscript)

isxmlhttpactive  = driver.execute_script("return (window.XMLHttpRequest.active);")

标签: javascriptpython-3.xselenium-webdriverxmlhttprequest

解决方案


目前我已经使用下面的逻辑来查找任何活动的 xhr 请求正在等待

            from bs4 import BeautifulSoup
            from requests import get
            from selenium import webdriver
            from msedge.selenium_tools import Edge, EdgeOptions
            import difflib
            import time


            path = r'c:/msedgedriver.exe'
            options = EdgeOptions()
            options.use_chromium = True
            options.add_argument('disable-gpu')
            driver = Edge(executable_path=path, options=options)
            driver.get(url)

            is_jquery_present = driver.execute_script("return (typeof jQuery != 'undefined');")

            if is_jquery_present == True:
                is_active_ajax_request  =   driver.execute_script("return ($.active);")
                

            while is_active_ajax_request >= 1:
                time.sleep(2)
                is_active_ajax_request =   driver.execute_script("return ($.active);")    

推荐阅读