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的Django框架使用的一些实用建议
Apr 03 Python
Python解惑之True和False详解
Apr 24 Python
python 中文件输入输出及os模块对文件系统的操作方法
Aug 27 Python
Python PIL图片添加字体的例子
Aug 22 Python
图解python全局变量与局部变量相关知识
Nov 02 Python
Python类继承和多态原理解析
Feb 05 Python
python发qq消息轰炸虐狗好友思路详解(完整代码)
Feb 15 Python
详解python内置常用高阶函数(列出了5个常用的)
Feb 21 Python
python中setuptools的作用是什么
Jun 19 Python
Python configparser模块应用过程解析
Aug 14 Python
Django配置跨域并开发测试接口
Nov 04 Python
Python实现文字pdf转换图片pdf效果
Apr 03 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 柱状图实现代码
2009/12/04 PHP
PHP sprintf() 函数的应用(定义和用法)
2012/06/29 PHP
phpexcel导出excel的颜色和网页中的颜色显示不一致
2012/12/11 PHP
php图片合成方法(多张图片合成一张)
2017/11/25 PHP
thinkphp5 URL和路由的功能详解与实例
2017/12/26 PHP
PHP实现的二分查找算法实例分析
2017/12/19 PHP
js TextArea的选中区域处理
2010/12/28 Javascript
dojo学习第二天 ajax异步请求之绑定列表
2011/08/29 Javascript
Javascript保存网页为图片借助于html2canvas库实现
2014/09/05 Javascript
js实现遮罩层弹出框的方法
2015/01/15 Javascript
javascript实现五星评价代码(源码下载)
2015/08/11 Javascript
超精准的javascript验证身份证号的具体实现方法
2015/11/18 Javascript
JS折半插入排序算法实例
2015/12/02 Javascript
Linux CentOS系统下安装node.js与express的方法
2017/04/01 Javascript
详解JavaScript中return的用法
2017/05/08 Javascript
JS实现简单的选择题测评系统代码思路详解(demo)
2017/09/03 Javascript
react.js 父子组件数据绑定实时通讯的示例代码
2017/09/25 Javascript
Vue 中批量下载文件并打包的示例代码
2017/11/20 Javascript
vue+axios新手实践实现登陆的示例代码
2018/06/06 Javascript
微信小程序异步API为Promise简化异步编程的操作方法
2018/08/14 Javascript
支付宝小程序自定义弹窗dialog插件的实现代码
2018/11/30 Javascript
浅谈Vue的响应式原理
2019/05/30 Javascript
微信小程序云开发如何实现数据库自动备份实现
2019/08/16 Javascript
vue+axios实现post文件下载
2019/09/25 Javascript
基于javascript实现贪吃蛇小游戏
2019/11/25 Javascript
微信小程序后端无法保持session的原因及解决办法问题
2020/03/20 Javascript
[01:23]2014DOTA2国际邀请赛 球迷无处不在Ti现场世界杯受关注
2014/07/10 DOTA
[28:57]EG vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/16 DOTA
加拿大在线隐形眼镜和眼镜店:VisionPros
2019/10/06 全球购物
怎样建立和理解非常复杂的声明?例如定义一个包含N 个指向返回 指向字符的指针的函数的指针的数组?
2013/03/19 面试题
金鑫耀Java笔试题
2014/09/06 面试题
村庄环境整治方案
2014/05/15 职场文书
离婚协议书怎么写2014
2014/09/30 职场文书
支教个人总结
2015/03/04 职场文书
导游词之天津古文化街
2019/11/09 职场文书
Python os和os.path模块详情
2022/04/02 Python