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

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
'''

相关文章:

  • 【Springcloud微服务】Docker上篇
  • 数据结构课设——文章编辑系统
  • C#程序的递归方法调用
  • 项目启动 | 盘古信息助力鼎阳科技开启智能制造升级新征程
  • pytorch把图片打成patches
  • Linux下USB设备图像采集
  • mysql编程--从入门到入土
  • PPT的精细化优化与提升策略
  • Kubernetes中的Java微服务部署策略
  • 【深度学习】python之人工智能应用篇——图像生成技术(一)
  • 大数据面试-Hive
  • 用Java获取键盘输入数的个十百位数
  • 线代的学习(矩阵)
  • c语言回顾-结构体(2)
  • C++设计模式之适配器模式
  • SegmentFault for Android 3.0 发布
  • 5、React组件事件详解
  • Bootstrap JS插件Alert源码分析
  • Facebook AccountKit 接入的坑点
  • FineReport中如何实现自动滚屏效果
  • java8-模拟hadoop
  • java多线程
  • mongo索引构建
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • 阿里云前端周刊 - 第 26 期
  • 给github项目添加CI badge
  • 爬虫模拟登陆 SegmentFault
  • 一道闭包题引发的思考
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • #07【面试问题整理】嵌入式软件工程师
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • ${factoryList }后面有空格不影响
  • (1)Hilt的基本概念和使用
  • (2024,RWKV-5/6,RNN,矩阵值注意力状态,数据依赖线性插值,LoRA,多语言分词器)Eagle 和 Finch
  • (C#)一个最简单的链表类
  • (二)Kafka离线安装 - Zookeeper下载及安装
  • (附源码)springboot教学评价 毕业设计 641310
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (十一)图像的罗伯特梯度锐化
  • (推荐)叮当——中文语音对话机器人
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • (转载)Linux 多线程条件变量同步
  • **PHP分步表单提交思路(分页表单提交)
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • . NET自动找可写目录
  • .bat批处理(十一):替换字符串中包含百分号%的子串
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .Net 垃圾回收机制原理(二)
  • .net 微服务 服务保护 自动重试 Polly
  • .netcore 如何获取系统中所有session_如何把百度推广中获取的线索(基木鱼,电话,百度商桥等)同步到企业微信或者企业CRM等企业营销系统中...
  • .net开发日常笔记(持续更新)