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

打印 上一主题 下一主题

主题 1019|帖子 1019|积分 3057

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
在使用Selenium进行网页自动化测试时,获取网络请求数据(即network数据)并不直接由Selenium库提供。Selenium重要用于与网页内容进行交互(如点击、输入文本、获取页面元素等),但它自己不拦截或记录网络请求。
然而,你可以联合Selenium与其他工具(如BrowserMob Proxy、Wireshark、mitmproxy、或Selenium自带的Chrome DevTools Protocol)来获取网络请求数据。下面是一些常用的方法:
方法一:使用BrowserMob Proxy

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

  • 安装BrowserMob Proxy

    • 下载并安装Java。
    • 下载BrowserMob Proxy。

  • 设置Python代码

    • 使用browsermob-proxy-py库(Python的BrowserMob Proxy绑定)。

  1. pip install browsermob-proxy-py
复制代码
  1. from selenium import webdriver
  2. from browsermobproxy import Server
  3. from selenium.webdriver.common.proxy import Proxy, ProxyType
  4. # 启动BrowserMob Proxy服务器
  5. server = Server("/path/to/browsermob-proxy")
  6. server.start()
  7. proxy = server.create_proxy()
  8. # Selenium的Proxy配置
  9. chrome_options = webdriver.ChromeOptions()
  10. chrome_options.add_argument("--proxy-server={0}".format(proxy.proxy))
  11. # 创建一个Selenium WebDriver实例
  12. driver = webdriver.Chrome(chrome_options=chrome_options)
  13. # 获取新会话的HAR(HTTP Archive)数据
  14. proxy.new_har("example")
  15. # 导航到目标URL
  16. driver.get("http://example.com")
  17. # 获取HAR数据
  18. har_data = proxy.har
  19. # 打印HAR数据
  20. print(har_data)
  21. # 关闭WebDriver和BrowserMob Proxy服务器
  22. driver.quit()
  23. server.stop()
复制代码
方法二:使用mitmproxy

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

  • 安装mitmproxy
    1. pip install mitmproxy
    复制代码
  • 设置mitmproxy与Selenium
  1. from selenium import webdriver
  2. from selenium.webdriver.common.proxy import Proxy, ProxyType
  3. from mitmproxy import options
  4. from mitmproxy.tools.dump import DumpMaster
  5. from mitmproxy import http
  6. # 配置mitmproxy监听端口
  7. options = options.Options(listen_host='127.0.0.1', listen_port=8080)
  8. # 定义处理HTTP请求的类
  9. class Interceptor:
  10.     def __init__(self):
  11.         self.flows = []
  12.     def request(self, flow: http.HTTPFlow) -> None:
  13.         self.flows.append(flow)
  14. # 启动mitmproxy
  15. m = DumpMaster(options)
  16. interceptor = Interceptor()
  17. m.addons.add(interceptor)
  18. try:
  19.     m.run()
  20. except KeyboardInterrupt:
  21.     m.shutdown()
  22. # 配置Selenium的Proxy
  23. proxy = Proxy({
  24.     'proxyType': ProxyType.MANUAL,
  25.     'httpProxy': '127.0.0.1:8080',
  26.     'sslProxy': '127.0.0.1:8080'
  27. })
  28. chrome_options = webdriver.ChromeOptions()
  29. chrome_options.add_argument("--proxy-server=http://127.0.0.1:8080")
  30. # 创建一个Selenium WebDriver实例
  31. driver = webdriver.Chrome(chrome_options=chrome_options)
  32. # 导航到目标URL
  33. driver.get("http://example.com")
  34. # 获取捕获的HTTP请求
  35. for flow in interceptor.flows:
  36.     print(flow.request.url)
  37. # 关闭WebDriver
  38. driver.quit()
复制代码
注意:运行mitmproxy大概必要你配置证书以捕获HTTPS流量。
方法三:使用Chrome DevTools Protocol(CDP)

Chrome DevTools Protocol允许你与Chrome浏览器进行低级别的通信,包括获取网络请求数据。Selenium 4+提供了对CDP的直接支持。
  1. from selenium import webdriver
  2. from selenium.webdriver.chrome.service import Service
  3. from selenium.webdriver.chrome.options import Options
  4. from selenium.webdriver.common.by import By
  5. import time
  6. # 配置Chrome选项
  7. chrome_options = Options()
  8. chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")  # 连接到已打开的Chrome实例
  9. # 创建WebDriver实例
  10. driver = webdriver.Chrome(service=Service(), options=chrome_options)
  11. # 导航到目标URL
  12. driver.get("http://example.com")
  13. # 使用CDP获取网络请求数据
  14. # 需要导入CDP的库或使用selenium的execute_cdp_cmd方法
  15. # 示例代码取决于你如何配置和获取CDP数据
  16. # driver.execute_cdp_cmd('Network.enable', {})
  17. # driver.execute_cdp_cmd('Network.setCaptureMode', {"mode": "includeAll"})
  18. # network_logs = driver.execute_cdp_cmd('Network.getAllRequests', {})
  19. # print(network_logs)
  20. # 这里仅是一个示例,你需要根据CDP文档来实现具体功能
  21. # 关闭WebDriver
  22. driver.quit()
复制代码
这种方法要求你事先手动打开Chrome浏览器并配置远程调试端口(通常是9222)。
注意事项



  • 确保你的Chrome浏览器版本与Selenium WebDriver版本兼容。
  • 使用HTTPS时,大概必要处理SSL证书问题。
  • 在处理网络请求数据时,确保遵守相关法律法规和隐私政策。
通过以上方法,你可以在使用Selenium进行网页自动化测试时获取网络请求数据。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

欢乐狗

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表