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 相关文章推荐
pyqt4教程之实现半透明的天气预报界面示例
Mar 02 Python
在Windows8上的搭建Python和Django环境
Jul 03 Python
深入分析在Python模块顶层运行的代码引起的一个Bug
Jul 04 Python
python3实现点餐系统
Jan 24 Python
wxpython实现按钮切换界面的方法
Nov 19 Python
python调用函数、类和文件操作简单实例总结
Nov 29 Python
Django 批量插入数据的实现方法
Jan 12 Python
python简单的三元一次方程求解实例
Apr 02 Python
Python求解排列中的逆序数个数实例
May 03 Python
Scrapy项目实战之爬取某社区用户详情
Sep 17 Python
python list的index()和find()的实现
Nov 16 Python
python更新数据库中某个字段的数据(方法详解)
Nov 18 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
ThinkPHP中实例Model方法的区别说明
2010/08/21 PHP
php在文件指定行中写入代码的方法
2012/05/23 PHP
PHP处理JSON字符串key缺少双引号的解决方法
2014/09/16 PHP
PHP使用http_build_query()构造URL字符串的方法
2016/04/02 PHP
PHP convert_uudecode()函数讲解
2019/02/14 PHP
如何在PHP环境中使用ProtoBuf数据格式
2020/06/19 PHP
linux mint下安装phpstorm2020包括JDK部分的教程详解
2020/09/17 PHP
javascript编程起步(第七课)
2007/02/27 Javascript
运用jquery实现table单双行不同显示并能单行选中
2009/07/25 Javascript
JQuery中的$.getJSON 使用说明
2011/03/10 Javascript
jquery选择器需要注意的问题
2014/11/26 Javascript
JavaScript实现算术平方根算法-代码超简单
2015/09/11 Javascript
AngularJs页面筛选标签小功能
2016/08/01 Javascript
Vue.js路由组件vue-router使用方法详解
2016/12/02 Javascript
jQuery为某个div加入行样式
2017/06/09 jQuery
bootstrap多层模态框滚动条消失的问题
2017/07/21 Javascript
详解使用Vue Router导航钩子与Vuex来实现后退状态保存
2017/09/11 Javascript
vue底部加载更多的实例代码
2018/06/29 Javascript
详解处理bootstrap4不支持远程静态框问题
2018/07/20 Javascript
详解使用create-react-app添加css modules、sasss和antd
2018/07/31 Javascript
详解如何更好的使用module vuex
2019/03/27 Javascript
ant-design-vue按需加载的坑的解决
2020/05/14 Javascript
详解MySQL数据类型int(M)中M的含义
2016/11/20 Python
Python脚本获取操作系统版本信息
2016/12/17 Python
python爬虫 使用真实浏览器打开网页的两种方法总结
2018/04/21 Python
python+Django+pycharm+mysql 搭建首个web项目详解
2019/11/29 Python
Tensorflow实现在训练好的模型上进行测试
2020/01/20 Python
HTML5 语音搜索只需一句代码
2013/01/03 HTML / CSS
会计专业毕业生自我鉴定
2013/10/29 职场文书
管理部部长岗位职责
2013/12/05 职场文书
大学运动会通讯稿
2014/01/28 职场文书
优秀士兵先进事迹
2014/02/06 职场文书
运动会获奖感言
2014/02/11 职场文书
详解Nginx启动失败的几种错误处理
2021/04/01 Servers
分析SQL窗口函数之取值窗口函数
2022/04/21 Oracle
Python 视频画质增强
2022/04/28 Python