📦 FB Personal Poster — 技能工具
v1.0.0Post text and photos to personal Facebook timeline using browser automation (Patchright/Playwright). Use when: user asks to post to personal Facebook, publis...
详细分析 ▾
运行时依赖
版本
Initial release: Post text + photos to personal Facebook timeline via Patchright stealth browser automation
安装命令
点击复制技能文档
Post text + photos to personal Facebook timeline via Patchright stealth browser automation.
Why Not Graph API?
Facebook removed publish_actions permission in 2018. API cannot post to personal timelines.
Only browser automation works — this skill uses Patchright (stealth Chromium) to mimic human behavior.
Requirements
cd scripts/ && pip install -r requirements.txt
python -m patchright install chromium
Environment Variables
| Variable | Required | Description |
|---|---|---|
FB_COOKIE_FILE | ✅ | Path to Facebook cookies JSON (Selenium format). Full account access. |
FB_STATE_FILE | ✅ | Writable path for Playwright state (default: /tmp/fb_state.json) |
FB_DRY_RUN | — | true (default) = preview only. false = actually post. |
FB_USER_AGENT | — | Override browser user agent |
How to Get Cookies
- Log in to Facebook in Chrome (manually, once)
- Export all
facebook.comcookies as JSON via EditThisCookie extension - Save to path in
FB_COOKIE_FILEwithchmod 600
Cookies last ~30–90 days. Re-export when expired.
Usage
Text-only post
FB_COOKIE_FILE=~/.fb_cookies.json FB_DRY_RUN=false \
python3 scripts/fb_post.py -m "Hello from automation!"
Post with photos
FB_COOKIE_FILE=~/.fb_cookies.json FB_DRY_RUN=false \
python3 scripts/fb_post.py -m "Beautiful day!" -p photo1.jpg photo2.jpg
Dry run (default)
python3 scripts/fb_post.py -m "Test post" -p photo.jpg
# No actual posting — previews the flow
OpenClaw Integration (Recommended)
Use the built-in browser tool — already proven working for personal timeline posting:
# Step 1: Navigate to Facebook browser(action="navigate", url="https://www.facebook.com/")# Step 2: Confirm on personal profile (url should be facebook.com/me) # Step 3: Click "What's on your mind" browser(action="act", kind="click", ref="[post input box]")
# Step 4: Type message browser(action="act", kind="type", text="Your message here")
# Step 5: Upload photo (if needed) browser(action="upload", paths=["/path/to/photo.jpg"])
# Step 6: Set sharing to Public # Step 7: Click Post button browser(action="act", kind="click", ref="[post button]")
Tips
- Facebook 頁面結構複雜,selector 會變,用
snapshot找當前可用的 ref - 上傳圖片用
browser(action="upload")功能 - 如果 timeout,重試一次通常就好
- 個人動態和粉絲專頁的操作流程不同,注意確認在正確頁面
Safety
- Dry-run is ON by default — must explicitly set
FB_DRY_RUN=falsefor live posting - Cookies stored locally with
chmod 600— never committed to git - Human-like delays and typing speed to avoid detection