tiktok-copy-adgroup-swap-creativelisted
Install: claude install-skill njh20030605-code/claude-skills
# TikTok 复制广告组 + 批量换素材建计划
适用场景:用户给一批达人视频链接 + 帖子授权码(`#xxxx=`),要求参照某条已有广告组复制出 N 条、每条换成对应素材后投放。
典型触发语:「这几个要复制投 XX 的品牌广告,20 美金一天」「你可以直接接管 开始投」「复制这个,改一下日期、达人ID、素材ID」。
## 一、开场必问清单(在动手前一次问清)
每次需求都不一样,以下 6 项不确认完不要开始操作。用户没说的就问,能从截图/链接推断的先推断再复述确认:
1. **复制源**:哪条广告组作为母本(拿到完整名称或广告组 ID)
2. **副本数量与对应关系**:每条副本配哪个达人的哪条视频
3. **日预算**:金额、日预算还是总预算
4. **排期**:立即开跑还是定时;长期投放(无结束时间)还是设结束时间
5. **系列归属**:复制到原系列下还是新建系列
6. **素材来源**:帖子授权码 / 账号已授权的帖子 / 上传新视频
复制弹窗里的「将副本添加到」默认就是原系列(标「原始」),要放别的系列必须在这一步改,事后改不了。
## 二、命名规则
从母本名称反推,不要自己发明。KANS 越南的惯例:
```
广告组:MMDD-达人用户名-产品-BC-人群-视频ID- ← 结尾带短横线
广告 :MMDD-达人用户名-产品-BC-人群-视频ID ← 结尾不带
```
- `MMDD` = 建计划当天日期,不是母本的日期
- 达人用户名 = TikTok 链接里 `@` 后面那段(`@yayathao` → `yayathao`)
- 视频ID = 链接里 `/video/` 后面那串数字
- 母本名里的产品、`BC`、人群部分原样保留
提交前把新旧名称列成对照表让用户确认。
## 三、操作流程
### 1. 复制广告组
1. 打开 `https://ads.tiktok.com/i18n/manage/adgroup?aadvid=<广告账户ID>`,切到「广告组」tab
2. 用 JS 找到母本行(按名称关键字匹配叶子节点),再靠截图定位该行最左侧的勾选框坐标——**页面没有原生 `input[type=checkbox]`,JS 查不到,只能看图点**
3. 勾选后顶部工具条出现「复制」,点开弹窗
4. 「副本数量」点 `+` 按钮加到 N(别直接改数字框),随后会出现 N 个名称输入框
5. **名称框是 React 受控组件**,用坐标逐个清空重打很慢且易错,用 native setter 一次性写入:
```js
function allEls(root,out){out=out||[];for(const e of root.querySelectorAll('*')){out.push(e);if(e.shadowRoot)allEls(e.shadowRoot,out);}return out;}
const ins=allEls(document).filter(e=>e.tagName==='INPUT'&&/副本/.test(e.value||''));
const names=[/* 按顺序 */];
const s=Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype,'value').set;
ins.forEach((el,i)=>{el.focus();s.call(el,