使用Selenium进行网页自动化测试

news/2025/1/14 22:34:38/

在使用Selenium进行网页自动化测试时,获取网络请求数据(即network数据)并不直接由Selenium库提供。Selenium主要用于与网页内容进行交互(如点击、输入文本、获取页面元素等),但它本身不拦截或记录网络请求。

然而,你可以结合Selenium与其他工具(如BrowserMob Proxy、Wireshark、mitmproxy、或Selenium自带的Chrome DevTools Protocol)来获取网络请求数据。下面是一些常用的方法:

方法一:使用BrowserMob Proxy

BrowserMob Proxy是一个Java程序,可以与Selenium配合使用来捕获HTTP和HTTPS流量。

  1. 安装BrowserMob Proxy

    • 下载并安装Java。
    • 下载BrowserMob Proxy。
  2. 设置Python代码

    • 使用browsermob-proxy-py库(Python的BrowserMob Proxy绑定)。
pip install browsermob-proxy-py
python">from selenium import webdriver
from browsermobproxy import Server
from selenium.webdriver.common.proxy import Proxy, ProxyType# 启动BrowserMob Proxy服务器
server = Server("/path/to/browsermob-proxy")
server.start()
proxy = server.create_proxy()# Selenium的Proxy配置
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--proxy-server={0}".format(proxy.proxy))# 创建一个Selenium WebDriver实例
driver = webdriver.Chrome(chrome_options=chrome_options)# 获取新会话的HAR(HTTP Archive)数据
proxy.new_har("example")# 导航到目标URL
driver.get("http://example.com")# 获取HAR数据
har_data = proxy.har# 打印HAR数据
print(har_data)# 关闭WebDriver和BrowserMob Proxy服务器
driver.quit()
server.stop()

方法二:使用mitmproxy

mitmproxy是一个强大的中间人代理,可以拦截、修改和检查HTTP和HTTPS流量。

  1. 安装mitmproxy

    pip install mitmproxy
    
  2. 设置mitmproxy与Selenium

python">from selenium import webdriver
from selenium.webdriver.common.proxy import Proxy, ProxyType
from mitmproxy import options
from mitmproxy.tools.dump import DumpMaster
from mitmproxy import http# 配置mitmproxy监听端口
options = options.Options(listen_host='127.0.0.1', listen_port=8080)# 定义处理HTTP请求的类
class Interceptor:def __init__(self):self.flows = []def request(self, flow: http.HTTPFlow) -> None:self.flows.append(flow)# 启动mitmproxy
m = DumpMaster(options)
interceptor = Interceptor()
m.addons.add(interceptor)
try:m.run()
except KeyboardInterrupt:m.shutdown()# 配置Selenium的Proxy
proxy = Proxy({'proxyType': ProxyType.MANUAL,'httpProxy': '127.0.0.1:8080','sslProxy': '127.0.0.1:8080'
})chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--proxy-server=http://127.0.0.1:8080")# 创建一个Selenium WebDriver实例
driver = webdriver.Chrome(chrome_options=chrome_options)# 导航到目标URL
driver.get("http://example.com")# 获取捕获的HTTP请求
for flow in interceptor.flows:print(flow.request.url)# 关闭WebDriver
driver.quit()

注意:运行mitmproxy可能需要你配置证书以捕获HTTPS流量。

方法三:使用Chrome DevTools Protocol(CDP)

Chrome DevTools Protocol允许你与Chrome浏览器进行低级别的通信,包括获取网络请求数据。Selenium 4+提供了对CDP的直接支持。

python">from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
import time# 配置Chrome选项
chrome_options = Options()
chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")  # 连接到已打开的Chrome实例# 创建WebDriver实例
driver = webdriver.Chrome(service=Service(), options=chrome_options)# 导航到目标URL
driver.get("http://example.com")# 使用CDP获取网络请求数据
# 需要导入CDP的库或使用selenium的execute_cdp_cmd方法
# 示例代码取决于你如何配置和获取CDP数据
# driver.execute_cdp_cmd('Network.enable', {})
# driver.execute_cdp_cmd('Network.setCaptureMode', {"mode": "includeAll"})
# network_logs = driver.execute_cdp_cmd('Network.getAllRequests', {})
# print(network_logs)# 这里仅是一个示例,你需要根据CDP文档来实现具体功能# 关闭WebDriver
driver.quit()

这种方法要求你事先手动打开Chrome浏览器并配置远程调试端口(通常是9222)。

注意事项

  • 确保你的Chrome浏览器版本与Selenium WebDriver版本兼容。
  • 使用HTTPS时,可能需要处理SSL证书问题。
  • 在处理网络请求数据时,确保遵守相关法律法规和隐私政策。

通过以上方法,你可以在使用Selenium进行网页自动化测试时获取网络请求数据。


http://www.ppmy.cn/news/1563148.html

相关文章

贪心算法笔记

贪心算法笔记 大概内容 贪心就是对于一个问题有很多个步骤,我们在每一个步骤中都选取最优的那一个,最后得出答案。就是在一些函数中可行,但是有些比如二次函数,因为它的转折点不一定最优,就是不可行的。那么如何判断贪心呢?有这么几种 看时间复杂度,一般的就是 O ( n…

从前端视角看设计模式之创建型模式篇

设计模式简介 "设计模式"源于GOF(四人帮)合著出版的《设计模式:可复用的面向对象软件元素》,该书第一次完整科普了软件开发中设计模式的概念,他们提出的设计模式主要是基于以下的面向对象设计原则&#xff…

一学就废|Python基础碎片,OS模块

Python 中的操作系统模块提供了与操作系统交互的功能。操作系统属于 Python 的标准实用程序模块。该模块提供了一种使用依赖于操作系统的功能的可移植方式。os和os. path模块包括许多与文件系统交互的函数。 Python-OS 模块函数 我们将讨论 Python os 模块的一些重要功能&…

正点原子STM32F103战舰版电容触摸键学习

一、tpad.h代码 #ifndef __TPAD_H #define __TPAD_H#include "./SYSTEM/sys/sys.h"/******************************************************************************************/ /* TPAD 引脚 及 定时器 定义 *//* 我们使用定时器的输入捕获功能, 对TPAD进行检…

20250110_ PyTorch中的张量操作

文章目录 前言1、torch.cat 函数2、索引、维度扩展和张量的广播3、切片操作3.1、 encoded_first_node3.2、probs 4、长难代码分析4.1、selected4.1.1、multinomial(1)工作原理: 总结 前言 1、torch.cat 函数 torch.cat 函数将两个张量拼接起来,具体地是…

第27章 汇编语言--- 设备驱动开发基础

汇编语言是低级编程语言的一种,它与特定的计算机架构紧密相关。在设备驱动开发中,汇编语言有时用于编写性能关键的部分或直接操作硬件,因为它是接近机器语言的代码,可以提供对硬件寄存器和指令集的直接访问。 要展开源代码详细叙…

Python单例模式的代码实现和原理

Python单例设计模式的代码实现 import threading import timeclass Singleton(object): def __new__(cls, *args, **kw):if not hasattr(cls, _instance):orig super(Singleton, cls)cls._instance orig.__new__(cls, *args, **kw)return cls._instanceclass Bus(Singleton…

数据链路层-STP

生成树协议STP(Spanning Tree Protocol) 它的实现目标是:在包含有物理环路的网络中,构建出一个能够连通全网各节点的树型无环逻辑拓扑。 选举根交换机: 选举根端口: 选举指定端口: 端口名字&…