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装饰器decorator用法实例
Nov 10 Python
Python中os.path用法分析
Jan 15 Python
Python调用C语言开发的共享库方法实例
Mar 18 Python
Python实现方便使用的级联进度信息实例
May 05 Python
用Eclipse写python程序
Feb 10 Python
Python发送http请求解析返回json的实例
Mar 26 Python
使用Python读取安卓手机的屏幕分辨率方法
Mar 31 Python
Python统计python文件中代码,注释及空白对应的行数示例【测试可用】
Jul 25 Python
Python 制作查询商品历史价格的小工具
Oct 20 Python
通过python-pptx模块操作ppt文件的方法
Dec 26 Python
Pandas直接读取sql脚本的方法
Jan 21 Python
用Python提取PDF表格的方法
Apr 11 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&java(一)
2006/10/09 PHP
dedecms采集中可以过滤多行代码的正则表达式
2007/03/17 PHP
php使用smtp发送支持附件的邮件示例
2014/04/13 PHP
php实现中文转数字
2016/02/18 PHP
thinkPHP引入类的方法详解
2016/12/08 PHP
基于jQuery的前端数据通用验证库
2011/08/08 Javascript
js判断url是否有效的两种方法
2014/03/04 Javascript
JQuery each()嵌套使用小结
2014/04/18 Javascript
fixedBox固定div漂浮代码支持ie6以上大部分主流浏览器
2014/06/26 Javascript
Node.js Addons翻译(C/C++扩展)
2016/06/12 Javascript
详解Javascript几种跨域方式总结
2017/02/27 Javascript
jQuery实现验证码功能
2017/03/17 Javascript
vue中使用vue-router切换页面时滚动条自动滚动到顶部的方法
2017/11/28 Javascript
JavaScript体验异步更好的解决办法
2018/01/08 Javascript
JavaScript实现一个简易的计算器实例代码
2018/05/10 Javascript
[01:01:35]Optic vs paiN 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
利用Python爬虫给孩子起个好名字
2017/02/14 Python
Python+tkinter使用80行代码实现一个计算器实例
2018/01/16 Python
分析Python中解析构建数据知识
2018/01/20 Python
numpy 进行数组拼接,分别在行和列上合并的实例
2018/05/08 Python
Django 对IP访问频率进行限制的例子
2019/08/30 Python
python针对mysql数据库的连接、查询、更新、删除操作示例
2019/09/11 Python
python通过matplotlib生成复合饼图
2020/02/06 Python
python实现ftp文件传输功能
2020/03/20 Python
Python如何使用PIL Image制作GIF图片
2020/05/16 Python
解决HTML5手机端页面缩放的问题
2017/10/27 HTML / CSS
英国在线药房:Express Chemist
2019/03/28 全球购物
Elemental Herbology官网:英国美容品牌
2019/04/27 全球购物
公司庆典活动邀请函
2014/01/09 职场文书
生产部管理制度
2014/01/31 职场文书
节约用电标语
2014/06/17 职场文书
优秀会计求职信
2014/07/04 职场文书
项目工作说明书
2014/07/29 职场文书
中国文明网向国旗敬礼寄语大全
2014/09/27 职场文书
2015年业务工作总结范文
2015/04/10 职场文书
2015年药品销售工作总结范文
2015/05/25 职场文书