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如何拆分含有多种分隔符的字符串
Mar 20 Python
python+flask实现API的方法
Nov 21 Python
pandas ix &iloc &loc的区别
Jan 10 Python
python爬取基于m3u8协议的ts文件并合并
Apr 26 Python
python识别图像并提取文字的实现方法
Jun 28 Python
Python Process多进程实现过程
Oct 22 Python
python实现俄罗斯方块游戏(改进版)
Mar 13 Python
Python 中由 yield 实现异步操作
May 04 Python
Python实现Canny及Hough算法代码实例解析
Aug 06 Python
Pycharm快捷键配置详细整理
Oct 13 Python
python Pexpect模块的使用
Dec 25 Python
pycharm 快速解决python代码冲突的问题
Jan 15 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操作符与控制结构代码
2011/12/30 PHP
php-perl哈希算法实现(times33哈希算法)
2013/12/30 PHP
PHP响应post请求上传文件的方法
2015/12/17 PHP
Symfony2中被遗弃的getRequest()方法分析
2016/03/17 PHP
摘自百度的图片轮换效果代码
2007/11/19 Javascript
缓动函数requestAnimationFrame 更好的实现浏览器经动画
2012/12/07 Javascript
js如何改变文章的字体大小
2016/01/08 Javascript
JQuery中解决重复动画的方法
2016/10/17 Javascript
微信开发 使用picker封装省市区三级联动模板
2016/10/28 Javascript
vue.js实现请求数据的方法示例
2017/02/07 Javascript
js使用原型对象(prototype)需要注意的地方
2017/08/28 Javascript
vue router 跳转后回到顶部的实例
2018/08/31 Javascript
vue组件文档(.md)中如何自动导入示例(.vue)详解
2019/01/25 Javascript
Node.js实现一个HTTP服务器的方法示例
2019/05/13 Javascript
webpack4之如何编写loader的方法步骤
2019/06/06 Javascript
javascript面向对象程序设计实践常用知识点总结
2019/07/29 Javascript
vue实现登录页面的验证码以及验证过程解析(面向新手)
2019/08/02 Javascript
Vue获取页面元素的相对位置的方法示例
2020/02/05 Javascript
微信小程序使用GoEasy实现websocket实时通讯
2020/05/19 Javascript
Django自定义分页与bootstrap分页结合
2021/02/22 Python
python爬虫简单的添加代理进行访问的实现代码
2019/04/04 Python
pandas DataFrame 行列索引及值的获取的方法
2019/07/02 Python
python 多进程并行编程 ProcessPoolExecutor的实现
2019/10/11 Python
美国中小型企业领先的办公家具供应商:Office Designs
2016/11/26 全球购物
ALDI奥乐齐官方海外旗舰店:德国百年超市
2017/12/27 全球购物
英国户外装备和冒险服装零售商:alloutdoor
2018/01/30 全球购物
生物有机护肤品:Aurelia Probiotic Skincare
2018/01/31 全球购物
校园活动策划书范文
2014/01/10 职场文书
党支部书记先进事迹
2014/01/17 职场文书
诚信考试倡议书
2014/04/15 职场文书
2015年毕业实习工作总结
2014/12/12 职场文书
副总经理岗位职责范本
2015/04/08 职场文书
蓝天保卫战收官在即 :15行业将开展环保分级评价
2019/07/19 职场文书
浅谈MySQL函数
2021/10/05 MySQL
关于Python使用turtle库画任意图的问题
2022/04/01 Python
python语言中pandas字符串分割str.split()函数
2022/08/05 Python