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获取接口数据的实现进行了介绍.如需了解更多相关内容,建议参考之前的综述文章.我们非常感谢您的关注与支持!希望未来能与您持续互动.
