Selenium自动化测试中如何抓取网络请求响应及WebSocket信息

这篇具有很好参考价值的文章主要介绍了Selenium自动化测试中如何抓取网络请求响应及WebSocket信息。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

我们在使用Selenium测试Web或Electronjs/Cef框架应用时,有时候操作一个元素需要判断是否发送了请求以及请求的参数是否正确

我们可以通过,开启Chrome的性能日志来然后配合driver.get_log("performance")来查看请求,然后对Network相关的日子进行过滤,
实现如下:

获取Chrome性能日志

import json
from pprint import pprint
from selenium import webdriver

caps = {
    'browserName': 'chrome',
    'version': '',
    'platform': 'ANY',
    'goog:loggingPrefs': {'performance': 'ALL'},   # 记录性能日志
    'goog:chromeOptions': {'extensions': [], 'args': ['--headless']}  # 无界面模式
}

driver = webdriver.Chrome(desired_capabilities=caps)

driver.get('https://httpbin.org/get')
logs = driver.get_log("performance")
for item in logs:
    log = json.loads(item["message"])["message"]
    pprint(log)
    if "Network.response" in log["method"] or "Network.request" in log["method"] or "Network.webSocket" in log["method"]:
        pprint(log)

运行结果如下:

{'method': 'Network.responseReceived',
 'params': {'frameId': '2445B94E9E1DB51A1B1F4F3B0A3F03F5',
            'loaderId': 'D0DE1754D5C5F1E54DC3B0DB2A09ADD6',
            'requestId': 'D0DE1754D5C5F1E54DC3B0DB2A09ADD6',
            'response': {'connectionId': 0,
                         'connectionReused': False,
                         'encodedDataLength': -1,
                         'fromDiskCache': False,
                         'fromPrefetchCache': False,
                         'fromServiceWorker': False,
                         'headers': {'Content-Type': 'text/plain;charset=US-ASCII'},
                         'mimeType': 'text/plain',
                         'protocol': 'data',
                         'remoteIPAddress': '',
                         'remotePort': 0,
                         'securityState': 'secure',
                         'status': 200,
                         'statusText': 'OK',
                         'url': 'data:,'},
            'timestamp': 57524.763168,
            'type': 'Document'}}
{'method': 'Network.requestWillBeSent',
 'params': {'documentURL': 'https://httpbin.org/get',
            'frameId': '2445B94E9E1DB51A1B1F4F3B0A3F03F5',
            'hasUserGesture': False,
            'initiator': {'type': 'other'},
            'loaderId': '8BB61F3D2448E8BC91A4A5AD7E690673',
            'request': {'headers': {'Upgrade-Insecure-Requests': '1',
                                    'User-Agent': 'Mozilla/5.0 (Macintosh; '
                                                  'Intel Mac OS X 10_15_7) '
                                                  'AppleWebKit/537.36 (KHTML, '
                                                  'like Gecko) '
                                                  'HeadlessChrome/91.0.4472.114 '
                                                  'Safari/537.36'},
                        'initialPriority': 'VeryHigh',
                        'method': 'GET',
                        'mixedContentType': 'none',
                        'referrerPolicy': 'strict-origin-when-cross-origin',
                        'url': 'https://httpbin.org/get'},
            'requestId': '8BB61F3D2448E8BC91A4A5AD7E690673',
            'timestamp': 57524.961438,
            'type': 'Document',
            'wallTime': 1626501610.512192}}
{'method': 'Network.requestWillBeSentExtraInfo',
 'params': {'associatedCookies': [],
            'headers': {':authority': 'httpbin.org',
                        ':method': 'GET',
                        ':path': '/get',
                        ':scheme': 'https',
                        'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
                        'accept-encoding': 'gzip, deflate, br',
                        'accept-language': 'en-US',
                        'sec-fetch-dest': 'document',
                        'sec-fetch-mode': 'navigate',
                        'sec-fetch-site': 'none',
                        'sec-fetch-user': '?1',
                        'upgrade-insecure-requests': '1',
                        'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X '
                                      '10_15_7) AppleWebKit/537.36 (KHTML, '
                                      'like Gecko) '
                                      'HeadlessChrome/91.0.4472.114 '
                                      'Safari/537.36'},
            'requestId': '8BB61F3D2448E8BC91A4A5AD7E690673'}}
{'method': 'Network.responseReceivedExtraInfo',
 'params': {'blockedCookies': [],
            'headers': {'access-control-allow-credentials': 'true',
                        'access-control-allow-origin': '*',
                        'content-length': '754',
                        'content-type': 'application/json',
                        'date': 'Sat, 17 Jul 2021 06:00:11 GMT',
                        'server': 'gunicorn/19.9.0'},
            'requestId': '8BB61F3D2448E8BC91A4A5AD7E690673',
            'resourceIPAddressSpace': 'Public'}}
{'method': 'Network.responseReceived',
 'params': {'frameId': '2445B94E9E1DB51A1B1F4F3B0A3F03F5',
            'loaderId': '8BB61F3D2448E8BC91A4A5AD7E690673',
            'requestId': '8BB61F3D2448E8BC91A4A5AD7E690673',
            'response': {'connectionId': 12,
                         'connectionReused': False,
                         'encodedDataLength': 123,
                         'fromDiskCache': False,
                         'fromPrefetchCache': False,
                         'fromServiceWorker': False,
                         'headers': {'access-control-allow-credentials': 'true',
                                     'access-control-allow-origin': '*',
                                     'content-length': '754',
                                     'content-type': 'application/json',
                                     'date': 'Sat, 17 Jul 2021 06:00:11 GMT',
                                     'server': 'gunicorn/19.9.0'},
                         'mimeType': 'application/json',
                         'protocol': 'h2',
                         'remoteIPAddress': '52.201.75.114',
                         'remotePort': 443,
                         'requestHeaders': {':authority': 'httpbin.org',
                                            ':method': 'GET',
                                            ':path': '/get',
                                            ':scheme': 'https',
                                            'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
                                            'accept-encoding': 'gzip, deflate, '
                                                               'br',
                                            'accept-language': 'en-US',
                                            'sec-fetch-dest': 'document',
                                            'sec-fetch-mode': 'navigate',
                                            'sec-fetch-site': 'none',
                                            'sec-fetch-user': '?1',
                                            'upgrade-insecure-requests': '1',
                                            'user-agent': 'Mozilla/5.0 '
                                                          '(Macintosh; Intel '
                                                          'Mac OS X 10_15_7) '
                                                          'AppleWebKit/537.36 '
                                                          '(KHTML, like Gecko) '
                                                          'HeadlessChrome/91.0.4472.114 '
                                                          'Safari/537.36'},
                         'responseTime': 1626501611316.694,
                         'securityDetails': {'certificateId': 0,
                                             'certificateTransparencyCompliance': 'unknown',
                                             'cipher': 'AES_128_GCM',
                                             'issuer': 'Amazon',
                                             'keyExchange': 'ECDHE_RSA',
                                             'keyExchangeGroup': 'P-256',
                                             'protocol': 'TLS 1.2',
                                             'sanList': ['httpbin.org',
                                                         '*.httpbin.org'],
                                             'signedCertificateTimestampList': [],
                                             'subjectName': 'httpbin.org',
                                             'validFrom': 1608508800,
                                             'validTo': 1642636799},
                         'securityState': 'secure',
                         'status': 200,
                         'statusText': '',
                         'timing': {'connectEnd': 548.386,
                                    'connectStart': 26.524,
                                    'dnsEnd': 26.524,
                                    'dnsStart': 14.11,
                                    'proxyEnd': -1,
                                    'proxyStart': -1,
                                    'pushEnd': 0,
                                    'pushStart': 0,
                                    'receiveHeadersEnd': 803.146,
                                    'requestTime': 57524.962922,
                                    'sendEnd': 548.745,
                                    'sendStart': 548.611,
                                    'sslEnd': 548.36,
                                    'sslStart': 277.934,
                                    'workerFetchStart': -1,
                                    'workerReady': -1,
                                    'workerRespondWithSettled': -1,
                                    'workerStart': -1},
                         'url': 'https://httpbin.org/get'},
            'timestamp': 57525.76746,
            'type': 'Document'}}

