python selenium 获取接口数据

python selenium 获取接口数据。

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

webdriver提供的API文档:Chrome DevTools Protocol - Network domain

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

打印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

如果是不创建新浏览器窗口,直接在已打开的浏览器,则代码需要修改为:

caps = DesiredCapabilities.CHROME
caps['loggingPrefs'] = {'performance': 'ALL'}

options = webdriver.ChromeOptions()
options.add_experimental_option('w3c', False)
options.add_experimental_option("debuggerAddress", "127.0.0.1:9527")
driver = webdriver.Chrome(options=options, desired_capabilities=caps)

  • 9
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
### 回答1: 这个函数是在浏览器的开发者工具中的 JavaScript 控制台中使用的。它用于获取指定 HTML 元素的 HTML 代码。当你在开发者工具中选中一个元素时,你可以通过在控制台中输入 `console.log($0.outerHTML)` 来获取该元素的 HTML 代码。`$0` 是一个特殊的变量,代表当前选中的元素。如果你想获取其他元素的 HTML 代码,可以将 `$0` 替换为对应的元素变量名。 ### 回答2: get_attribute("outerHTML") 是一个 Python Selenium 中的方法,用于获取一个元素的完整 HTML 代码。当我们使用这个方法时,会返回该元素的包括标签在内的完整字符串。 例如: ```python element = driver.find_element_by_id("my_element") html_code = element.get_attribute("outerHTML") print(html_code) ``` 上述代码中,我们通过 `find_element_by_id` 方法找到一个具有 id="my_element" 的元素,并将其赋值给 `element` 变量。然后,我们使用 `get_attribute("outerHTML")` 方法获取该元素的完整 HTML 代码,并将其赋值给 `html_code` 变量。最后,我们打印这个代码。 输出结果可能会是类似下面的内容: ``` <div id="my_element" class="some-class">这是一个元素</div> ``` 通过使用 `get_attribute("outerHTML")` 方法,我们可以获取到该元素的完整结构和属性,并能够使用该字符串进行进一步的分析和处理。这在自动化测试、网页爬取等场景中都是非常有用的。 ### 回答3: get_attribute("outerHTML")是一种在Web自动化测试中常用的方法。它用于获取某个元素的外部HTML代码。 在HTML中,每个元素都有其对应的标签和属性,其中属性描述了元素的特点和行为。通常,通过查看元素的innerHTML属性,我们可以获取到该元素的内部HTML代码,也就是该元素包含的所有子元素。而使用get_attribute("outerHTML")方法,我们可以获取到该元素的外部HTML代码,即包括该元素本身以及其内部的所有内容。 通过get_attribute("outerHTML")方法,我们可以获得一个元素的完整的HTML代码,包括标签、属性和内容。这在某些场景下非常有用,比如做元素的断言、元素的拷贝等。 总结一下,get_attribute("outerHTML")方法是在Web自动化测试中用于获取元素的外部HTML代码,它可以帮助我们获取到一个元素的完整的HTML代码,包括标签、属性和内容。这种方法在实际的自动化测试中非常实用,并且可以用于满足不同的需求。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值