โ† Back to Browser & Automation
Browser & Automation by @zizi-cat

chirp

X/Twitter CLI using OpenClaw browser tool

0
Source Code

chirp

OpenClaw browser ๋„๊ตฌ๋กœ X/Twitter ์กฐ์ž‘ํ•˜๊ธฐ. bird CLI์˜ browser ๊ธฐ๋ฐ˜ ๋Œ€์•ˆ.

Prerequisites

ํ™˜๊ฒฝ ์š”๊ตฌ์‚ฌํ•ญ

  • OpenClaw with browser tool enabled
  • openclaw browser profile
  • X/Twitter ๊ณ„์ • ๋กœ๊ทธ์ธ ์™„๋ฃŒ

Headless ์„œ๋ฒ„์ธ ๊ฒฝ์šฐ

Xvfb ๊ฐ€์ƒ ๋””์Šคํ”Œ๋ ˆ์ด ํ•„์š” (spool ์Šคํ‚ฌ์˜ Prerequisites ์ฐธ๊ณ )

๋กœ๊ทธ์ธ (์ฒ˜์Œ ํ•œ ๋ฒˆ๋งŒ)

browser action=start profile=openclaw
browser action=open profile=openclaw targetUrl="https://x.com/login"
# ์‚ฌ์šฉ์ž์—๊ฒŒ ์ˆ˜๋™ ๋กœ๊ทธ์ธ ์š”์ฒญ

์‚ฌ์šฉ๋ฒ•

1. ํƒ€์ž„๋ผ์ธ ์ฝ๊ธฐ

browser action=open profile=openclaw targetUrl="https://x.com/home"
browser action=snapshot profile=openclaw compact=true

๊ฐ article์—์„œ ์ž‘์„ฑ์ž, ๋‚ด์šฉ, ์ข‹์•„์š”/๋ฆฌํŠธ์œ—/๋‹ต๊ธ€ ์ˆ˜ ํ™•์ธ ๊ฐ€๋Šฅ.

2. ํŠธ์œ— ์ž‘์„ฑ

Step 1: ํ™ˆ์—์„œ ํ…์ŠคํŠธ๋ฐ•์Šค ์ฐพ๊ธฐ

browser action=open profile=openclaw targetUrl="https://x.com/home"
browser action=snapshot profile=openclaw compact=true

โ†’ textbox "Post text" ref ์ฐพ๊ธฐ

Step 2: ๋‚ด์šฉ ์ž…๋ ฅ

browser action=act profile=openclaw request={"kind":"click","ref":"<textbox-ref>"}
browser action=act profile=openclaw request={"kind":"type","ref":"<textbox-ref>","text":"ํŠธ์œ— ๋‚ด์šฉ"}

Step 3: Post ๋ฒ„ํŠผ ํด๋ฆญ

browser action=snapshot profile=openclaw compact=true

โ†’ button "Post" ref ์ฐพ๊ธฐ (disabled ์•„๋‹Œ ๊ฒƒ)

browser action=act profile=openclaw request={"kind":"click","ref":"<post-ref>"}

3. ์ข‹์•„์š” ๋ˆ„๋ฅด๊ธฐ

ํƒ€์ž„๋ผ์ธ์—์„œ article ๋‚ด button "Like" ๋˜๋Š” button "X Likes. Like" ref ์ฐพ์•„์„œ:

browser action=act profile=openclaw request={"kind":"click","ref":"<like-ref>"}

4. ๋ฆฌํŠธ์œ—

button "Repost" ๋˜๋Š” button "X reposts. Repost" ref ์ฐพ์•„์„œ:

browser action=act profile=openclaw request={"kind":"click","ref":"<repost-ref>"}
browser action=snapshot profile=openclaw compact=true
# "Repost" ์˜ต์…˜ ์„ ํƒ
browser action=act profile=openclaw request={"kind":"click","ref":"<repost-option-ref>"}

5. ๋‹ต๊ธ€ ๋‹ฌ๊ธฐ

