编辑
2026-07-29
技术
00

目录

千川广告 CDP 自动化:不用 Selenium 的 Chrome 操控方案
为什么不用 Selenium
CDP 方案的优势
架构:两个浏览器实例
登录流程:最头疼的部分
自动重登方案
CDP 操作脚本核心流程
实战:品广加热(典型操作流)
操作步骤
CDP 实现
自动化脚本的进化
踩坑实录
适合谁用
下一步

千川广告 CDP 自动化:不用 Selenium 的 Chrome 操控方案

为什么不用 Selenium

接触过电商广告投放自动化的朋友,第一个想到的肯定是 Selenium 或 Playwright。我也试过,但痛点很明显:

  • — 每次启动浏览器 + 加载页面,十几秒就没了
  • 容易被检测 — 平台对自动化工具越来越敏感(user-agent、navigator.webdriver)
  • 元素定位脆弱 — 千川的 DOM 结构三天两头变,XPath 说废就废
  • Cookie 管理麻烦 — 需要持久化的登录态,Selenium 的 profile 管理不够透明

Chrome DevTools Protocol(CDP) 是另一条路。它不是模拟用户操作,而是通过 WebSocket 协议直接控制 Chrome 的 DevTools 功能。


CDP 方案的优势

Selenium 模式 CDP 模式 ┌──────────────┐ ┌──────────────┐ │ 模拟点击输入 │ vs. │ 直接调 API │ │ ← 慢速、脆弱 │ │ ← 快速、稳定 │ │ 浏览器检测风险 │ │ ← 无痕迹 │ │ 依赖 selector │ │ ← DOM 直接交互│ └──────────────┘ └──────────────┘
  • 速度 — 页面一加载完就能操作,不用等模拟渲染
  • 隐身性 — CDP 本身是 Chrome 的标准调试协议,不存在检测问题
  • 稳定性 — 通过 Runtime.evaluate 直接执行 JS,不用找元素定位
  • 持久 Profile — 指定 Chrome 用户数据目录,Cookie/登录态天然持久

架构:两个浏览器实例

桌面 Chrome (9222) Headless Chrome (9223) 日常跟播、监控 定时任务、批量操作 ┌─────────────────┐ ┌─────────────────┐ │ GUI 可见 │ │ 后台运行 │ │ 实时跟播调控 │ │ 素材追投 │ │ ROI 监控 │ │ 一键调速 │ │ 计划新建/编辑 │ │ 数据拉取 │ └─────────────────┘ └─────────────────┘

9222(桌面):启动时 --remote-debugging-port=9222,日常跟播时我还能看到浏览器界面,做人工干预。

9223(Headless):纯后台运行,处理定时任务(素材追投、预算调控、数据采集)。


登录流程:最头疼的部分

千川(巨量引擎)登录走的是字节的 SSO 系统,Cookie 有效期不长,过期就要重新登录。

自动重登方案

1. POST business.oceanengine.com/login 2. 切换到密码登录模式 3. 填入邮箱: 2601890547@qq.com 4. 填入密码 5. 点击登录按钮 6. 验证页面跳转后的 Cookie 7. 跳转到千川后台 (qianchuan.jinritemai.com/brand_bid/)

关键点:

  • 窗口复用 — 不每次新开窗口,复用已有标签页节省资源
  • Cookie 持久化 — Profile 目录设在数据盘 /data/hermes/chrome-profile/,重启不丢
  • Session 检测 — 操作前先检查当前页面是否登录过期,发现过期自动重登

CDP 操作脚本核心流程

python
# 1. 连接到 Chrome import json, requests ws_endpoint = json.loads( requests.get("http://127.0.0.1:9222/json/version").text )["webSocketDebuggerUrl"] # 2. 获取已有标签页或新建 tabs = json.loads(requests.get("http://127.0.0.1:9222/json").text) target = next((t for t in tabs if "qianchuan" in t["title"]), None) if not target: # 新建标签页并导航 ... # 3. 通过 CDP 执行 JavaScript # Runtime.evaluate → 获取数据、操作 DOM、发起请求

实战:品广加热(典型操作流)

品广加热是千川的一个核心功能——对正在直播的商品加热引流。

操作步骤

1. 进入 brand_bid/creation/feed-live-heating?type=create 2. 选择推广目标(直播间) 3. 设置预算、出价方式 4. 选择投放人群包 5. 提交计划 → 等待审核 → 在线

CDP 实现

python
# 设置表单字段 cdp_evaluate(""" document.querySelector('[data-field="budget"] input').value = '500'; """) # 触发 React 更新 cdp_evaluate(""" document.querySelector('[data-field="budget"] input') .dispatchEvent(new Event('input', {bubbles: true})); """) # 点击提交 cdp_evaluate(""" document.querySelector('.submit-button').click(); """)

React/Angular 框架的页面不能直接 element.value = x,必须 dispatch 事件触发框架的响应式更新。这是踩坑最多的点。


自动化脚本的进化

脚本 /data/hermes/scripts/qianchuan_plan_crud.py 经历了几轮迭代:

v1: 单条计划创建 → 手动输入参数 v2: 批量操作 → 从 CSV 读取配置 v3: 智能决策 → 根据 ROI 数据自动调速 v4: 全链路闭环 → 创建 → 监控 → 调整 → 汇报

当前能力:

  • 素材追投(对高 ROI 素材自动加预算)
  • 一键调速(ROI > 目标值 → 提预算,ROI < 目标值 → 降预算或关停)
  • 品广加热(新计划创建)
  • 账户余额预警(余额 < 300 通知用户)
  • 操作决策(ROI 达标可自主调节,异常情况 @ 用户)

踩坑实录

1. React 表单绑定 CDP 设置 input.value 后必须 dispatch inputchange 事件,否则框架读不到新值。

2. 跨域 Cookie 千川的登录 Cookie 是 oceanengine.com 的,但千川后台是 qianchuan.jinritemai.com。跨域 Cookie 要设置 SameSite=None; Secure,Chrome 版本更新后默认 stricter 了,需要手动配置。

3. Profile 冲突 桌面浏览器和 CDP 实例不能共用同一个 Profile 目录。用两个独立目录,或者启动桌面 Chrome 时加上 --remote-debugging-port 让 CDP 直连。

4. 界面异步加载 千川的页面大量用异步 chunk 加载,操作前要轮询检查目标元素是否存在,不能假设页面加载完就可用。


适合谁用

这套方案不一定适合所有人。它更适合:

  • 每天长时间跑千川广告的投手
  • 有技术能力(至少能改 Python 脚本)的运营
  • 愿意接受"偶尔翻车"的早期用户

如果你只是想简单看看数据,千川官方报表就够用了。但如果你想实现自动化跟播、智能调速、批量操作,CDP 方案是性价比最高的选择。


下一步

  • 自然语言指令 — 通过 Agent 把"铁观音提 10% 预算"转成 CDP 操作
  • 数据闭环 — 投放效果数据回流知识库,自动优化策略
  • 多账号轮巡 — 同时在多个千川账号间切换操作

本文作者:丘丘

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!