你是不是也受够了自动化脚本里小红书登录这个老大难?每次验证码、滑块验证没完没了,登录状态还动不动就失效,搞得"全自动"最后总得人手来救场?
现在有了 Playwright 的 Model Context Protocol (MCP),这事儿就好办多了。它不再是简单地操控浏览器,而是能直接连上你已经登录的小红书会话。也就是说,你只需要手动登录一次,后面发笔记、互动这些操作,全都能放心交给脚本——再也不用跟登录验证死磕了。
想实现小红书图文自动发布却无从下手?这篇零基础教程将带你一步步搞定。我们将利用 Playwright MCP,实现真正的无人值守发布,内容全是纯干货。
一、环境准备与配置:打下坚实基础
1.1 安装 Playwright
确保你的 Python 环境在 3.7 以上,然后安装 Playwright:
pip install playwright
playwright install chromium
1.2 安装配置 MCP 服务器
Playwright MCP 需要一个服务器来协调浏览器和你的自动化脚本:
# 通过 npm 全局安装
npm install -g @playwright/mcp
# 或者使用 npx 直接运行
npx @playwright/mcp
1.3 安装浏览器扩展
这是实现会话复用的关键步骤:
-
下载 Playwright MCP Chrome 扩展(ZIP 文件)
-
打开 Chrome,进入
chrome://extensions/ -
开启“开发者模式”
-
点击“加载已解压的扩展程序”,选择解压后的文件夹
-
完成安装后,记得在扩展管理界面启用它
二、连接已登录的浏览器会话
2.1 启动浏览器并手动登录
首先,你需要让浏览器以调试模式运行:
# Windows
chrome.exe --remote-debugging-port=9222
# macOS
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222
然后在打开的浏览器中手动登录小红书账号,完成所有必要的验证步骤。
2.2 编写连接代码
创建一个 Python 文件,写入以下代码来连接已登录的浏览器:
import asyncio
from playwright.async_api import async_playwright
asyncdef connect_to_logged_in_browser():
asyncwith async_playwright() as p:
# 连接到正在运行的浏览器实例
browser = await p.chromium.connect_over_cdp("http://localhost:9222")
# 获取默认的浏览器上下文
default_context = browser.contexts[0]
# 使用现有的页面或创建新页面
if default_context.pages:
page = default_context.pages[0]
else:
page = await default_context.new_page()
# 检查是否已登录
await page.goto('https://www.xiaohongshu.com')
try:
# 等待用户头像或其他登录后可见元素出现
await page.wait_for_selector('[data-testid="user-avatar"]', timeout=5000)
print("✅ 检测到已登录状态")
return page
except:
print("❌ 未检测到登录状态,请先手动登录")
returnNone
# 测试连接
asyncdef test_connection():
page = await connect_to_logged_in_browser()
if page:
await page.screenshot(path='login_status.png')
print("截图已保存,请查看登录状态")
await browser.disconnect()
asyncio.run(test_connection())
三、完整的小红书图文发布脚本
以下是一个完整的自动化发布脚本,包含了异常处理和详细注释:
import asyncio
from playwright.async_api import async_playwright
import random
import os
class XiaohongshuAutoPublisher:
def __init__(self):
self.browser = None
self.page = None
asyncdef init_browser(self):
"""初始化浏览器连接"""
try:
playwright = await async_playwright().start()
self.browser = await playwright.chromium.connect_over_cdp(
"http://localhost:9222"

最低0.47元/天 解锁文章
5961

被折叠的 条评论
为什么被折叠?



