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编程使用*解包和itertools.product()求笛卡尔积的方法
Dec 18 Python
python 输出上个月的月末日期实例
Apr 11 Python
一篇文章弄懂Python中所有数组数据类型
Jun 23 Python
用Cython加速Python到“起飞”(推荐)
Aug 01 Python
python文件读写代码实例
Oct 21 Python
python使用pip安装SciPy、SymPy、matplotlib教程
Nov 20 Python
python中with语句结合上下文管理器操作详解
Dec 19 Python
Python Print实现在输出中插入变量的例子
Dec 25 Python
Pytorch之contiguous的用法
Dec 31 Python
基于TensorFlow中自定义梯度的2种方式
Feb 04 Python
Python Django2 model 查询介绍(条件、范围、模糊查询)
Mar 16 Python
scrapy在python爬虫中搭建出错的解决方法
Nov 22 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 中的批处理的实现
2007/06/14 PHP
windows环境下php配置memcache的具体操作步骤
2013/06/09 PHP
PHP使用mysql与mysqli连接Mysql数据库用法示例
2016/07/07 PHP
PHP支付系统设计与典型案例分享
2016/08/02 PHP
php二维码生成以及下载实现
2017/09/28 PHP
PHPExcel实现表格导出功能示例【带有多个工作sheet】
2018/06/13 PHP
PHP实现断点续传乱序合并文件的方法
2018/09/06 PHP
JS在IE和FireFox之间常用函数的区别小结
2010/03/12 Javascript
JavaScript 基础篇(一)
2012/03/30 Javascript
JQuery调用WebServices的方法和4个实例
2014/05/06 Javascript
js简单实现交换Li的值
2014/05/22 Javascript
javascript关于运动的各种问题经典总结
2015/04/27 Javascript
全面解析Bootstrap中Carousel轮播的使用方法
2016/06/13 Javascript
Javascript删除指定元素节点的方法
2016/06/21 Javascript
JavaScript如何一次性展示几万条数据
2017/03/30 Javascript
深入浅析javascript继承体系
2017/10/23 Javascript
微信小程序实现获取准确的腾讯定位地址功能示例
2019/03/27 Javascript
vue实现多条件和模糊搜索功能
2019/05/28 Javascript
vue父组件给子组件的组件传值provide inject的方法
2019/10/23 Javascript
vue-router路由懒加载及实现的3种方式
2021/02/28 Vue.js
[04:04]显微镜下的DOTA2第六期——电影级别的华丽团战
2014/06/20 DOTA
python数组过滤实现方法
2015/07/27 Python
使用Python的package机制如何简化utils包设计详解
2017/12/11 Python
Python快速查找list中相同部分的方法
2018/06/27 Python
python对指定字符串逆序的6种方法(小结)
2020/04/02 Python
Python Matplotlib简易教程(小白教程)
2020/07/28 Python
video结合canvas实现视频在线截图功能
2018/06/25 HTML / CSS
电气专业推荐信范文
2013/11/18 职场文书
揠苗助长教学反思
2014/02/04 职场文书
学校庆元旦歌咏比赛主持词
2014/03/18 职场文书
日语系毕业求职信
2014/07/27 职场文书
领导干部个人对照检查材料(群众路线)
2014/09/26 职场文书
九年级语文教学反思
2016/03/03 职场文书
初一语文教学反思
2016/03/03 职场文书
nginx实现发布静态资源的方法
2021/03/31 Servers