Loading...
Loading...
Compare original and translation side by side
用户: 打开百家号发布页面
用户: 帮我进入知乎写文章
用户: 切换到搜狐号发布文章
用户: 帮我发布文章到百家号用户: 打开百家号发布页面
用户: 帮我进入知乎写文章
用户: 切换到搜狐号发布文章
用户: 帮我发布文章到百家号| 平台代码 | 平台名称 | 发布页面URL | 自动化状态 |
|---|---|---|---|
| 百家号 | https://baijiahao.baidu.com/builder/rc/edit?type=news | ✅ 完全支持 |
| 搜狐号 | https://mp.sohu.com/api/author/article/new | ✅ 完全支持 |
| 知乎 | https://zhuanlan.zhihu.com/write | ✅ 支持Cookie登录 |
重大更新: 使用 Playwright MCP 后,知乎可以通过管理登录态,不再需要调试端口!storageState
| 平台代码 | 平台名称 | 发布页面URL | 自动化状态 |
|---|---|---|---|
| 百家号 | https://baijiahao.baidu.com/builder/rc/edit?type=news | ✅ 完全支持 |
| 搜狐号 | https://mp.sohu.com/api/author/article/new | ✅ 完全支持 |
| 知乎 | https://zhuanlan.zhihu.com/write | ✅ 支持Cookie登录 |
重大更新: 使用 Playwright MCP 后,知乎可以通过管理登录态,不再需要调试端口!storageState
mcp__plugin_playwright_playwright__browser_navigatemcp__plugin_playwright_playwright__browser_navigate| 字段 | 说明 | 示例 |
|---|---|---|
| 文章标题 | 文章的标题 | "如何用Python自动化发布文章" |
| 正文内容 | Markdown格式的文章内容 | "# 引言\n这是正文..." |
| 字段 | 说明 | 示例 |
|---|---|---|
| 文章标题 | 文章的标题 | "如何用Python自动化发布文章" |
| 正文内容 | Markdown格式的文章内容 | "# 引言\n这是正文..." |
| 字段 | 说明 | 适用平台 |
|---|---|---|
| 封面图片 | 本地图片路径或图片URL | 全平台 |
| 文章摘要 | 文章的简短摘要 | 百家号/搜狐号 |
| 字段 | 说明 | 适用平台 |
|---|---|---|
| 封面图片 | 本地图片路径或图片URL | 全平台 |
| 文章摘要 | 文章的简短摘要 | 百家号/搜狐号 |
| 字段 | 说明 | 适用平台 |
|---|---|---|
| 文章话题/标签 | 相关话题标签,多个用逗号分隔 | 全平台 |
| 投稿至问题 | 将文章投稿到的知乎问题 | 知乎 |
| 分类/栏目 | 文章所属分类 | 百家号/搜狐号 |
| 字段 | 说明 | 适用平台 |
|---|---|---|
| 文章话题/标签 | 相关话题标签,多个用逗号分隔 | 全平台 |
| 投稿至问题 | 将文章投稿到的知乎问题 | 知乎 |
| 分类/栏目 | 文章所属分类 | 百家号/搜狐号 |
| 字段 | 说明 | 适用平台 |
|---|---|---|
| 创作声明 | 原创声明/转载声明 | 全平台 |
| 可见性设置 | 公开/仅自己可见/定时发布 | 全平台 |
| 专栏 | 发布到指定专栏 | 知乎 |
| 字段 | 说明 | 适用平台 |
|---|---|---|
| 创作声明 | 原创声明/转载声明 | 全平台 |
| 可见性设置 | 公开/仅自己可见/定时发布 | 全平台 |
| 专栏 | 发布到指定专栏 | 知乎 |
pythonpythonundefinedundefinedpythonpythonundefinedundefinedpythonpythonundefinedundefined| 字段 | 百家号选择器 | 搜狐号选择器 | 知乎选择器 |
|---|---|---|---|
| 标题输入框 | input[placeholder*="请输入标题"] | input[name="title"] | .WriteIndex-titleInput |
| 正文编辑器 | iframe .editor-body | #editor | .PublicDraftEditor-content |
| 封面上传 | .upload-cover-btn | .cover-upload | .UploadCoverButton |
| 摘要输入框 | textarea[placeholder*="摘要"] | textarea[name="summary"] | ❌ 不支持 |
| 分类选择器 | .category-select | .column-select | ❌ 用话题替代 |
| 话题输入框 | ❌ 不支持 | .tag-input | .TopicEditor-input |
| 投稿问题 | ❌ 不支持 | ❌ 不支持 | .PublishToQuestion |
| 发布按钮 | button:has-text("发布") | button.publish-btn | button:has-text("发布") |
| 字段 | 百家号选择器 | 搜狐号选择器 | 知乎选择器 |
|---|---|---|---|
| 标题输入框 | input[placeholder*="请输入标题"] | input[name="title"] | .WriteIndex-titleInput |
| 正文编辑器 | iframe .editor-body | #editor | .PublicDraftEditor-content |
| 封面上传 | .upload-cover-btn | .cover-upload | .UploadCoverButton |
| 摘要输入框 | textarea[placeholder*="摘要"] | textarea[name="summary"] | ❌ 不支持 |
| 分类选择器 | .category-select | .column-select | ❌ 用话题替代 |
| 话题输入框 | ❌ 不支持 | .tag-input | .TopicEditor-input |
| 投稿问题 | ❌ 不支持 | ❌ 不支持 | .PublishToQuestion |
| 发布按钮 | button:has-text("发布") | button.publish-btn | button:has-text("发布") |
// 1. 手动登录一次平台
await page.goto("https://www.zhihu.com")
// ... 用户手动登录 ...
// 2. 保存登录状态
await context.storageState({ path: 'zhihu_account1.json' })// 加载已保存的登录态
const context = await browser.newContext({
storageState: 'zhihu_account1.json'
})// 1. 手动登录一次平台
await page.goto("https://www.zhihu.com")
// ... 用户手动登录 ...
// 2. 保存登录状态
await context.storageState({ path: 'zhihu_account1.json' })// 加载已保存的登录态
const context = await browser.newContext({
storageState: 'zhihu_account1.json'
})python scripts/media_publisher.py baijiahao
python scripts/media_publisher.py open baijiahaopython scripts/media_publisher.py info baijiahaopython scripts/media_publisher.py workflow baijiahao
python scripts/media_publisher.py workflow sohu --output workflow.json --format jsonpython scripts/media_publisher.py check-login baijiahao
python scripts/media_publisher.py check-login sohu --snapshot snapshot.txtpython scripts/media_publisher.py detect-popup baijiahao
python scripts/media_publisher.py detect-popup sohu --snapshot snapshot.txtpython scripts/media_publisher.py baijiahao
python scripts/media_publisher.py open baijiahaopython scripts/media_publisher.py info baijiahaopython scripts/media_publisher.py workflow baijiahao
python scripts/media_publisher.py workflow sohu --output workflow.json --format jsonpython scripts/media_publisher.py check-login baijiahao
python scripts/media_publisher.py check-login sohu --snapshot snapshot.txtpython scripts/media_publisher.py detect-popup baijiahao
python scripts/media_publisher.py detect-popup sohu --snapshot snapshot.txtpython scripts/cookie_manager.py save zhihu --account "账号1"
python scripts/cookie_manager.py list
python scripts/cookie_manager.py switch zhihu "账号1"python scripts/cookie_manager.py save zhihu --account "账号1"
python scripts/cookie_manager.py list
python scripts/cookie_manager.py switch zhihu "账号1"python
mcp__plugin_playwright_playwright__browser_run_code(code='''
async (page) => {
const closeSelectors = ['下一步', '立即体验', '我知道了', '知道了'];
for (const selector of closeSelectors) {
try {
const element = await page.getByText(selector).first();
if (await element.isVisible()) {
await element.click();
await page.waitForTimeout(500);
}
} catch (e) {}
}
await page.evaluate(() => {
document.querySelectorAll('dialog, [role="dialog"], .tooltip').forEach(el => el.remove());
});
return { success: true };
}
''')python
mcp__plugin_playwright_playwright__browser_run_code(code='''
async (page) => {
const closeSelectors = ['下一步', '立即体验', '我知道了', '知道了'];
for (const selector of closeSelectors) {
try {
const element = await page.getByText(selector).first();
if (await element.isVisible()) {
await element.click();
await page.waitForTimeout(500);
}
} catch (e) {}
}
await page.evaluate(() => {
document.querySelectorAll('dialog, [role="dialog"], .tooltip').forEach(el => el.remove());
});
return { success: true };
}
''')| 平台 | 关闭按钮关键词 |
|---|---|
| 百家号 | 我知道了、下一步、立即体验、关闭、× |
| 搜狐号 | 我知道了、知道了、关闭、× |
| 知乎 | 跳过、以后再说、不再提示、关闭 |
| 平台 | 关闭按钮关键词 |
|---|---|
| 百家号 | 我知道了、下一步、立即体验、关闭、× |
| 搜狐号 | 我知道了、知道了、关闭、× |
| 知乎 | 跳过、以后再说、不再提示、关闭 |
| 功能 | Chrome DevTools MCP | Playwright MCP |
|---|---|---|
| 导航 | navigate_page | browser_navigate |
| 快照 | take_snapshot | browser_snapshot |
| 点击 | click | browser_click |
| 填写 | fill | browser_fill_form / browser_type |
| 截图 | - | browser_take_screenshot |
| 等待 | - | browser_wait_for |
| 执行代码 | - | browser_run_code |
| 文件上传 | - | browser_file_upload |
| 功能 | Chrome DevTools MCP | Playwright MCP |
|---|---|---|
| 导航 | navigate_page | browser_navigate |
| 快照 | take_snapshot | browser_snapshot |
| 点击 | click | browser_click |
| 填写 | fill | browser_fill_form / browser_type |
| 截图 | - | browser_take_screenshot |
| 等待 | - | browser_wait_for |
| 执行代码 | - | browser_run_code |
| 文件上传 | - | browser_file_upload |
await browser.newContext({
storageState: 'zhihu_cookies.json'
})await browser.newContext({
storageState: 'zhihu_cookies.json'
})| 问题 | 解决方案 |
|---|---|
| 未登录 | 提示用户先登录并保存 storageState |
| Cookie失效 | 使用cookie_manager.py重新保存登录状态 |
| 弹窗无法关闭 | 手动截图,分析弹窗结构后更新关闭规则 |
| 页面加载超时 | 使用browser_wait_for增加等待时间 |
| 知乎反爬 | Playwright 的 storageState 可有效绕过检测 |
| 填写失败 | 使用browser_run_code直接执行JavaScript |
| 问题 | 解决方案 |
|---|---|
| 未登录 | 提示用户先登录并保存 storageState |
| Cookie失效 | 使用cookie_manager.py重新保存登录状态 |
| 弹窗无法关闭 | 手动截图,分析弹窗结构后更新关闭规则 |
| 页面加载超时 | 使用browser_wait_for增加等待时间 |
| 知乎反爬 | Playwright 的 storageState 可有效绕过检测 |
| 填写失败 | 使用browser_run_code直接执行JavaScript |
| 特性 | Chrome DevTools | Playwright |
|---|---|---|
| 知乎登录 | 需要调试端口 | storageState 支持 |
| 多浏览器 | 仅 Chrome | Chrome/Firefox/Safari |
| Cookie管理 | 手动导入 | storageState() API |
| 反爬检测 | 自动化特征明显 | 可伪装真实浏览器 |
| 跨平台 | 依赖 Chrome | 多引擎支持 |
| 文件上传 | 需要特殊处理 | browser_file_upload |
| 特性 | Chrome DevTools | Playwright |
|---|---|---|
| 知乎登录 | 需要调试端口 | storageState 支持 |
| 多浏览器 | 仅 Chrome | Chrome/Firefox/Safari |
| Cookie管理 | 手动导入 | storageState() API |
| 反爬检测 | 自动化特征明显 | 可伪装真实浏览器 |
| 跨平台 | 依赖 Chrome | 多引擎支持 |
| 文件上传 | 需要特殊处理 | browser_file_upload |
async (page) => {
await page.setExtraHTTPHeaders({
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
});
await page.addInitScript(() => {
Object.defineProperty(navigator, 'webdriver', {
get: () => false
});
});
await page.goto('https://zhuanlan.zhihu.com/write');
}async (page) => {
await page.setExtraHTTPHeaders({
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
});
await page.addInitScript(() => {
Object.defineProperty(navigator, 'webdriver', {
get: () => false
});
});
await page.goto('https://zhuanlan.zhihu.com/write');
}python scripts/cookie_manager.py list
python scripts/cookie_manager.py save zhihu --account "主账号"
python scripts/cookie_manager.py save zhihu --account "小号"python scripts/cookie_manager.py list
python scripts/cookie_manager.py save zhihu --account "主账号"
python scripts/cookie_manager.py save zhihu --account "小号"