当前位置: 首页 > article >正文

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

在使用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
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

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的直接支持。

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.kler.cn/a/503381.html

相关文章:

  • 贪心算法详细讲解(沉淀中)
  • Linux创建server服务器实现多方信息收发
  • 基于“大型园区”网络设计
  • 超详细-java-uniapp小程序-引导关注公众号、判断用户是否关注公众号
  • 【JVM-2.3】深入解析JVisualVM:Java性能监控与调优利器
  • Mac——Cpolar内网穿透实战
  • jupyter ai 结合local llm 实现思路
  • 复健第一天之[SWPUCTF 2022 新生赛]奇妙的MD5
  • 【Vue3 入门到实战】1. 创建Vue3工程
  • 信创改造-龙蜥操作系统搭载MySql、Tomcat等服务
  • 微信小程序获取当前页面路径,登录成功后重定向回原页面
  • 使用Flink-JDBC将数据同步到Doris
  • 【华为路由/交换机的telnet远程设置】
  • 重邮+数字信号处理实验七:用 MATLAB 设计 IIR 数字滤波器
  • DATACOM-防火墙-复习-实验
  • Swift语言的软件工程
  • 大语言模型LLM推理框架简单总结
  • 【汇编】汇编编程中的指令传参方式
  • 卡通风格渲染
  • 爬虫逆向学习(十五):Akamai 3.0反爬分析与sensor-data算法逆向经验
  • 基于微信小程序的游泳馆管理系统设计与实现(LW+源码+讲解)
  • 平滑算法 效果比较
  • Linux简介和环境搭建
  • 005__ubuntu终端说明、linux命令
  • 《重生到现代之从零开始的C++生活》—— 入门基础语法
  • 【算法】复制含有随机指针节点的链表