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 17 Python
举例讲解Python的Tornado框架实现数据可视化的教程
May 02 Python
Python实现Windows和Linux之间互相传输文件(文件夹)的方法
May 08 Python
pip命令无法使用的解决方法
Jun 12 Python
通过PYTHON来实现图像分割详解
Jun 26 Python
python+Django实现防止SQL注入的办法
Oct 31 Python
Python爬虫库BeautifulSoup获取对象(标签)名,属性,内容,注释
Jan 25 Python
多个python文件调用logging模块报错误
Feb 12 Python
在jupyter notebook 添加 conda 环境的操作详解
Apr 10 Python
opencv 图像腐蚀和图像膨胀的实现
Jul 07 Python
Python限制内存和CPU使用量的方法(Unix系统适用)
Aug 04 Python
Python基于pillow库实现生成图片水印
Sep 14 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
DSP接收机前端设想
2021/03/02 无线电
mysql5写入和读出乱码解决
2006/11/25 PHP
php 深入理解strtotime函数的使用详解
2013/05/23 PHP
PHP生成条形码大揭秘
2015/09/24 PHP
php实现搜索类封装示例
2016/03/31 PHP
php 截取中英文混合字符串的方法
2018/05/31 PHP
Laravel框架处理用户的请求操作详解
2019/12/20 PHP
List Installed Hot Fixes
2007/06/12 Javascript
JavaScript中Math对象使用说明
2008/01/16 Javascript
用Javascript实现锚点(Anchor)间平滑跳转
2009/09/08 Javascript
了解jQuery技巧来提高你的代码
2010/01/08 Javascript
基于jquery的loading效果实现代码
2010/11/05 Javascript
jQuery下的动画处理总结
2013/10/10 Javascript
基于jQuery的AJAX和JSON实现纯html数据模板
2016/08/09 Javascript
Vue.js实现微信过渡动画左右切换效果
2017/06/13 Javascript
微信小程序实现animation动画
2018/01/26 Javascript
JS实现的简单下拉框联动功能示例
2018/05/11 Javascript
微信小程序网络请求实现过程解析
2019/11/06 Javascript
js实现点击生成随机div
2020/01/16 Javascript
python基于itchat实现微信群消息同步机器人
2017/02/27 Python
Python简单实现Base64编码和解码的方法
2017/04/29 Python
Python后台开发Django的教程详解(启动)
2019/04/08 Python
python 使用socket传输图片视频等文件的实现方式
2019/08/07 Python
基于Python数据结构之递归与回溯搜索
2020/02/26 Python
Python3标准库glob文件名模式匹配的问题
2020/03/13 Python
利用css3 translate完美实现表头固定效果
2017/02/28 HTML / CSS
AmazeUI 面板的实现示例
2020/08/17 HTML / CSS
Dr. Martens马汀博士澳大利亚官网:马丁靴鼻祖
2019/07/02 全球购物
英国最大的在线照明商店:Litecraft
2020/08/31 全球购物
小学生自我评价范例
2013/09/24 职场文书
入党自我鉴定范文
2013/10/04 职场文书
儿子婚宴答谢词
2014/01/09 职场文书
爱国口号
2014/06/19 职场文书
涉及车辆房产分割的离婚协议书范文
2014/10/12 职场文书
会议简讯范文
2015/07/20 职场文书
用Python制作灯光秀短视频的思路详解
2021/04/13 Python