获取请求及响应信息

由于日志中没有接口后台数据和响应数据,我们可以通过执行cdp名利获取,修改后代码如下

import json
from pprint import pprint
from selenium import webdriver
from selenium.common.exceptions import WebDriverException


caps = {
    'browserName': 'chrome',
    'version': '',
    'platform': 'ANY',
    'goog:loggingPrefs': {'performance': 'ALL'},
    'goog:chromeOptions': {'extensions': [], 'args': ['--headless']}
}

driver = webdriver.Chrome(desired_capabilities=caps)

driver.get('https://httpbin.org/get')
logs = driver.get_log("performance")
for item in logs:
    log = json.loads(item["message"])["message"]
    # if "Network.response" in log["method"] or "Network.request" in log["method"] or "Network.webSocket" in log["method"]:
        # pprint(log)
    if log["method"] == 'Network.responseReceived':
        url = log['params']['response']['url']
        if url == 'data:,':  # 过滤掉初始data页面,后续可以根据 log['params']['response']['type']过滤请求类型
            continue
        print('请求', url)
        request_id = log['params']['requestId']

        request_headers = log['params']['response']['requestHeaders']
        response_headers = log['params']['response']['headers']
        response_time = log['params']['response']['responseTime']
        status_code = log['params']['response']['status']

        try:
            request_data = driver.execute_cdp_cmd('Network.getRequestPostData', {'requestId': request_id})
        except WebDriverException:  # 没有后台数据获取时会有异常
            request_data = None

        response_body = driver.execute_cdp_cmd('Network.getResponseBody', {'requestId': request_id})['body']
        print('响应', response_body)