๋ฐฉ๋ฒ• 1: ํƒ€์ž„๋ผ์ธ์—์„œ

browser action=act profile=openclaw request={"kind":"click","ref":"<reply-button-ref>"}
browser action=snapshot profile=openclaw compact=true
# ๋‹ต๊ธ€ ์ž…๋ ฅ์ฐฝ์— ํ…์ŠคํŠธ ์ž…๋ ฅ ํ›„ Reply ๋ฒ„ํŠผ ํด๋ฆญ

๋ฐฉ๋ฒ• 2: ํŠธ์œ— ํŽ˜์ด์ง€์—์„œ

browser action=open profile=openclaw targetUrl="https://x.com/username/status/1234567890"
browser action=snapshot profile=openclaw compact=true
# ๋‹ต๊ธ€ ์ž…๋ ฅ์ฐฝ ์ฐพ์•„์„œ ์ž…๋ ฅ

6. ํ”„๋กœํ•„ ๋ณด๊ธฐ

browser action=open profile=openclaw targetUrl="https://x.com/username"
browser action=snapshot profile=openclaw compact=true

7. ๊ฒ€์ƒ‰

browser action=open profile=openclaw targetUrl="https://x.com/search?q=๊ฒ€์ƒ‰์–ด&src=typed_query"
browser action=snapshot profile=openclaw compact=true

8. ํŒ”๋กœ์šฐ

ํ”„๋กœํ•„ ํŽ˜์ด์ง€์—์„œ button "Follow" ref ์ฐพ์•„์„œ:

browser action=act profile=openclaw request={"kind":"click","ref":"<follow-ref>"}

ํ•ต์‹ฌ ํฌ์ธํŠธ

  1. snapshot ๋จผ์ € - ๋ชจ๋“  ์ž‘์—… ์ „์— ํ˜„์žฌ ์ƒํƒœ ํ™•์ธ
  2. ref๋Š” ๋งค๋ฒˆ ๋‹ฌ๋ผ์ง - snapshot์—์„œ ํ•ญ์ƒ ์ƒˆ๋กœ ์ฐพ๊ธฐ
  3. compact=true - ํ† ํฐ ์ ˆ์•ฝ
  4. article ๊ตฌ์กฐ - ๊ฐ ํŠธ์œ—์€ article ์š”์†Œ, ๋‚ด๋ถ€์— ์ž‘์„ฑ์ž/๋‚ด์šฉ/๋ฒ„ํŠผ๋“ค
  5. ํŠธ์œ— ์ „ ํ™•์ธ - ์‚ฌ์šฉ์ž์—๊ฒŒ ๋‚ด์šฉ ํ™•์ธ๋ฐ›๊ธฐ

ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…

๋ฌธ์ œ ํ•ด๊ฒฐ
browser ์•ˆ ๋จ Xvfb ํ™•์ธ, DISPLAY=:99, Gateway ์žฌ์‹œ์ž‘
๋กœ๊ทธ์ธ ์•ˆ ๋จ /login์œผ๋กœ ์ด๋™ ํ›„ ์ˆ˜๋™ ๋กœ๊ทธ์ธ
Post ๋ฒ„ํŠผ disabled ํ…์ŠคํŠธ ์ž…๋ ฅ ํ™•์ธ
Rate limit ์ž ์‹œ ๋Œ€๊ธฐ ํ›„ ์žฌ์‹œ๋„

vs bird CLI

๊ธฐ๋Šฅ bird CLI chirp (browser)
์„ค์น˜ brew ํ•„์š” Xvfb๋งŒ ์žˆ์œผ๋ฉด ๋จ
์ธ์ฆ ์ฟ ํ‚ค ์ถ”์ถœ ๋ธŒ๋ผ์šฐ์ € ์„ธ์…˜
์•ˆ์ •์„ฑ API ๊ธฐ๋ฐ˜ UI ์˜์กด (๋ณ€๊ฒฝ ๊ฐ€๋Šฅ)
์†๋„ ๋น ๋ฆ„ ์•ฝ๊ฐ„ ๋А๋ฆผ