Widevine DRM,用于自动化 Chromium
开源 Chromium 构建不带 Widevine CDM,所以 DRM 视频会播放失败,requestMediaKeySystemAccess('com.widevine.alpha') 也会被拒绝,而原版桌面 Chrome 通常能正常解析它。启动时传入 widevine,SDK 就会从 Google 的组件服务器获取 CDM,完成校验并将其启用。
所有套餐均可用,需主动开启。
一个启动选项
from clearcote import launch_persistent_context
ctx = launch_persistent_context("./profile-drm", widevine=True) # fetch, verify, enable
page = ctx.pages[0] if ctx.pages else ctx.new_page()
page.goto("https://your-drm-site.example")
# navigator.requestMediaKeySystemAccess('com.widevine.alpha') now resolves亮点
按 Chrome 的方式获取
CDM 来自 Google 自己的组件服务器,与原版 Chrome 获取它的方式相同,每个版本只下载一次。Clearcote 从不分发它。
使用前先校验
下载内容会经过 SHA-256 校验,缺少哈希值时直接拒绝,因为 CDM 是一个原生库。
缓存复用
存放在 ~/.clearcote/WidevineCdm 下,所以每个版本只下载一次。可以用 fetchWidevine() 提前获取,免得首次启动时才下载;不过每次启动仍会直接从本机向 Google 发起一次快速的版本检查。
一致的 EME 应答
真实的 Chrome 能解析 Widevine 密钥系统查询。装好 CDM 后,Clearcote 也能。
优雅降级
如果无法获取 CDM,启动会在没有 DRM 的情况下继续,而不是直接失败。
L3 播放
软件安全级别(L3)播放。硬件安全级别 L1 不在支持范围内。
为什么需要主动开启
Google 的 CDM 是闭源二进制文件。它不能成为开源版构建的一部分,Clearcote 也不会随授权版构建重新分发它。所以浏览器发布时已经编译了 EME 的底层管道,但不含 CDM,下载需要由你自己触发。
CDM 存放在配置文件中。在 Python 里,它可以配合 launch_persistent_context 使用,也可以配合运行在一次性配置文件上的 launch() 使用(指同步 API;异步 launch() 是隐身模式,所以那种情况请用 launch_persistent_context);在 Node 中请使用 launchPersistentContext。隐身模式启动(ephemeral_profile=False)无法使用它。SDK 会重新启用组件更新程序,并在 Windows 上强制执行一次快速更新扫描,让引擎注册该 CDM。
它的意义也不止于视频。Widevine 密钥系统能否解析,又是一项页面可以读取的信息,而一个无法给出应答的 Chrome,看起来就不像 Chrome。
典型用途
流媒体 QA
在你自己受 DRM 保护的内容库上,测试播放、授权权益和播放器界面。
媒体监测
对播放受保护视频的页面进行自动化检查。
完整的 Chrome 身份画像
即使从不播放视频,也让 EME 应答与真实 Chrome 保持一致。
Clearcote 专为隐私保护、测试、研究和合法自动化而打造。你须对自己的使用方式负责,并遵守所访问网站的条款。
哪些套餐包含此功能
所有套餐均可用,需主动开启,支持软件安全级别(L3)播放。
对比套餐常见问题
如何在 Playwright 中启用 Widevine?
通过 Clearcote SDK 启动,并传入 widevine=True(Python:同步 launch() 或持久化上下文)或 widevine: true(Node:launchPersistentContext)。SDK 会下载一次 CDM,校验后预置到配置文件中并启用。.NET SDK 暂时还没有 Widevine 选项。
为什么开源 Chromium 无法播放 DRM 视频?
Widevine CDM 是专有软件,不能随开源构建一起分发。没有它,DRM 播放和 EME 密钥系统查询都会失败。
Clearcote 自带 CDM 吗?
不包含。CDM 在你主动开启时从 Google 的组件服务器获取,与原版 Chrome 获取它的方式相同。Clearcote 从不分发它。
支持哪个安全级别?
软件安全级别 L3。部分服务在高分辨率下要求的硬件安全级别 L1,不在支持范围内。
需要持久化配置文件吗?
它需要一个配置文件,但不一定是持久保留的那种。CDM 安装在配置文件中,所以在 Python 里,同步 launch() 背后的一次性配置文件和 launch_persistent_context 一样可用(异步 launch() 是隐身模式);在 Node 中请使用 launchPersistentContext。只有隐身模式启动(ephemeral_profile=False)无法使用。
在文档中深入了解
相关功能
启动时加载解压版 Manifest V2 和 V3 扩展,有头无头皆可,支持 Windows 和 Linux。
可直接替换的 Chromium,适用于 Playwright 和 Puppeteer:在 Python、Node 或 .NET 中只需改一行 import,浏览器会自动下载并完成 SHA-256 校验。
Canvas、WebGL、WebGPU、音频、字体、屏幕和硬件都由 C++ 引擎从一个种子派生,区域设置和时区也随之匹配,让每个检测面彼此一致。
每个账号一个种子:每次会话都是同一台设备,下一个账号则是另一台,cookie 和存储在多次运行之间持久保留。
相关阅读
试用 Clearcote
可直接接入 Playwright 与 Puppeteer,一直到 TLS 握手都保持一致,并提供开源构建作为起点。
通过 GitHub 可免费使用一个浏览器。无需信用卡。