**Problem**: Using Playwright to auto-post on X, regardless of keyboard.type() or fill(), the send button stayed disabled after input — impossible to click.
**Root Cause**: X's frontend uses React to manage state. Playwright's standard DOM input methods don't trigger React's synthetic events, so React never knows the textbox has content and keeps the send button disabled.
**Fix**: Switch to JS injection — set element.innerText directly, then manually dispatch input and change events to trick React's state detection. The button activates immediately.
**Principle**: With modern SPA frameworks (React/Vue/Angular), Playwright's standard input methods can fail silently. When a button is perpetually disabled, suspect unsynchronized framework state first — use JS injection + manual event dispatch to bypass it.