Selenium 获取请求响应

'''
Python 3.7
selenium==3.141.0
urllib3==1.26.2
Chromium 109.0.5405.0 (32 位) 
'''
import json
from selenium import webdriver
from selenium.common.exceptions import WebDriverException
import timeoptions = webdriver.ChromeOptions()
# 谷歌浏览器位置
chrome_location = r'D:\\Program Files (x86)\\Google\Chrome\\Application\\chrome.exe'
# 谷歌浏览器驱动地址
chromedriver_path = r'D:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver_win32\\chromedriver.exe'options.binary_location = chrome_location
###################################################################################
# 写法一
# (网上还有其他的方法,有的会报错 可能是版本问题,selenium.common.exceptions.InvalidArgumentException: Message: invalid argument: log type 'performance' not found,
# 下面两种测试正常)caps = {'browserName': 'chrome','version': '','platform': 'ANY','goog:loggingPrefs': {'performance': 'ALL'},'goog:chromeOptions': {'extensions': [], 'args': ['--headless']}
}caps = {"browserName": "chrome",'goog:loggingPrefs': {'performance': 'ALL'}
}driver = webdriver.Chrome(executable_path=chromedriver_path, options=options, desired_capabilities=caps)
######################################################################################################################################################################
# 写法二 (建议用这种,selenium 4 测试也行)
# options.set_capability("goog:loggingPrefs", {"performance": "ALL", "browser": "ALL"})
# driver = webdriver.Chrome(executable_path=chromedriver_path, options=options)
#################################################################################### 查询的 IP
list_query = ['135.89.67.33', '34.66.45.22']for query in list_query:driver.get(f'http://ip-api.com/json/{query}')# 等待所有请求完成,可以用等待界面元素方法time.sleep(10)logs = driver.get_log("performance")for item in logs:# print(item)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']过滤请求类型continueprint('请求', url)request_id = log['params']['requestId']response_headers = log['params']['response']['headers']status_code = log['params']['response']['status']try:request_data = driver.execute_cdp_cmd('Network.getRequestPostData', {'requestId': request_id})except WebDriverException:  # 没有后台数据获取时会有异常request_data = Noneresponse_body = driver.execute_cdp_cmd('Network.getResponseBody', {'requestId': request_id})['body']print('响应', response_body)'''
输出:
请求 http://ip-api.com/json/135.89.67.33
响应 {"status":"success","country":"United States","countryCode":"US","region":"IN","regionName":"Indiana","city":"Indianapolis","zip":"46204","lat":39.7709,"lon":-86.1585,"timezone":"America/Indiana/Indianapolis","isp":"AT\u0026T Services","org":"AT\u0026T Services, Inc.","as":"","query":"135.89.67.33"}请求 http://ip-api.com/json/34.66.45.22
响应 {"status":"success","country":"United States","countryCode":"US","region":"IA","regionName":"Iowa","city":"Council Bluffs","zip":"","lat":41.2619,"lon":-95.8608,"timezone":"America/Chicago","isp":"Google LLC","org":"Google Cloud (us-central1)","as":"AS396982 Google LLC","query":"34.66.45.22"}
'''
'''
Python 3.8
selenium==4.21.0
urllib3==2.2.2
Chromium 109.0.5405.0 (32 位) 
'''
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.common.exceptions import WebDriverException
import json
import time# 谷歌浏览器位置
chrome_location = r'D:\\Program Files (x86)\\Google\Chrome\\Application\\chrome.exe'
# 谷歌浏览器驱动地址
chromedriver_path = r'D:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver_win32\\chromedriver.exe'# 启用性能日志
options = Options()
options.set_capability("goog:loggingPrefs", {"performance": "ALL", "browser": "ALL"})
options.binary_location = chrome_location
# 启动WebDriver
service = Service(executable_path=chromedriver_path)
driver = webdriver.Chrome(service=service, options=options)# 查询的 IP
list_query = ['135.89.67.33', '34.66.45.22']for query in list_query:driver.get(f'http://ip-api.com/json/{query}')# 等待所有请求完成,可以用等待界面元素方法time.sleep(10)logs = driver.get_log("performance")for item in logs:# print(item)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']过滤请求类型continueprint('请求', url)request_id = log['params']['requestId']response_headers = log['params']['response']['headers']status_code = log['params']['response']['status']try:request_data = driver.execute_cdp_cmd('Network.getRequestPostData', {'requestId': request_id})except WebDriverException:  # 没有后台数据获取时会有异常request_data = Noneresponse_body = driver.execute_cdp_cmd('Network.getResponseBody', {'requestId': request_id})['body']print('响应', response_body)
'''
参考:
https://blog.csdn.net/MXB_1220/article/details/131775148
https://blog.csdn.net/u014376732/article/details/133973141
https://www.cnblogs.com/szyicol/p/18093390
https://www.cnblogs.com/superhin/p/15023302.html
https://segmentfault.com/q/1010000043296964
'''

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/32354.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ffmpeg音视频开发从入门到精通——ffmpeg日志及目录操作

文章目录 FFMPEG1. 操作日志2. 文件移动和删除3. 操作目录重要函数 FFMPEG 1. 操作日志 日志级别 AV LOG ERROR AV LOG WARNING AV LOG INFO AV LOG DEBUG cmake_minimum_required(VERSION 3.27) project(FFmpeg_exercise) set(CMAKE_CXX_STANDARD 14)# 定义FFmpeg的安装路…

Java之Hutool/Guava/Apache Commons工具包项目实践

概述 Hutool是一个Java工具包,提供了丰富的工具类和方法,目的是简化开发任务提高开发效率;适用于需要快速开发和实现多种功能的场景,适合项目需要处理字符串、日期、文件等常见任务时~ toBeBetterJavaer/docs/common-tool/StringUtils.md at master itwanger/toBeBetterJavae…

转--Hadoop集群部署案例

模块简介 本模块主要练习Hadoop集群部署。 模块知识 ● 使用Linux基础命令 ● Hadoop集群搭建部署知识 环境准备 三台CentOS7操作系统的虚拟机 可以是3个Docker容器,也可以是三个VMWare/VirtualBox的虚拟机。三台虚拟机的最低配置为1核1G 20G。如果是虚拟机中…

pytorch把图片打成patches

我以图片shape[3,308,644],kernel 16*16为例。 1 首先先pad一下图片保证能被kernel完整分开。 先pad图片 C,H,Wt_img.shape pad_h (16 - H % 16) % 16 pad_w (16 - W % 16) % 16t_img F.pad(t_img, (0, pad_w, 0, pad_h))变成了[3,320,656] 那么320//1620 ,…

MK米客方德SD NAND的掉电保护机制

随着科技的飞速发展,数据存储设备在我们的生活和工作中扮演着越来越重要的角色。然而,数据安全问题也随之而来,尤其是面对突然的电源故障或意外断电,我们宝贵的数据可能会面临丢失的风险。MK米客方德公司深知这一点,因…

Linux中tar压缩与解压缩

TAR是Unix/Linux中常用的归档工具,它可以对文件或目录进行打包但不压缩,或者配合其他工具进行压缩。 压缩文件或目录 以下是一些基本的tar压缩命令: 1.压缩单个文件: tar -cvf archive.tar file1 2.压缩多个文件: t…

后仿真中的 《specify/endspecify block》之(5)使用specify进行时序仿真

前面我们学习了specify...endspecify 具体是什么东西。今天,我们使用specify block 中定义的延时,来进行一次仿真。看看到底是背后如何运转的呢。 一 基本例子 一个用 specify 指定延迟的与门逻辑描述如下: module and_gate(output Z,input A, B);assign Z = A & …

导入别人的net文件报红问题

1. 使用cmd命令 dotnet --info 查看自己使用的SDK版本 2.直接找到项目中的 global.json 文件,右键打开,直接修改版本为本机的SDK版本,就可以用了

CPU飙升100%怎么办?字节跳动面试官告诉你答案!

小北说在前面 CPU占用率突然飙升是技术人员常遇到的一个棘手问题,它是一个与具体技术无关的普遍挑战。 这个问题可以很简单,也可以相当复杂。 有时候,只是一个死循环在作祟。 有时候,是死锁导致的。 有时候,代码中有…

windows设置开机启动项

将文件放到下面路径即可实现每次开机启动 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup

【Flask】学习

参考B站视频:https://www.bilibili.com/video/BV1v7411M7us/ 目录 第一讲 什么是 flask 修饰器、路由规则 flask 变量规则,灵活传参数据类型:str、int、float(正浮点数,传int会报错)、path、uuid app.…

1108. IP 地址无效化

给你一个有效的 IPv4 地址 address,返回这个 IP 地址的无效化版本。 所谓无效化 IP 地址,其实就是用 "[.]" 代替了每个 "."。 示例 1: 输入:address "1.1.1.1" 输出:"1[.]1[.]1…

【最新】2025QS世界大学排名数据与得分明细数据集

数据简介:QS排名由Quacquarelli Symonds公司发布,是全球最具影响力的大学排名之一。它每年根据学术声誉、雇主声誉、师生比例、文献引用率、国际师资和国际学生比例等多项指标,对全球大学进行评估和排序。旨在为学生、学者和雇主提供权威的高…

如何使用小猪APP分发进行在线封装

什么是在线封装? 在线封装,顾名思义,就是通过网络将应用程序进行打包处理。这个过程不仅能节省时间,还能大大提升工作效率,让开发者专注于应用本身的优化。 小猪app封装www.ppzhu.net 为什么选择小猪APP分发&#xf…

YOLOv8改进 | SPPF | 双通道特征处理的池化结构——SPPFCSPC【全网独家】

💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 专栏目录 :《YOLOv8改进有效涨点》专栏介绍 & 专栏目录 | 目前已有40篇内容,内含各种Head检测头、损失函数Loss、…

java干货,spring声明式事务

文章目录 一、编程式事务1.1 什么是编程式事务1.2 编程式事务的优缺点 二、声明式事务2.1 什么是声明式事务2.2 声明式事务的优点2.3 Spring 事务管理器2.4 spring 声明式事务使用 一、编程式事务 1.1 什么是编程式事务 编程式事务是指通过手动编写程序来管理事务&#xff0c…

富唯智能打造的AGV搬运机器人转运机器人

AGV搬运机器人&转运机器人 AGV搬运机器人,内部搭载ICD系列核心控制器,拥有不同的移载平台,负载最高可达 1000kq;重复精度高达5mm;支持 Wi-Fi漫游,实现更稳健的网络数据交互;无轨化激光 SLAM 导航,配合 3D 避障相机…

深入了解 PHP Smarty:功能强大的模板引擎解析与应用指南

1. 介绍 在构建动态网页应用程序时,模板引擎是一种强大的工具,它能够帮助我们将应用程序的逻辑和视图分离开来,从而提高代码的可维护性和可扩展性。PHP Smarty 是其中一种流行的模板引擎,它被广泛应用于 PHP 开发领域。本节将介绍…

一篇文章搞懂动量算法

动量算法是一种在机器学习领域广泛应用的优化算法,用于加速梯度下降算法的收敛速度和提高模型的性能。本文将详细介绍动量算法的定义、产生原因、原理、用途和Python demo实现。 定义 动量算法是一种在梯度下降算法基础上引入了“动量”概念的优化算法。在梯度下降算法中,模型…

LangChain实战技巧之六:一起玩转config(上篇)——ConfigurableField

简介 Config 包含两大类内容, ConfigurableField 可配置的字段 configurable_alternatives 可配置的替代方案 分别使用两篇文章来给大家介绍,本篇先介绍ConfigurableField 常规介绍 一些资料会这样介绍 model_spec model.configurable_fields(model…