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 ljust rjust center输出
Sep 06 Python
Python3基础之基本运算符概述
Aug 13 Python
Python使用回溯法子集树模板获取最长公共子序列(LCS)的方法
Sep 08 Python
python编写简易聊天室实现局域网内聊天功能
Jul 28 Python
对python制作自己的数据集实例讲解
Dec 12 Python
对python For 循环的三种遍历方式解析
Feb 01 Python
Python使用mongodb保存爬取豆瓣电影的数据过程解析
Aug 14 Python
Windows10下Tensorflow2.0 安装及环境配置教程(图文)
Nov 21 Python
浅谈django不使用restframework自定义接口与使用的区别
Jul 15 Python
Python爬取12306车次信息代码详解
Aug 12 Python
Python实现树莓派摄像头持续录像并传送到主机的步骤
Nov 30 Python
python基础之//、/与%的区别详解
Jun 10 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
MySQL相关说明
2007/01/15 PHP
又一个PHP实现的冒泡排序算法分享
2014/08/21 PHP
php实现webservice实例
2014/11/06 PHP
浅谈php自定义错误日志
2015/02/13 PHP
PHP的时间戳与具体时间转化的简单实现
2016/06/13 PHP
TP5框架使用QueryList采集框架爬小说操作示例
2020/03/26 PHP
js鼠标滑过弹出层的定位IE6bug解决办法
2012/12/26 Javascript
jQuery中clearQueue()方法用法实例
2014/12/29 Javascript
JS+DIV实现鼠标划过切换层效果的方法
2015/05/25 Javascript
深入解析JavaScript中的数字对象与字符串对象
2015/10/21 Javascript
10个JavaScript中易犯小错误
2016/02/14 Javascript
JavaScript驾驭网页-DOM
2016/03/24 Javascript
网站申请不到支付宝接口、微信接口,免接口收款实现方式几种解决办法
2016/12/14 Javascript
详谈jQuery Ajax(load,post,get,ajax)的用法
2017/03/02 Javascript
详解tween.js的使用教程
2017/09/14 Javascript
vue.js 嵌套循环、if判断、动态删除的实例
2018/03/07 Javascript
JS实现遍历不规则多维数组的方法
2018/03/21 Javascript
jquery.onoff实现简单的开关按钮功能(推荐)
2018/05/24 jQuery
如何搭建一个完整的Vue3.0+ts的项目步骤
2020/10/18 Javascript
在vue中动态修改css其中一个属性值操作
2020/12/07 Vue.js
JavaScript实现页面高亮操作提示和蒙板
2021/01/04 Javascript
python模拟Django框架实例
2016/05/17 Python
详解appium+python 启动一个app步骤
2017/12/20 Python
python使用KNN算法手写体识别
2018/02/01 Python
python使用生成器实现可迭代对象
2018/03/20 Python
Python3获取电脑IP、主机名、Mac地址的方法示例
2019/04/11 Python
Django import export实现数据库导入导出方式
2020/04/03 Python
Keras中的两种模型:Sequential和Model用法
2020/06/27 Python
PyTorch安装与基本使用详解
2020/08/31 Python
英国和世界各地预订便宜的酒店:LateRooms.com
2019/05/05 全球购物
屈臣氏乌克兰:Watsons UA
2019/10/29 全球购物
新奥尔良珠宝:Mignon Faget
2020/11/23 全球购物
网络研修随笔感言
2014/02/17 职场文书
工作作风整顿个人剖析材料
2014/10/11 职场文书
2014年护士个人工作总结
2014/11/11 职场文书
公司优秀员工推荐信
2015/03/24 职场文书