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实现一个简单的线程池
Apr 07 Python
今天 平安夜 Python 送你一顶圣诞帽 @微信官方
Dec 25 Python
Centos7 Python3下安装scrapy的详细步骤
Mar 15 Python
Python基于dom操作xml数据的方法示例
May 12 Python
Python操作mongodb数据库进行模糊查询操作示例
Jun 09 Python
Django 用户认证组件使用详解
Jul 23 Python
django 使用 PIL 压缩图片的例子
Aug 16 Python
Python PyQt5运行程序把输出信息展示到GUI图形界面上
Apr 27 Python
将python字符串转化成长表达式的函数eval实例
May 11 Python
python集合的新增元素方法整理
Dec 07 Python
python 生成正态分布数据,并绘图和解析
Dec 21 Python
python中的class_static的@classmethod的巧妙用法
Jun 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内置访问资源的超时时间 time_out file_get_contents read_file
2013/06/03 PHP
thinkphp实现面包屑导航(当前位置)例子分享
2014/05/10 PHP
PHP设计模式之 策略模式Strategy详解【对象行为型】
2020/05/01 PHP
jquery 如何动态添加、删除class样式方法介绍
2012/11/07 Javascript
node.js中的http.response.writeHead方法使用说明
2014/12/14 Javascript
jquery捕捉回车键及获取checkbox值与异步请求的方法
2015/12/24 Javascript
Angular.js与Bootstrap相结合实现手风琴菜单代码
2016/04/13 Javascript
浅谈js和css内联外联注意事项
2016/06/30 Javascript
jquery移除了live()、die(),新版事件绑定on()、off()的方法
2016/10/26 Javascript
微信JS-SDK选取手机照片上传功能
2017/04/21 Javascript
Node.js如何实现注册邮箱激活功能 (常见)
2017/07/23 Javascript
input输入框内容实时监测(附代码)
2017/08/15 Javascript
从零开始搭建一个react项目开发
2018/02/09 Javascript
CountUp.js数字滚动插件使用方法详解
2019/10/17 Javascript
React 父子组件通信的实现方法
2019/12/05 Javascript
原生JS生成指定位数的验证码
2020/10/28 Javascript
Vue实现随机验证码功能
2020/12/29 Vue.js
[49:05]Newbee vs TNC 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python Sqlite3以字典形式返回查询结果的实现方法
2016/10/03 Python
Python之列表的插入&替换修改方法
2018/06/28 Python
Python面向对象之静态属性、类方法与静态方法分析
2018/08/24 Python
python实现词法分析器
2019/01/31 Python
python实现文件的备份流程详解
2019/06/18 Python
python3在同一行内输入n个数并用列表保存的例子
2019/07/20 Python
Python实现一个带权无回置随机抽选函数的方法
2019/07/24 Python
pytorch自定义初始化权重的方法
2019/08/17 Python
django自带serializers序列化返回指定字段的方法
2019/08/21 Python
Python迭代器Iterable判断方法解析
2020/03/16 Python
Django DRF认证组件流程实现原理详解
2020/08/17 Python
Tripadvisor新西兰:阅读评论,比较价格和酒店预订
2018/02/10 全球购物
Foot Locker英国官网:美国知名运动产品零售商
2019/02/21 全球购物
电气工程师岗位职责
2014/01/01 职场文书
房地产资料员岗位职责
2014/07/02 职场文书
功夫熊猫观后感
2015/06/10 职场文书
干货:如何写好工作计划!
2019/05/17 职场文书
Go语言操作数据库及其常规操作的示例代码
2021/04/21 Golang