clawd/scripts/browser-setup.sh

110 lines
4.0 KiB
Bash
Executable File

#!/bin/bash
# Browser Setup for James
# Chrome for logins → Headless Chromium for automation
CHROME_PROFILE="/tmp/james-chrome"
HEADLESS_PROFILE="/tmp/james-headless"
HEADED_PORT=9222
HEADLESS_PORT=9223
CHROMIUM_BIN="/home/johan/.cache/ms-playwright/chromium-1208/chrome-linux64/chrome"
case "$1" in
start-login)
# Start headed Chrome for manual login
echo "Starting Chrome for login on port $HEADED_PORT..."
rm -f "$CHROME_PROFILE/Singleton"*
google-chrome \
--remote-debugging-port=$HEADED_PORT \
--user-data-dir="$CHROME_PROFILE" \
--no-first-run \
--password-store=basic \
about:blank &
echo "Chrome started. Log into the sites you need, then run: $0 sync"
;;
sync)
# Sync cookies from headed Chrome to headless profile
# IMPORTANT: Chrome must be CLOSED first!
if pgrep -f "remote-debugging-port=$HEADED_PORT" > /dev/null; then
echo "⚠️ Chrome is still running on port $HEADED_PORT!"
echo "Close Chrome first (Ctrl+Q or close the window), then run sync again."
echo "Copying a live profile will invalidate sessions!"
exit 1
fi
echo "Syncing profile from Chrome to headless..."
# Kill any existing headless browser
pkill -f "remote-debugging-port=$HEADLESS_PORT" 2>/dev/null
sleep 1
# Copy the profile
rm -rf "$HEADLESS_PROFILE"
cp -r "$CHROME_PROFILE" "$HEADLESS_PROFILE"
rm -f "$HEADLESS_PROFILE/Singleton"*
echo "✓ Profile synced! Run: $0 start-headless"
;;
start-headless)
# Start headless Chromium with synced profile
echo "Starting headless Chromium on port $HEADLESS_PORT..."
pkill -f "remote-debugging-port=$HEADLESS_PORT" 2>/dev/null
sleep 1
rm -f "$HEADLESS_PROFILE/Singleton"*
"$CHROMIUM_BIN" \
--headless=new \
--no-sandbox \
--disable-gpu \
--disable-dev-shm-usage \
--remote-debugging-port=$HEADLESS_PORT \
--user-data-dir="$HEADLESS_PROFILE" \
--password-store=basic \
--no-first-run \
about:blank &
sleep 2
echo "Headless Chromium started on port $HEADLESS_PORT"
echo "Use: browser(profile='fast') or browser(controlUrl='http://localhost:$HEADLESS_PORT')"
;;
stop)
echo "Stopping browsers..."
pkill -f "remote-debugging-port=$HEADED_PORT" 2>/dev/null
pkill -f "remote-debugging-port=$HEADLESS_PORT" 2>/dev/null
echo "Done."
;;
status)
echo "=== Browser Status ==="
echo ""
echo "Headed Chrome (port $HEADED_PORT):"
pgrep -f "remote-debugging-port=$HEADED_PORT" > /dev/null && echo " ✓ Running" || echo " ✗ Not running"
echo ""
echo "Headless Chromium (port $HEADLESS_PORT):"
pgrep -f "remote-debugging-port=$HEADLESS_PORT" > /dev/null && echo " ✓ Running" || echo " ✗ Not running"
echo ""
echo "Profiles:"
[ -d "$CHROME_PROFILE" ] && echo " Chrome: $CHROME_PROFILE (exists)" || echo " Chrome: $CHROME_PROFILE (not created)"
[ -d "$HEADLESS_PROFILE" ] && echo " Headless: $HEADLESS_PROFILE (exists)" || echo " Headless: $HEADLESS_PROFILE (not created)"
;;
*)
echo "Usage: $0 {start-login|sync|start-headless|stop|status}"
echo ""
echo "Workflow:"
echo " 1. $0 start-login - Opens Chrome, log into sites"
echo " 2. $0 sync - Copy cookies to headless profile"
echo " 3. $0 start-headless - Start headless browser for automation"
echo ""
echo " $0 status - Check what's running"
echo " $0 stop - Stop all browsers"
exit 1
;;
esac