# Tiktok Copy Adgroup Swap Creative

> 在 TikTok 广告管理平台用 Claude in Chrome 复制已有广告组、批量换成新达人素材（帖子授权码）、改名改预算改排期后发布。用户说「复制这个广告组投新素材 / 建品牌广告 / 这几个达人的视频拿去投」时使用。

- Skill: `njh20030605-code/tiktok-copy-adgroup-swap-creative` (Agent Skill)
- Install (CLI): `npx skillmds@latest add njh20030605-code/tiktok-copy-adgroup-swap-creative`
- Raw SKILL.md: https://api.skillmd.com/api/skills/njh20030605-code/tiktok-copy-adgroup-swap-creative/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: njh20030605-code (https://skillmd.com/u/njh20030605-code)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/njh20030605-code/tiktok-copy-adgroup-swap-creative

---


# 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,names[i]);
  el.dispatchEvent(new Event('input',{bubbles:true,composed:true}));
  el.dispatchEvent(new Event('change',{bubbles:true,composed:true}));el.blur();});
```

6. 「不要复制广告」**保持不勾选**——连广告一起复制，之后换素材比从零建广告省事（文案、CTA、目标页面都能继承）
7. 点「复制」→ 自动跳到批量编辑页，左侧树列出 N 个新草稿，每个下挂 1 个广告

### 2. 逐个广告组：改预算

预算输入框的稳定特征是 **placeholder 含「以上」**（如 `20.00 以上`）：

```js
const b=allEls(document).find(e=>e.tagName==='INPUT'&&/以上/.test(e.placeholder||''));
b.focus();s.call(b,'20.00');
b.dispatchEvent(new Event('input',{bubbles:true,composed:true}));
b.dispatchEvent(new Event('change',{bubbles:true,composed:true}));b.blur();
```

**校验必须读提示文案**，不能只看 `input.value`（React state 可能没提交）：

```js
[...document.querySelectorAll('div')].map(d=>d.innerText||'')
  .filter(x=>/每日平均花费为/.test(x)).sort((a,b)=>a.length-b.length)[0]
```

出现「每日平均花费为 20.00USD」才算写入成功。

### 3. 素材授权码批量导入（只做一次）

进第一个广告的创意区 →「+ 添加」→「TikTok 帖子」tab →「添加帖子」按钮 → 弹出「授权 TikTok 作品」文本域，**一次最多 20 个码，每行一个**，把本批全部码一次性粘进去（用 `HTMLTextAreaElement` 的 native setter），点「继续」→ 确认页点「添加 TikTok 作品」。

导完后这些帖子就进了账号素材库，**后面每个广告组直接按视频 ID 搜索即可，不用再走授权码流程**。

注意：刚导入的帖子会被**默认全部勾选**，当前这条广告只要留 1 个，其余要手动取消。取消时一次点一个、点完截图确认「已选择 N 个素材」计数，连点多个会漏。

### 4. 逐个广告：换素材 + 改广告名

1. 左侧树点开广告组的展开箭头 → 点它下面的广告
2. 向下滚到创意卡，**鼠标悬停**才会出现两个图标：
   - 铅笔 = 「在视频编辑器中打开」，**会开新标签页，不要点**
   - 垃圾桶 = 删除素材，点这个
3. 删除后创意区变成「+ 添加 / + 创建新视频」，点「+ 添加」
4. **先截图确认面板已渲染出来再点 tab**，面板没开就点会点空、甚至误触后面的页面元素把区块折叠掉
5. 切到「TikTok 帖子」tab 后，**第一次往搜索框输入经常丢**（tab 内容还在加载），输完截图看一眼，空的就补打一次
6. 搜索框输入视频 ID → 回车 → 结果只剩一条 → **核对作者名与达人用户名对得上** → 勾选 → 右下角「保存」
7. 保存后广告名仍是母本的名字，用 native setter 改成对应新名（广告层级不带结尾短横线）

### 5. 排期

副本默认继承母本的开始时间，**母本如果是定时的，副本也会是未来时间**，不会自动变成现在。用户要「立即投放」就必须手动改开始时间。「持续投放广告组」单选已选中即表示无结束时间。

排期日期框是自定义控件，坐标点击容易误触旁边的「展开选项」（会展开分时段面板并让页面跳动）。改之前先截图确认框的实际位置，改完再截图确认。

## 四、发布前的硬性规则

- **绝不自动点「全部发布」**。配置完先出一张对照表（广告组名 / 达人 / 素材作者 / 预算 / 排期）让用户确认，由用户决定谁来点。
- 用户说「停」「我检查」就立刻停手，不再改任何字段，并说清当前停在哪一步、哪些改了哪些没改。
- 页面底部「草稿已保存」说明改动不会丢，可以放心停。

## 五、发布后验证

回广告组列表页，确认：

- 4 条新广告组都在，状态「审核中」或「已排期」
- 预算列显示正确金额 + 日预算
- 开关是打开状态
- 「共计 N 个广告组」数字 = 原数 + 副本数

把广告组 ID 和名称列表回给用户。

## 六、常见提示（属正常，不用处理）

- 创意卡上「此 TikTok 帖子中的链接将仅面向以下地域显示：越南。发布后请勿更改锚点，否则可能影响归因」——Spark/BC 帖子的固定提示
- 「1 个创意包含内容警告，可能会影响广告投放」——母本原本就有
- 页面顶部「账户余额预计将在 N 天内用完」——**这条要主动提醒用户**，并算清新增广告组后每天多烧多少
