DEV Community

孫昊
孫昊

Posted on

CDP vs API Publishing: Which Platforms Welcome Automation in 2026

TL;DR: Map of every platform I tested for programmatic publishing in 2026: which give you a clean REST API, which need Chrome DevTools Protocol (CDP) automation, and which actively block both. Based on 50+ articles published over 60 days.


Three categories

Category Platforms Best approach
Clean REST API dev.to, Substack (write API limited), Gumroad (limited), Mastodon, GitHub API + auth header
CDP-friendly editors Substack (TipTap), Gumroad UI, ASC web, WeChat 公众号 (cookie-bound) Playwright connect_over_cdp
Blocked by anti-bot Reddit, Indie Hackers, Twitter/X (Lexical), Hacker News, Zhihu, Xiaohongshu Manual paste only

Why CDP, not Selenium/Puppeteer?

Selenium and headless Puppeteer get fingerprinted instantly. CDP (--remote-debugging-port=9222 --user-data-dir=...) attaches to a real Chrome you already opened with a real session.

Setup:

chrome.exe --remote-debugging-port=9222 ^
  --remote-allow-origins=* ^
  --user-data-dir="C:\Users\you\AppData\Local\Google\Chrome\User Data\AutomationProfile"
Enter fullscreen mode Exit fullscreen mode

Then in Python:

from playwright.sync_api import sync_playwright
with sync_playwright() as p:
    browser = p.chromium.connect_over_cdp("http://127.0.0.1:9222")
    page = browser.contexts[0].pages[0]
    page.goto("https://your-target.com/editor")
Enter fullscreen mode Exit fullscreen mode

The browser sees your real cookies, real fingerprint, real user-agent. No bot signal.

Editor difficulty rankings (1=easy, 5=blocked)

Editor Used by Difficulty Notes
Plain <textarea> dev.to drafts, basic CMS 1 page.fill() works
TipTap Substack, Notion-likes 2 Click into ProseMirror, then Ctrl+V clipboard paste
Slate Reddit (some), older Medium 3 Selection-based; needs careful focus management
Lexical (Meta's) Reddit comments, IH posts, Twitter 5 Anti-bot detects synthetic events; only manual works
ProseMirror w/ Lexical input Twitter post composer 2026 5 Same as above

What worked: Substack TipTap CDP flow

After 6 failed attempts on Substack (frontmatter leakage, body cut off, publish button not firing), this 5-step flow now publishes reliably:

  1. Goto /publish/posts?type=newsletter → click 新規投稿 button
  2. Fill title via page.fill('textarea[aria-label="title"]', title)
  3. Click into editor (div.ProseMirror), set clipboard with body, dispatch Ctrl+V
  4. Wait for "下書き保存しました" (autosave indicator)
  5. Click 続ける → 今すぐ全員に送信 → confirm → URL changes to /p/<slug>

Total time per issue: ~45 seconds. 100% reliable across 4 issues.

What failed: Reddit Lexical

Tried 8 different approaches:

  1. page.fill() on Lexical contenteditable → ignored
  2. page.evaluate() to set innerHTML → reverted on focus
  3. Clipboard paste via Ctrl+V → blocked by beforepaste listener
  4. Synthetic InputEvent('beforeinput', {data:'...'}) → ignored
  5. Direct DOM mutation → reverted by Lexical reconciler
  6. Chrome accessibility API typing → flagged as bot
  7. Per-character keyboard.press → rate-limited after 10 chars
  8. CDP Input.dispatchKeyEvent → ignored

Reddit actively detects synthetic input on Lexical. Same for IH (Lexical) and Twitter post composer (Lexical-derived).

Conclusion: For Lexical platforms, paste-ready files + 30-second human paste is the only path.

What I built: paste-ready content pipeline

Since Lexical platforms are blocked, I built a unified pipeline:

  1. CC writes paste-ready files with YAML frontmatter
  2. Dashboard reads frontmatter, renders preview
  3. Dashboard "Copy to clipboard" button copies body
  4. User clicks dashboard "Open editor" → 30-second paste

This converts 4 manual platforms (Reddit/IH/Twitter/Zhihu) to:

  • 4 × 30 sec = 2 minutes user time per content piece
  • vs 4 × 5 min manual writing each = 20 minutes

10× speedup on the human side, even though I can't fully automate.

The 2026 reality: hybrid is the answer

For indie hackers in 2026 publishing across 8+ channels:

  • Pure API: dev.to (4 hours of automated batch publishing)
  • CDP: Substack, Gumroad, ASC (all editor-driven)
  • Paste-ready: Reddit, IH, Twitter, Zhihu (anti-bot — never going to fully automate)

Stop trying to fully automate Lexical. Build a paste-ready pipeline instead.

Source

Full automation code (Python + Playwright + dev.to API client):

AutoApp Dashboard ($39) includes:

  • Substack TipTap CDP publish flow (working)
  • dev.to batch API publisher
  • Gumroad SKU CDP creator
  • ASC API JWT helper
  • Paste-ready manifest validator

If you've built CDP automation that bypasses Lexical, leave it in comments. I haven't found anyone who's solved it cleanly.

Top comments (0)