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在多玩图片上下载妹子图的实现代码
Aug 13 Python
Python的requests网络编程包使用教程
Jul 11 Python
学习Python selenium自动化网页抓取器
Jan 20 Python
详解python中asyncio模块
Mar 03 Python
Python之dict(或对象)与json之间的互相转化实例
Jun 05 Python
python tkinter界面居中显示的方法
Oct 11 Python
python快排算法详解
Mar 04 Python
Python函数装饰器常见使用方法实例详解
Mar 30 Python
解决Django删除migrations文件夹中的文件后出现的异常问题
Aug 31 Python
python实现飞行棋游戏
Feb 05 Python
python实现超级马里奥
Mar 18 Python
Pytorch生成随机数Tensor的方法汇总
Sep 09 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实现图片旋转效果实例代码
2014/10/01 PHP
javascript优先加载笔记代码
2008/09/30 Javascript
Jquery下attr和removeAttr的使用方法
2010/12/28 Javascript
ajax异步刷新实现更新数据库
2012/12/03 Javascript
js中escape对应的C#解码函数 UrlDecode
2012/12/16 Javascript
使用jquery的ajax需要注意的地方dataType的设置
2013/08/12 Javascript
如何实现修改密码时密码框显示保存到cookie的密码
2013/12/10 Javascript
js弹出div并显示遮罩层
2014/02/12 Javascript
innerHTML动态添加html代码和脚本兼容多个浏览器
2014/10/11 Javascript
jQuery简单实现隐藏以及显示特效
2015/02/26 Javascript
jQuery实现点击按钮弹出可关闭层的浮动层插件
2015/09/19 Javascript
一些实用性较高的js方法
2016/04/19 Javascript
修改Jquery Dialog 位置的实现方法
2016/08/26 Javascript
JS中substring与substr的用法
2016/11/16 Javascript
JavaScript获取服务器端时间的方法
2016/11/29 Javascript
微信小程序上传图片到服务器实例代码
2017/11/07 Javascript
轻松搞定jQuery+JSONP跨域请求的解决方案
2018/03/06 jQuery
Vue表单输入绑定的示例代码
2018/11/01 Javascript
说说如何使用Vuex进行状态管理(小结)
2019/04/14 Javascript
利用d3.js实现蜂巢图表带动画效果
2019/09/03 Javascript
Vue 通过公共字段,拼接两个对象数组的实例
2019/11/07 Javascript
[01:25:33]完美世界DOTA2联赛PWL S3 INK ICE vs Magma 第二场 12.20
2020/12/23 DOTA
横向对比分析Python解析XML的四种方式
2016/03/30 Python
python使用tornado实现简单爬虫
2018/07/28 Python
python pytest进阶之conftest.py详解
2019/06/27 Python
如何基于Python创建目录文件夹
2019/12/31 Python
解决python虚拟环境切换无效的问题
2020/04/30 Python
python在linux环境下安装skimage的示例代码
2020/10/14 Python
python中pyqtgraph知识点总结
2021/01/26 Python
波兰珠宝品牌:YES
2019/08/09 全球购物
武汉世纪畅想数字传播有限公司 .NET笔试题
2015/06/13 面试题
素食餐饮项目创业计划书
2014/02/02 职场文书
节约能源标语
2014/06/17 职场文书
国土资源局开展党的群众路线教育实践活动整改措施
2014/09/26 职场文书
党员教师群众路线思想汇报范文
2014/10/28 职场文书
教师旷工检讨书
2015/08/15 职场文书