执行后显示如下:

请求 https://httpbin.org/get
响应 {
  "args": {}, 
  "headers": {
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9", 
    "Accept-Encoding": "gzip, deflate, br", 
    "Accept-Language": "en-US", 
    "Cache-Control": "max-age=0", 
    "Host": "httpbin.org", 
    "Sec-Fetch-Dest": "document", 
    "Sec-Fetch-Mode": "navigate", 
    "Sec-Fetch-Site": "none", 
    "Sec-Fetch-User": "?1", 
    "Upgrade-Insecure-Requests": "1", 
    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/91.0.4472.114 Safari/537.36", 
    "X-Amzn-Trace-Id": "Root=1-60f2dd9d-6533f9526707f25f7d6c38de"
  }, 
  "origin": "123.118.150.190", 
  "url": "https://httpbin.org/get"
}

实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

selenium获取请求响应,selenium,自动化测试,selenium,websocket,chromeselenium获取请求响应,selenium,自动化测试,selenium,websocket,chrome

如果对你有帮助的话,点个赞收个藏,给作者一个鼓励。也方便你下次能够快速查找。

如有不懂还要咨询下方小卡片,博主也希望和志同道合的测试人员一起学习进步

在适当的年龄,选择适当的岗位,尽量去发挥好自己的优势。

我的自动化测试开发之路,一路走来都离不每个阶段的计划,因为自己喜欢规划和总结,

测试开发视频教程、学习笔记领取传送门!!!
selenium获取请求响应,selenium,自动化测试,selenium,websocket,chrome文章来源地址https://www.toymoban.com/news/detail-594865.html

