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 13 Python
Python的Twisted框架上手前所必须了解的异步编程思想
May 25 Python
Python内存管理方式和垃圾回收算法解析
Nov 11 Python
Python matplotlib画图实例之绘制拥有彩条的图表
Dec 28 Python
Python实现统计英文文章词频的方法分析
Jan 28 Python
opencv导入头文件时报错#include的解决方法
Jul 31 Python
python中用logging实现日志滚动和过期日志删除功能
Aug 20 Python
浅谈在JupyterNotebook下导入自己的模块的问题
Apr 16 Python
Python如何实现机器人聊天
Sep 10 Python
Python自定义sorted排序实现方法详解
Sep 18 Python
python实现感知机模型的示例
Sep 30 Python
详解python使用金山词霸的翻译功能(调试工具断点的使用)
Jan 07 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 文件状态缓存带来的问题
2008/12/14 PHP
PHP中实现中文字符进制转换原理分析
2011/12/06 PHP
PHP 代码规范小结
2012/03/08 PHP
PHP实现生成唯一编号(36进制的不重复编号)
2014/07/01 PHP
laravel框架上传图片实现实时预览功能
2019/10/14 PHP
在网页中控制wmplayer播放器
2006/07/01 Javascript
让FireFox支持innerText的实现代码
2009/12/01 Javascript
jquery 关键字“拖曳搜索”之“拖曳”以及 图片“提示自适应放大”效果 的实现
2010/04/18 Javascript
ExtJS4如何给同一个formpanel不同的url
2014/05/02 Javascript
JavaScript实现更改网页背景与字体颜色的方法
2015/02/02 Javascript
jQuery晃动层特效实现方法
2015/03/09 Javascript
JavaScript实现页面跳转的几种常用方式
2015/11/28 Javascript
jQuery滚动加载图片实现原理
2015/12/14 Javascript
第二次聊一聊JS require.js模块化工具的基础知识
2016/04/17 Javascript
微信小程序开发之map地图实现教程
2017/06/08 Javascript
React Native 自定义下拉刷新上拉加载的列表的示例
2018/03/01 Javascript
vue-cli项目根据线上环境分别打出测试包和生产包
2018/05/23 Javascript
React+Webpack快速上手指南(小结)
2018/08/15 Javascript
在AngularJs中设置请求头信息(headers)的方法及不同方法的比较
2018/09/04 Javascript
Vue CLI项目 axios模块前后端交互的使用(类似ajax提交)
2019/09/01 Javascript
jQuery实现查看图片功能
2020/12/01 jQuery
[01:59]游戏“zheng”当时试玩会
2019/08/21 DOTA
python发布模块的步骤分享
2014/02/21 Python
Python使用tablib生成excel文件的简单实现方法
2016/03/16 Python
从pandas一个单元格的字符串中提取字符串方式
2019/12/17 Python
Python 项目转化为so文件实例
2019/12/23 Python
欧舒丹比利时官网:L’OCCITANE比利时
2017/04/25 全球购物
盛大笔试题
2016/11/05 面试题
村委会换届选举方案
2014/05/03 职场文书
勤俭节约演讲稿
2014/05/08 职场文书
2014年幼儿园重阳节活动方案
2014/09/16 职场文书
机关作风整顿个人剖析材料
2014/10/06 职场文书
2014年社区个人工作总结
2014/12/02 职场文书
2015年话务员工作总结
2015/04/29 职场文书
七年级作文之下雨天
2019/12/23 职场文书
Python基础之hashlib模块详解
2021/05/06 Python