learn-spider/bin/start-browser-vnc.sh

70 lines
2.2 KiB
Bash
Executable File

#!/bin/bash
# Browser VNC Daemon
set -euo pipefail
TARGET_URL="https://www.baidu.com"
VNC_PWD=${1:-"123456"}
VNC_PORT=${2:-5900}
DISPLAY_NUM=${3:-99}
DATA_DIR=${4:-"/tmp/chrome-profile-${DISPLAY_NUM}"} # 用户数据目录
PID_FILE="/tmp/chrome-browser-${DISPLAY_NUM}.pid"
LOG_FILE="/tmp/chrome-browser-${DISPLAY_NUM}.log"
GREEN='\033[0;32m'; RED='\033[0;31m'; NC='\033[0m'
log() { echo -e "${GREEN}[$(date '+%H:%M:%S')]${NC} $*"; }
err() { echo -e "${RED}[$(date '+%H:%M:%S')]${NC} $*" >&2; }
# 检查是否已在运行
if [ -f "$PID_FILE" ] && kill -0 $(cat "$PID_FILE") 2>/dev/null; then
err "Instance :${DISPLAY_NUM} already running"
exit 1
fi
cleanup() {
log "Cleaning up instance :${DISPLAY_NUM}..."
pkill -P $$ 2>/dev/null || true
pkill -f "Xvfb :${DISPLAY_NUM}" 2>/dev/null || true
pkill -f "x11vnc.*${DISPLAY_NUM}" 2>/dev/null || true
rm -f "$PID_FILE" 2>/dev/null || true
}
trap cleanup EXIT INT TERM
echo $$ > "$PID_FILE"
log "Starting Xvfb :${DISPLAY_NUM}"
Xvfb :${DISPLAY_NUM} -screen 0 1280x1024x24 -nolisten tcp &
sleep 2
export DISPLAY=:${DISPLAY_NUM}
log "Starting Chromium (data dir: ${DATA_DIR})"
mkdir -p "$DATA_DIR"
CHROME_BIN=$(ls $HOME/.cache/ms-playwright/chromium-*/chrome-linux/chrome 2>/dev/null | head -1)
if [ -z "$CHROME_BIN" ]; then
CHROME_BIN=$(which chromium-browser 2>/dev/null || which google-chrome-stable 2>/dev/null || true)
fi
[ -z "$CHROME_BIN" ] && { err "Chromium not found"; exit 1; }
"$CHROME_BIN" \
--no-sandbox \
--disable-gpu \
--disable-dev-shm-usage \
--user-data-dir="${DATA_DIR}" \
--window-size=1280,1024 \
"${TARGET_URL}" &
CHROME_PID=$!
log "Starting x11vnc on port ${VNC_PORT}..."
x11vnc -display :${DISPLAY_NUM} -forever -shared -passwd ${VNC_PWD} -rfbport ${VNC_PORT} -bg &
PUBLIC_HOST=$(curl -sf ifconfig.me 2>/dev/null || hostname -I | awk '{print $1}')
log "=========================================="
log "✅ Browser started (VNC only, no CDP)"
log "🖥️ VNC: ${PUBLIC_HOST}:${VNC_PORT}"
log "🔑 Password: ${VNC_PWD}"
log "📁 Data: ${DATA_DIR}"
log "🛑 Stop: ./browser-vnc.sh stop ${DISPLAY_NUM}"
log "=========================================="
wait $CHROME_PID 2>/dev/null || true