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基于queue和threading实现多线程下载实例
Oct 08 Python
Python压缩解压缩zip文件及破解zip文件密码的方法
Nov 04 Python
Python 常用的安装Module方式汇总
May 06 Python
关于Python正则表达式 findall函数问题详解
Mar 22 Python
Python Django Cookie 简单用法解析
Aug 13 Python
Python Scrapy框架第一个入门程序示例
Feb 05 Python
python图形开发GUI库pyqt5的详细使用方法及各控件的属性与方法
Feb 14 Python
Python GUI编程学习笔记之tkinter事件绑定操作详解
Mar 30 Python
Python捕获异常堆栈信息的几种方法(小结)
May 18 Python
python中wheel的用法整理
Jun 15 Python
详解python datetime模块
Aug 17 Python
linux mint中搜狗输入法导致pycharm卡死的问题
Oct 28 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 Token(令牌)设计
2008/03/15 PHP
phpmyadmin3 安装配置图解教程
2012/03/29 PHP
thinkphp3.2点击刷新生成验证码
2016/02/16 PHP
PHP实现将上传图片自动缩放到指定分辨率,并保持清晰度封装类示例
2019/06/17 PHP
Prototype 学习 工具函数学习($方法)
2009/07/12 Javascript
JS链式调用的实现方法
2013/03/07 Javascript
js弹出层包含flash 不能关闭隐藏的2种处理方法
2013/06/17 Javascript
Jquery性能优化详解
2014/05/15 Javascript
Javascript学习笔记之 对象篇(四) : for in 循环
2014/06/24 Javascript
通用无限极下拉菜单的实现代码
2016/05/31 Javascript
基于jQuery实现表格的查看修改删除
2016/08/01 Javascript
用move.js库实现百叶窗特效
2017/02/08 Javascript
Angularjs分页查询的实现
2017/02/24 Javascript
Angular2 父子组件数据通信实例
2017/06/22 Javascript
AngularJS实现单一页面内设置跳转路由的方法
2017/06/28 Javascript
最基础的vue.js双向绑定操作
2017/08/23 Javascript
vuejs实现折叠面板展开收缩动画效果
2018/09/06 Javascript
Vue防止白屏添加首屏动画的实例
2019/10/31 Javascript
Python中字典映射类型的学习教程
2015/08/20 Python
python print输出延时,让其立刻输出的方法
2019/01/07 Python
Python删除n行后的其他行方法
2019/01/28 Python
Python爬虫实现“盗取”微信好友信息的方法分析
2019/09/16 Python
python随机生成大小写字母数字混合密码(仅20行代码)
2020/02/01 Python
Python中import导入不同目录的模块方法详解
2020/02/18 Python
keras做CNN的训练误差loss的下降操作
2020/06/22 Python
Python如何重新加载模块
2020/07/29 Python
python一些性能分析的技巧
2020/08/30 Python
htnl5利用svg页面高斯模糊的方法
2018/07/20 HTML / CSS
Microsoft新加坡官方网站:购买微软最新软件和技术产品
2016/10/28 全球购物
平安工地建设方案
2014/05/06 职场文书
小学生个人先进事迹材料
2014/05/08 职场文书
公务员爱岗敬业演讲稿
2014/08/26 职场文书
党政领导班子四风问题对照检查材料思想汇报
2014/10/02 职场文书
2014初中数学教研组工作总结
2014/12/19 职场文书
2015幼儿园新学期寄语
2015/02/27 职场文书
世界文化遗产导游词
2019/08/07 职场文书