python selenium 获取接口数据的实现


Posted in Python onDecember 07, 2020

python selenium 获取接口数据。

selenium没有直接提供查询的函数,但是可以通过webdriver提供的API查询,使用的函数是Network.getResponseBody

webdriver提供的API文档:https://chromedevtools.github.io/devtools-protocol/tot/Network/

Network.getResponseBody文档说明:

python selenium 获取接口数据的实现

Network.getResponseBody的参数是requestid,requestid是webdriver每个请求自动生成的惟一ID,拿到requestid就能拿到请求返回的内容。

如何获取requestid?创建webdriver对象时配置信息设置获取performance,即可获取每个请求的日志信息,然后通过对日志信息的检索找到对应的requestid。

获取日志信息的webdriver创建代码(注意,必须传入配置信息才能获取日志信息):

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
import time
 
caps = {
  'browserName': 'chrome',
  'loggingPrefs': {
    'browser': 'ALL',
    'driver': 'ALL',
    'performance': 'ALL',
  },
  'goog:chromeOptions': {
    'perfLoggingPrefs': {
      'enableNetwork': True,
    },
    'w3c': False, 
  },
}
driver = webdriver.Chrome(desired_capabilities=caps)
 
driver.get('https://partner.oceanengine.com/union/media/login/')
# 必须等待一定的时间,不然会报错提示获取不到日志信息,因为絮叨等所有请求结束才能获取日志信息
time.sleep(3)
 
request_log = driver.get_log('performance')

打印request_log是一个数组,然后遍历request_log检索需要获取的url对应的requestid,比如需要获取https://s3.pstatp.com/bytecom/resource/union_web2/media/manifest.json对应的requestid,并且获取接口内容:

for i in range(len(request_log)):
  message = json.loads(request_log[i]['message'])
  message = message['message']['params']
  # .get() 方式获取是了避免字段不存在时报错
  request = message.get('request')
  if(request is None):
    continue
 
  url = request.get('url')
  if(url == "https://s3.pstatp.com/bytecom/resource/union_web2/media/manifest.json"):
    # 得到requestId
    print(message['requestId'])
    # 通过requestId获取接口内容
    content = driver.execute_cdp_cmd('Network.getResponseBody', {'requestId': message['requestId']})
    print(content)
    break

完整代码:

import json
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
import time
 
caps = {
  'browserName': 'chrome',
  'loggingPrefs': {
    'browser': 'ALL',
    'driver': 'ALL',
    'performance': 'ALL',
  },
  'goog:chromeOptions': {
    'perfLoggingPrefs': {
      'enableNetwork': True,
    },
    'w3c': False, 
  },
}
driver = webdriver.Chrome(desired_capabilities=caps)
 
driver.get('https://partner.oceanengine.com/union/media/login/')
# 必须等待一定的时间,不然会报错提示获取不到日志信息,因为絮叨等所有请求结束才能获取日志信息
time.sleep(3)
 
request_log = driver.get_log('performance')
print(request_log)
 
for i in range(len(request_log)):
  message = json.loads(request_log[i]['message'])
  message = message['message']['params']
  # .get() 方式获取是了避免字段不存在时报错
  request = message.get('request')
  if(request is None):
    continue
 
  url = request.get('url')
  if(url == "https://s3.pstatp.com/bytecom/resource/union_web2/media/manifest.json"):
    # 得到requestId
    print(message['requestId'])
    # 通过requestId获取接口内容
    content = driver.execute_cdp_cmd('Network.getResponseBody', {'requestId': message['requestId']})
    print(content)
    break

