--- trunk/webthumb 2008/02/06 21:26:10 61 +++ trunk/webthumb 2008/02/06 23:34:04 62 @@ -23,8 +23,8 @@ # HEAD (part or LWP perl library, it can be commented out) # nc (netcat, to simulate web server) # xwininfo (standard part of X-clients) -# xwit (not so standard command, but very useful) # import (part of ImageMagick package) +# xdotool (much more useful than xwit for this purpose) # # It will create snapshot of following size W=1024 @@ -43,7 +43,6 @@ # some configurable paths BROWSER=mozilla-firefox XSERVER=Xvfb -XWIT=xwit URL=$1 FILE=${2:-screenshot.jpg} @@ -58,8 +57,8 @@ exit 1 fi -if [ -z "`which $XWIT`" ] ; then - echo "$0 really need $XWIT to operate. please install it." +if [ -z "`which xdotool`" ] ; then + echo "$0 need xdotool from http://www.semicomplete.com/blog/projects/xdotool/" exit 1 fi @@ -88,20 +87,22 @@ if [ "$DEBUG" == 1 ] ; then - echo "Using locally visible debug server on $LOCAL_DISPLAY" + echo "using locally visible debug server on $LOCAL_DISPLAY" Xnest -display $LOCAL_DISPLAY -ac -geometry ${W}x${H} -depth 24 $DISPLAY 2>/dev/null & else + echo "starting $XSERVER" $XSERVER -ac -screen 0 ${W}x${H}x24 $DISPLAY 2>/dev/null & fi XSERVER_PID=$! -echo "using pid $XSERVER_PID for X server" +echo "X server pid $XSERVER_PID" function kill_x_server() { echo "Killing server $XSERVER_PID" kill $XSERVER_PID rm -f $FRAMESET rm -fr $PROFILE_DIR + trap '' EXIT exit 1 } trap 'kill_x_server' INT QUIT TERM SEGV EXIT @@ -126,7 +127,7 @@ $BROWSER -CreateProfile "Screenshot $PROFILE_DIR" 2>/dev/null | grep Success echo "launching browser $BROWSER with $URL" -$BROWSER -P Screenshot -width $W -height $H $FRAMESET 2>/dev/null & +$BROWSER -P Screenshot -width $W -height $H -safemode $FRAMESET 2>/dev/null & BROWSER_PID=$! function kill_browser() { @@ -136,10 +137,33 @@ kill $XSERVER_PID rm -f $FRAMESET rm -fr $PROFILE_DIR + trap '' EXIT exit 1 } trap 'kill_browser' INT QUIT TERM SEGV EXIT +function ping_browser() { + echo -n "ping browser" + while ! ( $BROWSER -remote "ping();" 2>&1 ) >/dev/null ; do + RID=`xdotool search Restore 2>/dev/null` + if [ ! -z "$RID" ] ; then + echo -n "Esc" + xdotool focus $RID + xdotool key Escape + sleep 1 + fi + echo -n "." + sleep 1 + done + echo " OK" +} + +ping_browser + +xdotool search 'Restore' && xdotool key Escape && echo "simulated Esc to firefox restore sesison" + +$BROWSER -remote "openURL($FRAMESET)" + echo "waiting for on_load event from browser $BROWSER_PID for ${WAIT}s" # there is hard-coded limit here: @@ -153,22 +177,16 @@ if [ -z "$WINDOW_ID" ] ; then echo "can't find window with name 'Mozilla Firefox'" exit 1 +else + echo "working on firefox window $WINDOW_ID" fi -# move window to foreground -$XWIT -display $DISPLAY -id $WINDOW_ID -pop - -echo "resizing window $WINDOW_ID to maximum size" -$XWIT -display $DISPLAY -id $WINDOW_ID -move 0 0 -$XWIT -display $DISPLAY -id $WINDOW_ID -resize $W $H +xdotool search firefox +xdotool focus $WINDOW_ID +xdotool key F11 -echo -n "wating for browser ping..." -while ! ( $BROWSER -remote "ping();" 2>&1 ) >/dev/null ; do - echo -n "." - sleep 1 -done -echo +ping_browser # try to deduce inside area of window @@ -186,3 +204,7 @@ import -window $DUMP_ID $RESIZE $FILE +if [ "$DEBUG" == 1 ] ; then + echo -n "press enter to exit! " + read +fi