selenium 捕获网络请求

这篇具有很好参考价值的文章主要介绍了selenium 捕获网络请求。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

写在前面

之前分享过CDP的知识,现在有一个需求需要在selenium自动化时捕获网络请求,这里记录一下。

书接上回:浏览器自动化必须知道CDP协议

实现

开启日志记录

首先,我们要开启浏览器的日志记录,首先需要配置一个capabilities,它允许定义浏览器的一些特性。

import json
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service

chrome_option = Options()

chrome_option.set_capability("goog:loggingPrefs", {"performance": "ALL"})


service = Service("./chromedriver-win64/chromedriver.exe")

driver = webdriver.Chrome(service=service, options=chrome_option)

在最新的selenium的版本中,是通过Options()去配置浏览器的一些属性,在这里通过配置'goog:loggingPrefs': {'performance': 'ALL'}来打开浏览器的性能日志记录。

获取日志

接下来我们尝试获取一下访问百度的日志

driver.get("https://www.baidu.com")

performance_log = driver.get_log("performance")

在访问百度后,通过get_log(“performance”)来获取性能日志,这是一个由字典组成的列表。这里我打印一个看一下格式

{
    'level': 'INFO', 
    'message': '{"message":{"method":"Network.requestWillBeSent","params":{"documentURL":"https://www.baidu.com/","frameId":"62715239374117F099DBA348C45736CD","hasUserGesture":false,"initiator":{"type":"other"},"loaderId":"C5F286A8A5744DEEB277D0718C4E34E8","redirectHasExtraInfo":false,"request":{"headers":{"Upgrade-Insecure-Requests":"1","User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36","sec-ch-ua":"\"Not/A)Brand\";v=\"99\", \"Google Chrome\";v=\"115\", \"Chromium\";v=\"115\"","sec-ch-ua-mobile":"?0","sec-ch-ua-platform":"\"Windows\""},"initialPriority":"VeryHigh","isSameSite":true,"method":"GET","mixedContentType":"none","referrerPolicy":"strict-origin-when-cross-origin","url":"https://www.baidu.com/"},"requestId":"C5F286A8A5744DEEB277D0718C4E34E8","timestamp":1508.943033,"type":"Document","wallTime":1692620664.219256}},"webview":"62715239374117F099DBA348C45736CD"}', 
    'timestamp': 1692620664216
}

可以看到,关键的信息都在message中,注意message中是一个json字段

{
  "message":{
    "method":"Network.requestWillBeSent",
    "params":{
      "documentURL":"https://www.baidu.com/",
      "frameId":"62715239374117F099DBA348C45736CD",
      "hasUserGesture":false,
      "initiator":{"type":"other"},
      "loaderId":"C5F286A8A5744DEEB277D0718C4E34E8",
      "redirectHasExtraInfo":false,
      "request":{
        "headers":{
          "Upgrade-Insecure-Requests":"1",
          "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36",
          "sec-ch-ua":"\"Not/A)Brand\";v=\"99\", \"Google Chrome\";v=\"115\", \"Chromium\";v=\"115\"","sec-ch-ua-mobile":"?0",
          "sec-ch-ua-platform":"\"Windows\""
        },
        "initialPriority":"VeryHigh",
        "isSameSite":true,
        "method":"GET",
        "mixedContentType":"none",
        "referrerPolicy":"strict-origin-when-cross-origin",
        "url":"https://www.baidu.com/"
      },
      "requestId":"C5F286A8A5744DEEB277D0718C4E34E8",
      "timestamp":1508.943033,
      "type":"Document",
      "wallTime":1692620664.219256
    }
  },
  "webview":"62715239374117F099DBA348C45736CD"
}

这是一个请求包的示例,大家看到method凡是以Network开头的都是网络请求。

获取网络返回包

我这个需求是想获取一个请求的返回包的数据,其实本身在performance日志中也有Network.response*相关的日志,但不是完整的请求包

所以,就需要requesetId这个字段了,通过CDP来获取

message = json.loads(packet.get("message")).get("message")
packet_method = message.get("method")
if "Network" in packet_method:
    request_id = message.get("params").get("requestId")
    resp = driver.execute_cdp_cmd('Network.getResponseBody', {'requestId': request_id})
    body = resp.get("body")

这里就可以将返回包完整的获取到了

如果有定制化需求,比如想获取某个链接的返回包等等,都可以去通过分析数据通过条件判断来处理

完整代码

最后附上完整测试代码文章来源地址https://www.toymoban.com/news/detail-845404.html

import json
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service

chrome_option = Options()

chrome_option.set_capability("goog:loggingPrefs", {"performance": "ALL"})


service = Service("./chromedriver-win64/chromedriver.exe")

driver = webdriver.Chrome(service=service, options=chrome_option)


driver.get("https://www.baidu.com")

performance_log = driver.get_log("performance")

