批量添加 GitHub 仓库协作者
六月 13, 2026 [playwright] #github #playwright #自动化 #browser概述
使用 Playwright CLI 连接远程浏览器,批量为 peterlishihu 用户下全部 29 个仓库添加 moxuetianya 作为协作者。
环境
- 本地机器: 通过 SSH 隧道转发远程 Chrome 调试端口
- 远程浏览器: Chrome 149, 以
--remote-debugging-port=9222 --remote-debugging-address=0.0.0.0启动 - Playwright CLI: 通过 CDP 协议连接
http://127.0.0.1:9222
# 远程机器启动 Chrome
google-chrome --remote-debugging-port=9222 --remote-debugging-address=0.0.0.0 --user-data-dir=/tmp/chrome-debug
# 本地建立 SSH 隧道
ssh -L 9222:127.0.0.1:9222 user@192.168.2.100
# 连接远程浏览器
playwright-cli attach --cdp=http://127.0.0.1:9222
操作流程
对每个仓库执行以下步骤:
- 导航到仓库的 Collaborators 设置页 (
/<owner>/<repo>/settings/access) - 检查页面是否已包含
@moxuetianya,若有则跳过 - 点击 "Add people" 按钮
- 在弹出的对话框中输入
moxuetianya搜索用户 - 检查搜索结果是否已禁用(表示已邀请),若是则关闭对话框跳过
- 选中
@moxuetianya选项 - 点击 "Add moxuetianya" 确认添加
Playwright 脚本
async page => {
const repos = ["proxy-shoes","learn-frontend","learn-architecture","his",/* ... 共29个 */];
for (const repo of repos) {
await page.goto(`https://github.com/peterlishihu/${repo}/settings/access`, { waitUntil: 'load' });
await page.waitForTimeout(2500);
// 检查是否已存在
const text = await page.evaluate(() => document.body.innerText);
if (text.includes('@moxuetianya')) continue;
// 打开添加对话框
await page.getByRole('button', { name: 'Add people' }).click();
await page.waitForTimeout(1000);
// 搜索用户
await page.getByRole('combobox', { name: 'Find people' }).fill('moxuetianya');
await page.waitForTimeout(2000);
// 检查是否已禁用(已邀请)
const disabled = await page.evaluate(() => {
const opt = document.querySelector('[role="option"][aria-disabled="true"]');
return opt && opt.textContent.includes('moxuetianya');
});
if (disabled) { await page.keyboard.press('Escape'); continue; }
// 选中并确认
await page.getByRole('option', { name: '@moxuetianya' }).click();
await page.getByRole('button', { name: /Add moxuetianya/ }).click();
await page.waitForTimeout(2000);
}
};
结果统计
| 状态 | 数量 | 仓库 |
|---|---|---|
| 本次添加 | 15 | learn-frontend, his, learn-pipewire-bluetooth, mobile-smb, obsidian, trace-learn, learn-langchain, learn-protobuf, learn-tcpip, bt-learn, wifi-learn, zod-learn, p2p-learn, my-skills, Qwen3.5 |
| 已存在 | 14 | proxy-shoes, learn-architecture, learn-tpm-grub, learn-linux, linux-translate, linux-dlna, learn-opencode, juzhong, phone-access-card, claude-config, learn-vless, learn-ssh, learn-tls, learn-socks5 |
全部 29 个仓库均已完成。