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读写配置文件的方法
Jun 03 Python
深入解析Python中函数的参数与作用域
Mar 20 Python
python实现的多线程端口扫描功能示例
Jan 21 Python
Golang与python线程详解及简单实例
Apr 27 Python
Python 3.x读写csv文件中数字的方法示例
Aug 29 Python
python音频处理用到的操作的示例代码
Oct 27 Python
python中使用正则表达式的后向搜索肯定模式(推荐)
Nov 11 Python
Python比较2个时间大小的实现方法
Apr 10 Python
TensorFlow 滑动平均的示例代码
Jun 19 Python
详解Django CAS 解决方案
Oct 30 Python
Python偏函数Partial function使用方法实例详解
Jun 17 Python
详解Pycharm第三方库的安装及使用方法
Dec 29 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/02/20 PHP
PHP fastcgi模式上传大文件(大约有300多K)报错
2014/09/28 PHP
smarty模板引擎之分配数据类型
2015/03/30 PHP
phpmailer绑定邮箱的实现方法
2016/12/01 PHP
PHP array_shift()用法实例分析
2019/01/07 PHP
php使用fputcsv实现大数据的导出操作详解
2020/02/27 PHP
javascript实现的DES加密示例
2013/10/30 Javascript
MyEclipse取消验证Js的两种方法
2013/11/14 Javascript
js简单实现删除记录时的提示效果
2013/12/05 Javascript
iframe父页面获取子页面参数的方法
2014/02/21 Javascript
javascript实现的元素拖动函数宿主为浏览器
2014/07/21 Javascript
JavaScript异步加载浅析
2014/12/28 Javascript
javascript判断网页是关闭还是刷新
2015/09/12 Javascript
jquery实现手风琴效果
2015/11/20 Javascript
使用JavaScript实现表格编辑器(实例讲解)
2017/08/02 Javascript
深入浅析Vue不同场景下组件间的数据交流
2017/08/15 Javascript
Nodejs模块载入运行原理
2018/02/23 NodeJs
Vue三种常用传值示例(父传子、子传父、非父子)
2018/07/24 Javascript
layer弹出层父子页面事件相互调用方法
2018/08/17 Javascript
详解vue-cli脚手架中webpack配置方法
2018/08/22 Javascript
微信小程序传值以及获取值方法的详解
2019/04/29 Javascript
python 简单备份文件脚本v1.0的实例
2017/11/06 Python
Python基础语言学习笔记总结(精华)
2017/11/14 Python
利用Python将数值型特征进行离散化操作的方法
2018/11/06 Python
Window环境下Scrapy开发环境搭建
2018/11/18 Python
pytorch torch.expand和torch.repeat的区别详解
2019/11/05 Python
Python实现RGB与HSI颜色空间的互换方式
2019/11/27 Python
windows10在visual studio2019下配置使用openCV4.3.0
2020/07/14 Python
浅析CSS3中鲜为人知的属性:-webkit-tap-highlight-color
2017/01/12 HTML / CSS
打架检讨书
2015/01/27 职场文书
2016年助残日旅游活动总结
2016/04/01 职场文书
bootstrapv4轮播图去除两侧阴影及线框的方法
2022/02/15 HTML / CSS
Python字符串常规操作小结
2022/04/03 Python
Java工作中实用的代码优化技巧分享
2022/04/21 Java/Android
我国拿下天问一号火星着陆区附近 22 个地理实体命名:平乐、西柏坡、古田、漠河等
2022/04/29 数码科技
Vue操作Storage本地化存储
2022/04/29 Vue.js