You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firefox中访问Blob URL二进制数据遇安全错误,求Playwright-Python方案

问题描述

我正尝试在Firefox中访问Blob URL中存储的二进制数据,该URL格式为blob:https://basedomain.com/blob-url。当前所在页面为https://basedomain.com/current-page/,Blob内容已嵌入其中。原本以为可以通过AJAX请求获取内容,但使用playwright-python执行以下代码时:

page.evaluate(
    """uri => {
    var xhr = new XMLHttpRequest;
    xhr.responseType = 'blob';
    xhr.onload = function() {
        var recoveredBlob = xhr.response;
        var reader = new FileReader;
        reader.onload = function() {
            var blobAsDataUrl = reader.result;
            window.location = blobAsDataUrl;
        };
        reader.readAsDataURL(recoveredBlob);
    };
    xhr.open('GET', uri);
    xhr.send();
    }
    """, blob_url))

浏览器控制台日志报错:Security Error: Content at https://basedomain.com/current-page/ may not load data from blob://basedomain.com/blob-url,无法获取Blob内容。请问如何访问该Blob的内容?是否有Playwright内置功能可实现此需求,或能否绕过JavaScript访问限制?

解决方案

1. 用Playwright内置请求API直接获取

Playwright的page.request.get不受浏览器同源策略限制,可直接请求Blob URL拿到内容:

# 发送请求获取Blob内容
response = page.request.get(blob_url)
# 获取二进制数据
binary_data = response.body()

# 可选:转为Data URL格式
import base64
data_url = f"data:application/octet-stream;base64,{base64.b64encode(binary_data).decode()}"

这种方法完全绕开页面上下文的JS安全限制,操作更直接。

2. 调整页面CSP策略(仅调试场景)

如果必须在页面内通过JS访问,可修改页面的内容安全策略(CSP),允许加载Blob资源:

# 在页面加载前拦截请求,修改CSP头
page.route("https://basedomain.com/current-page/", lambda route: route.continue_(headers={
    **route.request.headers,
    "Content-Security-Policy": "default-src 'self' blob:;"
}))

之后再执行原AJAX代码即可正常访问,但注意这仅适用于测试或调试场景,生产环境修改CSP会带来安全风险。

3. 直接读取页面中已存在的Blob对象

既然Blob内容已嵌入页面,大概率页面中存在对应的Blob对象引用,可直接读取该对象而非通过URL请求:

data_url = page.evaluate("""() => {
    // 替换为页面中实际的Blob对象引用,比如某个全局变量或DOM元素属性
    const targetBlob = window.pageEmbeddedBlob;
    return new Promise((resolve) => {
        const reader = new FileReader();
        reader.onload = () => resolve(reader.result);
        reader.readAsDataURL(targetBlob);
    });
}""")

这种方法无需发起请求,直接操作已有的Blob对象,完全规避安全限制。

内容的提问来源于stack exchange,提问作者Valentin Metz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 19:31:08