python selenium 获取数据_python selenium 获取接口数据的实现

python selenium 获取接口数据。

selenium没有直接提供查询的函数,但是可以通过webdriver提供的API查询,使用的函数是Network.getResponseBody

Network.getResponseBody文档说明:

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')

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 获取接口数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值