获取网页中发生的网络通话次数 [英] Get count of network calls happening in a web page

查看:54
本文介绍了获取网页中发生的网络通话次数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

因此,基本上,我正在尝试使用硒设计一种通用方法,该方法等待所有后台网络调用完成(包括任何Ajax,Angular,API调用).我知道有一种方法可以使用 JQuery.active 来获取活动的ajax数量,但这仅在应用程序基于JQuery框架构建时才有效.而且,我想要等待所有网络调用完成的东西,而不是仅针对Ajax的东西.

So basically I'm trying to design a generic method using selenium, that waits for all the background network calls to finish (Including any Ajax, Angular, API calls). I know there is a way to get number of active ajax using JQuery.active, but that works only when the application is build upon JQuery framework. Moreover, i want something that waits for all the network calls to finish and not something specific to Ajax alone.

所以在这里,我正在尝试获取当前在后台发生的网络呼叫数,并等待其为零.

So here i'm trying to get the number of network calls that are happening currently in the background and wait for it to be zero.

但是,这是我的处理想法,欢迎任何新的想法或建议.

However, that's my idea of handling it, any new ideas or suggestions are welcomed.

推荐答案

下面是一个示例,用于等待Chrome没有任何待处理的Ajax请求:

Here's an example to wait for no pending Ajax request with Chrome:

from selenium import webdriver
from selenium.webdriver.remote.webdriver import WebDriver
from selenium.webdriver.support.ui import WebDriverWait
import json


def send_chrome(driver, cmd, params={}) :
  resource = "/session/%s/chromium/send_command_and_get_result" % driver.session_id
  url = driver.command_executor._url + resource
  body = json.dumps({'cmd': cmd, 'params': params})
  response = driver.command_executor._request('POST', url, body)
  if response.get('status'):
    raise Exception(response.get('value'))
  return response.get('value')

def extend_xhr_chrome(driver) :
  send_chrome(driver, "Page.addScriptToEvaluateOnNewDocument", {\
      "source":
        "(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);"
        "  };"
        "})();"
    })

def is_xhr_idle_chrome(driver) :
    return send_chrome(driver, 'Runtime.evaluate', {\
      'returnByValue': True,\
      'expression': "XMLHttpRequest.active == 0"
    })['result']['value']


# launch Chrome
driver = webdriver.Chrome()

# extend XMLHttpRequest
extend_xhr_chrome(driver)

driver.get("https://stackoverflow.com")

# wait for no pending request
WebDriverWait(driver, 20, 0.08) \
  .until(is_xhr_idle_chrome)

这篇关于获取网页中发生的网络通话次数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