如何让 AI 自动发帖到 Facebook 个人主页:一次真实的浏览器自动化实录(2026 现状)

TL;DR:Facebook 从 2018 年起彻底关闭了「向个人主页发帖」的 Graph API。想让 AI 自动把内容发到个人时间线,只剩一条路——驱动你自己已登录的浏览器。本文记录在 macOS 上用小成本方案(AppleScript + Chrome)跑通完整流程,并给出可复用的模板。所有凭据均已打码。

背景与目标

需求:AI 助理在服务器上(VPS)自动把某个链接/成绩分享到用户的 Facebook「个人主页」。

环境:

  • AI 助理:运行在无头 Linux VPS(Ubuntu)
  • 用户端:macOS,日常使用 Chrome,已登录 Facebook
  • 网络:VPS 与 Mac 通过 Tailscale 组网(内网可达)
  • 目标账号:Facebook 个人主页(非 Page、非 Group)

第一道墙:Graph API 发不了个人主页

很多人第一反应是走 Facebook Graph API。但自 2018 年 Cambridge Analytica 事件后,Meta 大幅收紧权限:

  • POST /me/feed 只能发到 Facebook Page 或 Group,不能发个人时间线。
  • 个人主页的发布权限(publish_actions)已被移除,无法申请。

结论:目标若是「个人主页」,Graph API 这条路直接封死。要用 API,只能改为公共主页(Page)——那是另一套 token 流程。

第二道墙:无头服务器没有登录态

既不能用 API,就得驱动浏览器。但服务器上没有图形界面,也没有你的 Facebook 登录 cookie。于是把「眼睛和手」放到用户自己的 Mac 上,是成本最低的方案。

方案:AppleScript 驱动已登录的 Chrome

macOS 自带 osascript,可以驱动 Chrome 执行 JavaScript。这样无需安装 Playwright、无需复制 cookie、无需处理登录——直接复用你日常那个「已登录 Facebook」的窗口。

关键前提:打开一个开关

Chrome 默认禁止从 Apple Events(AppleScript)执行 JavaScript。不开的话会报:

AppleScript からの JavaScript の実行がオフになっています

开启方式(一次性):

Chrome 菜单栏 → 表示(View)→ 开发者(Developer)
  → 勾选「Apple Events からの JavaScript を許可」
  (Allow JavaScript from Apple Events)

开启后即可用:

# 读取当前标签页标题与 URL
osascript -e 'tell application "Google Chrome" to \
  execute front window'"'"'s active tab javascript \
  "document.title + \"|\" + location.href"'

# 导航到指定 URL
osascript -e 'tell application "Google Chrome" to \
  set URL of active tab of front window to "<URL>"'

第三墙(踩坑):Chrome 有多个实例

Mac 上同时跑着好几个 Chrome:

  • 你日常使用的 Chrome(已登录 Facebook)← 要用这个
  • 一个调试专用的 Chrome(MCP / DevTools 用的独立 profile,走 --remote-debugging-pipe)

后者虽然监听 127.0.0.1:9222,但它不是标准 CDP(没有 /json/version HTTP 端点),用 Playwright 的 connectOverCDP 会返回 404。而且它没有你的 Facebook 登录态。

正确做法:用 AppleScript 的「front window / active tab」——它指向你日常那个窗口,天然带登录态。

完整流程:用官方分享框发帖

与其直接往首页输入框打字(DOM 复杂、易碎),不如用 Facebook 官方的分享对话框,它稳定得多:

  1. 拼接分享链接:
    https://www.facebook.com/sharer/sharer.php?u=<URL编码的目标链接>
  2. 导航到该链接 → Facebook 弹出分享框,并自动抓取目标页的链接预览卡片(标题、摘要、缩略图)。
  3. 点击「次へ / Next」(进入发布设置)。
  4. 确认发布范围(默认「公開」,若要改可在此设置)。
  5. 点击「シェアする / Share」 → 发布。
  6. 回读验证:读取时间线 [role=article],确认出现「你的名字 · 数秒前 · 公開 · 标题」。

用 JS 找按钮并点击(可复用)

(function(){
  function findExact(txt){
    var els = document.querySelectorAll('[role=button],button,a');
    for (var i=0;i<els.length;i++){
      if ((els[i].innerText||'').trim() === txt) return els[i];
    }
    return null;
  }
  var b = findExact('次へ');   // 先点「次へ / Next」
  if (!b) return 'NO_BUTTON';
  b.click();
  return 'CLICKED';
})()

把上面 次へ 换成 シェアする 再执行一次,即完成发布。

VPS ↔ Mac 的协作方式

AI 助理在 VPS 上,通过 OpenClaw 的 exec host=node 把命令下发到 Mac 执行:

# 在 VPS 侧发起,实际在 Mac 上运行
osascript -e 'tell application "Google Chrome" to \
  execute front window'"'"'s active tab javascript "<JS>"'

一个实用的包装:把要执行的 JS 写到 /tmp/js.js(可选 /tmp/nav.txt 做导航),再用一个小脚本负责转义并调用 osascript。注意 JavaScript 里的引号和换行要正确转义到 AppleScript 字符串。

为什么不用 Playwright 连 CDP?

理论上可以用 Playwright connectOverCDP 连到已登录的 Chrome。但前提是那个 Chrome 必须以标准 CDP(HTTP 9222)启动。日常 Chrome 默认没有开;而开了 CDP 的调试实例又没有登录态。要在「带登录态」和「可自动化」之间兼得,AppleScript 驱动现有窗口是最省事的路子。

(如果你愿意,也可以给一个带独立 profile 的 Chrome 用 --remote-debugging-port=9222 启动,登录一次后长期复用——但那需要额外维护一套登录态。)

安全与隐私要点

  • 登录态始终留在本地浏览器,不导出 cookie、不上传服务器——这是本方案最大的优点。
  • 「允许 Apple Events 执行 JS」是一个敏感开关:开启后,任何能发 AppleScript 的进程都能操作该浏览器。用完建议评估是否关闭。
  • 分享的是公开链接,不涉及账号密码;但发布范围(公开 / 好友 / 仅自己)务必确认。
  • 只在必要时驱动浏览器;能走官方 API 的(Page / Group)优先走 API。
  • 本文所有 URL、凭据、账号信息均已打码或省略。

经验总结

  1. 先确认平台限制:Facebook 个人主页 = 无 API,只能浏览器自动化。
  2. 复用用户已登录的浏览器,比在服务器上造一套登录态便宜得多。
  3. AppleScript + Chrome 是 macOS 上零依赖的轻量方案,开一个开关即可用。
  4. 优先用官方分享框(sharer.php),比模拟输入框点按钮稳定得多。
  5. 注意多实例:带 CDP 的调试 Chrome 未必带登录态,别连错。
  6. 发布后一定回读验证,别只信「点了按钮」。

结语

「自动发帖」的技术难点,从来不是点击本身,而是如何在合规、安全的前提下拿到登录态并驱动它。把浏览器留在用户本地、用最轻的脚本桥接,既绕开了平台限制,也没有把凭据搬来搬去——这往往是个人账号自动化里最干净的一种选择。

同属「浏览器自动化」的还有 X/Twitter、Instagram 等,思路完全一致:本地登录态 + 官方操作路径 + 回读验证。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注