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 获取进程pid号的方法
Mar 10 Python
Python操作CouchDB数据库简单示例
Mar 10 Python
python中日志logging模块的性能及多进程详解
Jul 18 Python
python调用webservice接口的实现
Jul 12 Python
解决django 新增加用户信息出现错误的问题
Jul 28 Python
python django生成迁移文件的实例
Aug 31 Python
使用python绘制温度变化雷达图
Oct 18 Python
python3 webp转gif格式的实现示例
Dec 10 Python
python画图常规设置方式
Mar 05 Python
python实现二分类和多分类的ROC曲线教程
Jun 15 Python
Linux系统下升级pip的完整步骤
Jan 31 Python
PyQt 如何创建自定义QWidget
Mar 24 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
PhpMyAdmin中无法导入sql文件的解决办法
2010/01/08 PHP
php操作MongoDB基础教程(连接、新增、修改、删除、查询)
2014/03/25 PHP
CI框架整合widget(页面格局)的方法
2016/05/17 PHP
thinkphp表单上传文件并将文件路径保存到数据库中
2016/07/28 PHP
原生js实现跨浏览器获取鼠标按键的值
2013/04/08 Javascript
JavaScript 实现鼠标拖动元素实例代码
2014/02/24 Javascript
获取阴历(农历)和当前日期的js代码
2016/02/15 Javascript
EXT中单击button按钮grid添加一行(光标位置可设置)的实例代码
2016/06/02 Javascript
jQuery实现的仿百度,仿谷歌搜索下拉框效果示例
2016/12/30 Javascript
微信小程序实战之自定义toast(6)
2017/04/18 Javascript
详解vue组件通信的三种方式
2017/06/30 Javascript
Vue.js进阶知识点总结
2018/04/01 Javascript
angularJS自定义directive之带参方法传递详解
2018/10/09 Javascript
vue实现双向绑定和依赖收集遇到的坑
2018/11/29 Javascript
Js数组扁平化实现方法代码总汇
2020/11/11 Javascript
微信小程序实现通讯录列表展开收起
2020/11/18 Javascript
[57:12]完美世界DOTA2联赛循环赛 Inki vs Matador BO2第一场 10.31
2020/11/02 DOTA
python计算一个序列的平均值的方法
2015/07/11 Python
python通过文件头判断文件类型
2015/10/30 Python
Python的collections模块中的OrderedDict有序字典
2016/07/07 Python
Python虚拟环境virtualenv的安装与使用详解
2017/05/28 Python
CentOS中升级Python版本的方法详解
2017/07/10 Python
Python如何通过subprocess调用adb命令详解
2017/08/27 Python
Python参数类型以及常见的坑详解
2019/07/08 Python
python实现两张图片拼接为一张图片并保存
2019/07/16 Python
关于阿里云oss获取sts凭证 app直传 python的实例
2019/08/20 Python
VSCode基础使用与VSCode调试python程序入门的图文教程
2020/03/30 Python
浅谈numpy中函数resize与reshape,ravel与flatten的区别
2020/06/18 Python
Python用dilb提取照片上人脸的示例
2020/10/26 Python
Django权限控制的使用
2021/01/07 Python
SIXPAD智能健身仪英国官网:革命性的训练装备品牌
2018/09/27 全球购物
社区党务工作总结2015
2015/05/19 职场文书
白银帝国观后感
2015/06/17 职场文书
2015初中团支部工作总结
2015/07/21 职场文书
2019大学生社会实践报告汇总
2019/08/16 职场文书
vue引入Excel表格插件的方法
2021/04/28 Vue.js