Advertisement

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

阅读量:

python selenium 获取接口数据。

由于Selenium本身并未提供专门的查询功能,因此需要通过WebDriver获取相关的API接口来进行操作,而该操作通常会调用网络层的getResponseBody方法

该 WebDriver 的 API 文档由 GitHub 提供支持,并在 tot 包裹下发布于 /Network 路径上。

Network.getResponseBody文档说明:

Network.getResponseBody()函数的参数是requestId, requestId是由webdriver在每次请求中自动生成的一个独特的标识符, 一旦知道了requestId就可以获取到该请求返回的内容

请问如何获取requestid?当创建webdriver对象时,在配置信息中设置'performance'参数后即可获取每个请求的日志信息。随后通过检索这些日志数据即可找到对应的requestid值。

在编写webdriver时,请确保配置文件中包含相关信息以确保能够捕获日志数据

from selenium import webdriver

Import the DesiredCapabilities class from the selenium.webdriver.common.desired_capabilities module.

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

输出请求日志列表并遍历其中的各项以查找所需URL对应的请求ID,并随后获取相关接口内容:

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获取接口内容

result = browser.sendRequestToCdp('Network.getResponseBody', {'requestId': message['requestId']})

print(content)

break

完整代码:

import json

from selenium import webdriver

import selenium.webdriver.common.desired_capabilities as 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获取接口内容

result is assigned to the content variable when executing the CDP command 'Network.getResponseBody' with request parameters [ { 'requestId': message['requestId'] } ].

print(content)

break

至此,本文就关于Python Selenium获取接口数据的实现进行了介绍.如需了解更多相关内容,建议参考之前的综述文章.我们非常感谢您的关注与支持!希望未来能与您持续互动.

全部评论 (0)

还没有任何评论哟~