源码教程:Cookie、存储与页面设置
这一组命令最容易混淆作用域。任务的 Page 可以独立,但 BrowserContext 可能共享;修改上下文会影响多个任务。不能把所有 set 开头的命令都当作当前页设置。
1. Cookie 是 Context 级数据
| 命令 | 实现 |
|---|---|
get_cookies | 调用 context.cookies,可按 URL 过滤;将 Cookie 对象转为字段列表并返回 count |
set_cookie | 创建含 name、value 的 Cookie,按可选 url 设置作用域,再调用 addCookies |
clear_cookies | 调用 context.clearCookies,清除共享上下文 Cookie,不是只清当前域名 |
当前 set_cookie 命令没有暴露 domain/path 等完整 Cookie 构造参数。实际使用应提供有效 URL;不能因为 url 在注册层可选就认为缺少作用域的 Cookie 一定能添加成功。
{"id":"1001","method":"set_cookie","params":{"name":"demo_preference","value":"compact","url":"https://example.com"}}
不要在公开示例中使用真实登录 Cookie。读取 Cookie 的返回属于账号数据,不能因为是只读操作就随意写入教程。
2. localStorage 由当前页面 origin 决定
get_local_storage 在当前 Page 执行脚本:传 key 时读取单项,未传时返回整个 localStorage 的 JSON 字符串,放在 data.value。客户端若需要对象,应再解析该字符串,而不是假定 data.value 本身已经是对象。
set_local_storage 调用 localStorage.setItem;clear_local_storage 调用 localStorage.clear。它们作用于当前页面的 origin。共享上下文中,同源页签会看到同一份持久化数据;换到另一个域名后,读到的不是原站点数据。
不透明 origin 或受限制页面可能拒绝存储访问。先导航到需要测试的本地站点,不要在空白页上用失败结果判断存储实现坏了。
3. 设置命令的真实作用域
| 命令 | 调用对象 | 实现和影响 |
|---|---|---|
set_viewport | Page | setViewportSize,修改当前页 CSS 视口,返回 width/height |
set_media | Page | emulateMedia,设置 light/dark/no-preference,不是操作系统主题 |
set_geolocation | Context | 先授予 geolocation 权限,再设置经纬度 |
set_offline | Context | setOffline,影响共享上下文网络状态 |
set_headers | Context | 解析 headersJson 为字符串映射,调用 setExtraHTTPHeaders |
set_credentials | Context 创建配置 | HTTP 基本认证参数需要重建上下文,服务会检查任务数和启动方式 |
headersJson 是一个包含 JSON 文本的字符串,不是 params 内任意嵌套对象:
{"id":"1001","method":"set_headers","params":{"headersJson":"{\"X-Demo-Mode\":\"fixture\"}"}}
set_credentials 不是网站登录表单填用户名密码。当前实现只允许具备可重建配置、且没有其他任务会受影响时执行;CDP 接入路径可能没有可重建的持久上下文选项,会明确拒绝。
4. 验证与恢复
使用两个同源页签和一个不同源页签测试 Cookie、localStorage 的共享边界。视口与主题测试则验证只改变当前 Page。设置离线、请求头或地理位置后记录原始配置,在测试结束恢复,避免影响后续任务。涉及真实共享 profile 时,不能把 clear_cookies 当作普通的无损重置。
注册参数与 Java 入口
以下按 CommandTable 实际读取参数整理。* 表示注册层使用必填读取器;其余字段省略后由服务决定默认行为。带条件的入口仍需满足正文说明,例如上传文件来源、元素定位二选一。外层 id 不重复列出。
| 命令 | params 字段 | Java 入口 |
|---|---|---|
get_cookies | url | getCookies |
set_cookie | name、value、url | setCookie |
clear_cookies | 无 | clearCookies |
get_local_storage | key | getLocalStorage |
set_local_storage | key*、value | setLocalStorage |
clear_local_storage | 无 | clearLocalStorage |
set_viewport | width、height | setViewport |
set_geolocation | latitude、longitude | setGeolocation |
set_offline | offline | setOffline |
set_headers | headersJson* | setHeaders |
set_credentials | username、password | setCredentials |
set_media | colorScheme* | setMedia |
