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 SqlAlchemy
Feb 12 Python
python 开发的三种运行模式详细介绍
Jan 18 Python
python安装教程 Pycharm安装详细教程
May 02 Python
Python求解任意闭区间的所有素数
Jun 10 Python
python 除法保留两位小数点的方法
Jul 16 Python
influx+grafana自定义python采集数据和一些坑的总结
Sep 17 Python
使用Python实现微信提醒备忘录功能
Dec 04 Python
Python pandas如何向excel添加数据
May 22 Python
matplotlib教程——强大的python作图工具库
Oct 15 Python
Python+OpenCV图像处理—— 色彩空间转换
Oct 22 Python
Python WSGI 规范简介
Apr 11 Python
python基础之类属性和实例属性
Oct 24 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错误Warning:mysql_query()解决方法
2015/10/24 PHP
在IE和VB中支持png图片透明效果的实现方法(vb源码打包)
2011/04/01 Javascript
Jquery 一次处理多个ajax请求的代码
2011/09/02 Javascript
jquery创建表格(自动增加表格)代码分享
2013/12/25 Javascript
jQuery前端框架easyui使用Dialog时bug处理
2014/12/05 Javascript
js操作滚动条事件实例
2015/01/29 Javascript
AngularJS自动表单验证
2016/02/01 Javascript
JS实现快速的导航下拉菜单动画效果附源码下载
2016/11/01 Javascript
解决微信内置浏览器返回上一页强制刷新问题方法
2017/02/05 Javascript
AngularJS中的promise用法分析
2017/05/19 Javascript
vue实现登陆登出的实现示例
2017/09/15 Javascript
解决ie img标签内存泄漏的问题
2017/10/13 Javascript
基于Three.js实现360度全景图片
2018/12/30 Javascript
JS实现求5的阶乘示例
2019/01/21 Javascript
Vue解析带html标签的字符串为dom的实例
2019/11/13 Javascript
使用Typescript开发微信小程序的步骤详解
2021/01/12 Javascript
Python新手在作用域方面经常容易碰到的问题
2015/04/03 Python
Python利用Nagios增加微信报警通知的功能
2016/02/18 Python
pandas删除行删除列增加行增加列的实现
2019/07/06 Python
python模块常用用法实例详解
2019/10/17 Python
如何使用python3获取当前路径及os.path.dirname的使用
2019/12/13 Python
基于python 将列表作为参数传入函数时的测试与理解
2020/06/05 Python
python实现网页录音效果
2020/10/26 Python
CSS3 input框的实现代码类似Google登录的动画效果
2020/08/04 HTML / CSS
Backcountry旗下的户外商品闪购网站:steep&cheap
2016/09/22 全球购物
天网面试题
2013/04/07 面试题
户外亲子活动策划方案
2014/02/07 职场文书
三查三看党性分析材料
2014/02/18 职场文书
仓库规划计划书
2014/04/28 职场文书
领导干部作风建设自查报告
2014/10/23 职场文书
2014小学年度工作总结
2014/12/20 职场文书
生产车间主任岗位职责
2015/04/08 职场文书
财务统计员岗位职责
2015/04/14 职场文书
无工作证明怎么写
2015/06/15 职场文书
Python文件的操作示例的详细讲解
2021/04/08 Python
项目中Nginx多级代理是如何获取客户端的真实IP地址
2022/05/30 Servers