如何使用 python webdriver 在 chrom devtools 中获取图像响应

问题描述 投票:0回答:1

我正在尝试编写一个自动从网页接收图像的Python代码。

方法是获取图像响应,可以通过使用Selenium访问特定网页并从chrome devtool的网络复制图像的数据来获得。

这是因为特定站点被cloudflare屏蔽了,如果我使用requests或urllib.request等常用方法,就会出现403错误。

我可以像屏幕截图一样通过“复制响应”接收图像数据,但我想使用 chrome webdriver 和 python 来获取它。

Copy response in Chrome devtools

from selenium import webdriver

option = webdriver.ChromeOptions()
option.set_capability('goog:loggingPrefs', {'performance': 'ALL'})
option.add_experimental_option("debuggerAddress", "127.0.0.1:9222")

browser = webdriver.Chrome(options=option)

browser.get(url)
time.sleep(5)

log_entries = browser.get_log("performance")

我得到了上面代码的响应头,但我想获得图像的完整响应

python selenium-webdriver webdriver google-chrome-devtools
1个回答
0
投票

要获取响应,您应该循环遍历日志并按包含事件

message
的消息过滤
Network.responseReceived
对象。

然后你得到

params
对象并检查 target_url_part 是否存在于
url
中。

获取后,使用参数中的

Network.getResponseBody
执行CDP命令
requestId

根据响应正文,您可以执行进一步的操作,例如获取其 json 字段/将其转换为图像等。

target_url = "your_request_url_part"

for log in log_entries:
    message = log["message"]
    if "Network.responseReceived" in message:
        params = json.loads(message)["message"].get("params")
        if params:
            response = params.get("response")
            if response:
                if response and target_url in response["url"]:
                    body = driver.execute_cdp_cmd('Network.getResponseBody', {'requestId': params["requestId"]})
© www.soinside.com 2019 - 2024. All rights reserved.