for packet in performance_log:
    message = json.loads(packet.get("message")).get("message")
    packet_method = message.get("method")
    if "Network" in packet_method:
        request_id = message.get("params").get("requestId")
        try:
        	resp = driver.execute_cdp_cmd('Network.getResponseBody', {'requestId': request_id})
        	body = resp.get("body")
        	print(body)
        except:
            pass

到了这里,关于selenium 捕获网络请求的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 自动化测试工具——Selenium详解

    Selenium是一个用于Web应用程序测试的工具。是一个开源的Web的自动化测试工具,最初是为网站自动化测试而开发的,类型像我们玩游戏用的按键精灵,可以按指定的命令自动操作,不同是Selenium可以直接运行在浏览器上,它支持所有主流的浏览器,支持的浏览器包括IE(7, 8,

    2024年01月20日
    浏览(62)
  • 自动化测试工具Selenium的基本使用方法,软件测试基础

    browser.find_element(By.ID,‘kw’).send_keys(“美女”) browser.find_element_by_id(‘kw’).send_keys(‘性感’) 2.通过标签name属性进行定位 browser.find_element_by_name(“wd”).send_keys(“Linux”) browser.find_element(By.NAME,‘wd’).send_keys(“美女”) 3.通过标签名进行定位 browser.find_element_by_tag_name(“input”).

    2024年04月22日
    浏览(67)
  • 一文详解:自动化测试工具——Selenium

    Selenium是一个用于Web应用程序测试的工具。是一个开源的Web的自动化测试工具,最初是为网站自动化测试而开发的,类型像我们玩游戏用的按键精灵,可以按指定的命令自动操作,不同是Selenium可以直接运行在浏览器上,它支持所有主流的浏览器,支持的浏览器包括IE(7, 8,

    2024年01月16日
    浏览(59)
  • 如何使用自动化测试工具Selenium?

    哈喽,大家好,我是小浪。那么有一段时间没有更新了,还是在忙实习和秋招的事情,那么今天也是实习正式结束啦,开始继续更新我们的学习博客,后期主要是开发和测试的学习博客内容巨多,感兴趣的小伙伴们可以一键三连支持一下欧~ 目录 一、什么是自动化测试? 二、

    2024年02月11日
    浏览(61)
  • python自动化测试工具selenium

    selenium 是网页应用中最流行的自动化测试工具,可以用来做自动化测试或者浏览器爬虫等。官网地址为:Selenium。相对于另外一款web自动化测试工具QTP来说有如下优点: 免费开源轻量级,不同语言只需要一个体积很小的依赖包 支持多种系统,包括Windows,Mac,Linux 支持多种浏

    2024年02月08日
    浏览(83)
  • 自动化测试工具Selenium的语法续.

    OK,那么上篇博客我们介绍了如何搭建基于Java+selenium的环境,并且使用selenium的一些语法给大家演示了如何进行自动化测试的案例,那么本篇博客我们来继续学习selenium的一些其他的比较重要的语法,感谢关注,期待三连~ 目录 一、定位一组元素 二、下拉框处理 三、上传文件

    2024年02月10日
    浏览(58)
  • 自动化测试工具selenium的安装方法

    一、什么是selenium Selenium 是一套 Web网站 的程序自动化操作 解决方案。 通过它,我们可以写出自动化程序,像人一样在浏览器里操作web界面。 比如点击界面按钮,在文本框中输入文字 等操作。 Selenium 通过使用  WebDriver  支持市场上所有主流浏览器的自动化。 Webdriver 是一个

    2024年02月09日
    浏览(47)
  • 接口自动化测试 —— 工具、请求与响应

    1.工具介绍 postman :很主流的API测试工具,也是工作里面使用最广泛的研发工具。 JMeter: ApiPost: 2.安装postman: 安装好直接打开,不用注册。 1、同步通信: 客户端请求服务端必须有回应,在回应之前不能做别的操作,有缺陷,会造成排队、等待、堵塞。 当任务太多时,服

    2024年02月07日
    浏览(71)
  • Selenium教程:自动化浏览器测试工具

    Selenium是一款用于自动化浏览器测试的工具,它提供了一系列的API和功能,使得开发人员可以编写脚本来模拟用户在浏览器中的行为。无论是在Web应用程序的功能测试、性能测试还是数据抓取方面,Selenium都是一个强大且广泛使用的工具。 在开始使用Selenium之前,您需要进行安

    2024年02月07日
    浏览(82)
  • Web应用程序测试工具Selenium用法详解

    目录 一、引言 二、Selenium简介 三、Selenium安装与配置 1、安装Selenium 2、配置浏览器驱动 3、配置测试环境 四、Selenium用法详解 1、导入Selenium库和浏览器驱动 2、启动浏览器并打开网页 3、定位元素 4、执行操作 5、断言与验证 6、等待与隐式等待 7、关闭浏览器 五、总结与建议

    2024年02月02日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包