如何程序化获取chrome://gpu内容?Chromium访问限制问询
问题解答
1. 能否解除Chromium对chrome://gpu的拦截限制?
不能。Chromium对chrome://前缀的内部页面设置了严格的访问限制,这是浏览器的核心安全设计——这类页面直接暴露浏览器内部状态、硬件交互逻辑等敏感信息,允许外部程序直接调用会带来严重安全风险。官方没有提供任何可解除该限制的配置项或命令行参数。
2. 程序化获取GPU信息的可行方案
如果无法绕过拦截,以下几种官方支持的方式比模拟操作更可靠:
方案一:使用Chrome DevTools Protocol(CDP)
这是Chromium原生的程序化控制接口,可直接获取结构化的GPU数据,无需模拟页面操作:
- 先启动Chromium并开启远程调试端口:
chromium --remote-debugging-port=9222 - 通过CDP的
GPU.getInfo方法获取详细信息,可借助Python的pyppeteer、selenium等库实现,示例代码:
该方法返回的是JSON格式的结构化数据,包含GPU硬件信息、驱动版本、支持特性等,比页面内容更易解析。import asyncio from pyppeteer import launch async def get_gpu_info(): browser = await launch(headless=True, args=['--no-sandbox']) page = await browser.newPage() # 直接调用CDP的GPU接口 gpu_info = await page._client.send('GPU.getInfo') print(gpu_info) await browser.close() asyncio.get_event_loop().run_until_complete(get_gpu_info())
方案二:读取Chromium日志输出
启动Chromium时添加日志参数,让浏览器输出GPU相关日志:
chromium --enable-logging=stderr --v=1 2>&1 | grep -i gpu
通过过滤日志可提取GPU初始化、特性支持等信息,但数据结构不如CDP规整。
关于模拟操作的补充说明
你尝试的wtype、ydotool属于UI层面模拟,可靠性低且存在固有问题:
chrome://gpu的内容是通过gpu_internals.js动态渲染的,直接保存页面只能拿到静态框架,无法获取动态生成的内容;- 浏览器对内部页面的“另存为”逻辑有特殊处理,即使模拟操作也无法直接拿到完整渲染后的内容。
如果一定要获取渲染后的页面内容,也可以用CDP的Page.captureSnapshot方法抓取完整DOM,或通过Runtime.evaluate执行页面JS,直接提取gpu_internals.js生成的数据。
内容的提问来源于stack exchange,提问作者Bram
相关产品推荐
相关产品推荐