到了这里,关于Selenium自动化测试中如何抓取网络请求响应及WebSocket信息的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • selenium 自动化测试:如何搭建自动化测试环境,搭建环境过程应该注意的问题

    最近也有很多人私下问我,selenium学习难吗,基础入门的学习内容很多是3以前的版本资料,对于有基础的人来说,3到4的差别虽然有,但是不足以影响自己,但是对于没有学过的人来说,通过资料再到自己写的代码,发现有些东西没有,有些方法又不相同,导致脚本不能运行

    2024年02月10日
    浏览(53)
  • 如何使用Python自动化测试工具Selenium进行网页自动化?

    Selenium 是一个流行的Web自动化测试框架, 它支持多种编程语言和浏览器,并提供了丰富的API和工具来模拟用户在浏览器中的行为 。 Selenium可以通过代码驱动浏览器自动化测试流程,包括页面导航、元素查找、数据填充、点击操作等。 与PyAutoGUI和AutoIt相比, Selenium更适合于处

    2023年04月09日
    浏览(126)
  • 什么是Selenium?如何使用Selenium进行自动化测试?

      Selenium 是一种开源工具,用于在 Web 浏览器上执行自动化测试(使用任何 Web 浏览器进行 Web 应用程序测试)。   等等,先别激动,让我再次重申一下,Selenium 仅可以测试Web应用程序。我们既不能使用 Selenium 测试任何桌面(软件)应用程序,也不能测试任何移动应用程

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

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

    2024年02月11日
    浏览(61)
  • Selenium如何用于编写自动化测试脚本?

    Selenium如何用于编写自动化测试脚本?它提供了许多测试工具和API,可以与浏览器交互,模拟用户操作,检查网页的各个方面。下面是一些步骤,可以帮助你编写Selenium自动化测试脚本。 1、安装Selenium库和浏览器驱动程序 首先,你需要安装Selenium库和浏览器驱动程序,例如C

    2024年02月09日
    浏览(41)
  • 拥抱自动化测试,快速升职加薪丄Selenium+Pytest自动化测试框架教你如何做到

    引言 Selenium+Pytest自动化测试框架是目前最流行的自动化测试工具之一,其强大的功能和易用性援助许多开发人员和测试人员。 selenium自动化+ pytest测试框架禅道实战 选用的测试网址为我电脑本地搭建的禅道 conftest.py更改 config.ini更改 conf.py更改 page更改 page_element更改 page_obje

    2023年04月24日
    浏览(76)
  • Selenium 自动化测试如何优雅的解决图片验证码问题

    说到自动化测试那一定避不开登陆注册页面,而大多数情况下这两个简单的页面都存在一个小困难就是验证码,以前我的解决办法都是在测试环境粗暴的写死一个万能验证码,或者给程序一个10秒钟的线程阻塞,手动输入验证码以跳过这个步骤。这样就可以不那么优雅的实现

    2024年02月14日
    浏览(49)
  • 如何使用jenkins、ant、selenium、testng搭建自动化测试框架

    如果在你的理解中自动化测试就是在eclipse里面讲webdriver的包引入,然后写一些测试脚本,这就是你所说的自动化测试,其实这个还不能算是真正的自动化测试,你见过每次需要运行的时候还需要打开eclipse然后去选择运行文件吗?没有吧!应为那样真的是很low的!下面说一下

    2024年04月16日
    浏览(45)
  • 从零开始学习:如何使用Selenium和Python进行自动化测试?

    安装selenium 打开命令控制符输入:pip install -U selenium 火狐浏览器安装firebug:www.firebug.com,调试所有网站语言,调试功能 Selenium IDE 是嵌入到Firefox 浏览器中的一个插件,实现简单的浏览器操 作的录制与回放功能,IDE 录制的脚本可以可以转换成多种语言,从而帮助我们快速的开

    2024年04月23日
    浏览(83)
  • 【selenium自动化测试】如何定位页面元素,及对页面元素的操作方法

    selenium元素定位 ​selenium定位元素的方式有8种。 fild_element(by,value):by表示使用的定位方式,定位方式可以参见By类。value表示值,例如:根据id定位 By.ID,value=id属性的值。该方法返回元素对象,返回值如下: 这个返回结果说明:返回值为WebElement类的对象,元素在使用方法时

    2024年02月10日
    浏览(68)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包