到此这篇关于python selenium 获取接口数据的实现的文章就介绍到这了,更多相关python selenium 获取接口数据内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python生成验证码实例
Aug 21 Python
在Python中操作列表之list.extend()方法的使用
May 20 Python
Python字符编码判断方法分析
Jul 01 Python
Tesserocr库的正确安装方式
Oct 19 Python
python matplotlib画图库学习绘制常用的图
Mar 19 Python
Python后台开发Django会话控制的实现
Apr 15 Python
手机使用python操作图片文件(pydroid3)过程详解
Sep 25 Python
利用matplotlib实现根据实时数据动态更新图形
Dec 13 Python
python实现简单坦克大战
Mar 27 Python
Python BeautifulReport可视化报告代码实例
Apr 13 Python
一文轻松掌握python语言命名规范规则
Jun 18 Python
Python jiaba库的使用详解
Nov 23 Python
C++和python实现阿姆斯特朗数字查找实例代码
Dec 07 #Python
selenium判断元素是否存在的两种方法小结
Dec 07 #Python
pycharm实现猜数游戏
Dec 07 #Python
Python Selenium XPath根据文本内容查找元素的方法
Dec 07 #Python
Selenium关闭INFO:CONSOLE提示的解决
Dec 07 #Python
pyqt5实现井字棋的示例代码
Dec 07 #Python
Selenium环境变量配置(火狐浏览器)及验证实现
Dec 07 #Python
You might like
php生成随机密码的三种方法小结
2010/09/04 PHP
PHP中功能强大却很少使用的函数实例小结
2016/11/10 PHP
PHP自动识别当前使用移动终端
2018/05/21 PHP
php实现每日签到功能
2018/11/29 PHP
PHP生成随机码的思路与方法实例探索
2019/04/11 PHP
Gambit vs ForZe BO3 第三场 2.13
2021/03/10 DOTA
彻底搞懂JS无缝滚动代码
2007/01/03 Javascript
原生javascript和jquery判断浏览器版本等信息
2013/07/04 Javascript
javascript实现数字验证码的简单实例
2014/02/10 Javascript
js解决select下拉选不中问题
2014/10/14 Javascript
AngularJS入门教程之Hello World!
2014/12/06 Javascript
超详细的javascript数组方法汇总
2015/11/21 Javascript
Angular.JS利用ng-disabled属性和ng-model实现禁用button效果
2017/04/05 Javascript
input file样式修改以及图片预览删除功能详细概括(推荐)
2017/08/17 Javascript
vue2.0使用swiper组件实现轮播效果
2017/11/27 Javascript
three.js实现3D模型展示的示例代码
2017/12/31 Javascript
vue.js element-ui tree树形控件改iview的方法
2018/03/29 Javascript
详解ES6系列之私有变量的实现
2018/11/21 Javascript
Vue在chrome44偶现点击子元素事件无法冒泡的解决方法
2019/12/15 Javascript
JS使用Chrome浏览器实现调试线上代码
2020/07/23 Javascript
全面解析js中的原型,原型对象,原型链
2021/01/25 Javascript
[01:54]TI珍贵瞬间系列(三):翻盘
2020/08/28 DOTA
python简单获取本机计算机名和IP地址的方法
2015/06/03 Python
JS设计模式之责任链模式实例详解
2018/02/03 Python
django使用xlwt导出excel文件实例代码
2018/02/06 Python
如何不用安装python就能在.NET里调用Python库
2019/07/12 Python
查看Python依赖包及其版本号信息的方法
2019/08/13 Python
解决Jupyter无法导入已安装的 module问题
2020/04/17 Python
Python Request类源码实现方法及原理解析
2020/08/17 Python
torchxrayvision包安装过程(附pytorch1.6cpu版安装)
2020/08/26 Python
Java里面StringBuilder和StringBuffer有什么区别
2016/06/06 面试题
茶叶店创业计划书范文
2014/01/19 职场文书
仓库文员岗位职责
2014/04/06 职场文书
Redis6.0搭建集群Redis-cluster的方法
2021/05/08 Redis
使用pandas或numpy处理数据中的空值(np.isnan()/pd.isnull())
2021/05/14 Python
草系十大最强宝可梦,纸片人上榜,榜首大家最熟悉
2022/03/18 日漫