【测试】selenium拦截Ajax(XHR)等异步请求数据
在使用Selenium进行Web自动化测试时,可以通过JavaScript注入的方式来获取Ajax(XMLHttpRequest, XHR)请求的数据。以下是一个简单的Python示例,展示如何使用Selenium和JavaScript来拦截Ajax请求的响应数据:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
# 设置浏览器的能力
dcap = DesiredCapabilities.CHROME
dcap["goog:loggingPrefs"] = {"performance": "ALL"}
# 启动Chrome驱动
driver = webdriver.Chrome(desired_capabilities=dcap)
# 打开网页
driver.get("http://example.com")
# 执行JavaScript代码来拦截所有的XHR请求
driver.execute_script("""
window.originalOpen = window.XMLHttpRequest.prototype.open;
window.XMLHttpRequest.prototype.open = function(method, url, async) {
this.addEventListener('load', function() {
console.log('Intercepted XHR:', {
method: method,
url: url,
async: async,
responseText: this.responseText
});
});
window.originalOpen.apply(this, arguments);
};
""")
# 进行页面操作,触发Ajax请求
# ...
# 获取控制台日志中的信息,即拦截到的XHR请求数据
entries = driver.get_log('performance')
for entry in entries:
message = json.loads(entry['message'])['message']
if 'xmlhttprequest' in message['params']['request']['url']:
print(message['params']['response']['body'])
# 清理工作
driver.quit()
这段代码首先设置了Chrome的启动参数以便于捕获性能日志,然后通过执行JavaScript脚本覆盖了XMLHttpRequest.prototype.open
方法,以便于拦截所有的XHR请求。当XHR请求加载时,它会通过控制台(console.log)输出请求的相关信息。最后,通过读取性能日志并解析其中的信息来获取XHR响应数据。
评论已关闭