screenshot-service/Docker/utils.sh

226 lines
4.6 KiB
Bash
Raw Normal View History

#!/bin/bash
2022-05-25 21:15:17 +02:00
timestamp(){
echo $((${EPOCHREALTIME//.} / 1000))
}
_get_pixel_color(){
# old version that takes up to .5s to run
START=$(timestamp)
x=$1;
y=$2;
output_path="/tmp/$(mktemp -u XXXXXX).png"
2022-07-08 15:13:24 +02:00
scrot "$output_path"
magick "$output_path" -format "%[hex:p{$x,$y}]" info:
2022-05-25 21:15:17 +02:00
END=$(timestamp)
DIFF=$(echo "$END - $START" | bc)
2022-05-27 15:49:56 +02:00
echo "{\"getting_pixel_color_took\": \"${DIFF}ms\"}" > /dev/stderr
2022-05-25 21:15:17 +02:00
}
get_pixel_color(){
x=$1;
y=$2;
FIREFOX_ID=$(wmctrl -lp | grep Firefox | awk '{print $1}')
if [ "$FIREFOX_ID" = "" ]
then
echo "NONE"
return
fi
grabc -w "$FIREFOX_ID" -l +${x}+${y}
}
2022-05-25 21:15:17 +02:00
extract_text(){
output_path="/tmp/$(mktemp -u XXXXXX).png"
cropped_path=$output_path--cropped.png
scrot $output_path
left=$1
top=$2
width=$3
height=$4
# https://www.libvips.org/API/current/libvips-conversion.html#vips-extract-area
vips extract_area "$output_path" "$cropped_path" $left $top $width $height
tesseract "$cropped_path" stdout -l eng
}
click (){
xdotool mousemove $1 $2
xdotool click 1
}
2022-04-24 18:22:58 +02:00
grab_no=0
2022-05-05 21:54:34 +02:00
grab(){
2022-04-24 18:22:58 +02:00
NOTE="$grab_no $@"
#echo $@
((grab_no++))
# scrot --note "-f '/usr/share/fonts/noto/NotoSansMono-Medium.ttf/40' -c 255,0,0,255 -t '$NOTE'" "/opt/static/$(date -Iminutes).png"
2022-04-24 18:22:58 +02:00
#echo "not grabbing"
}
quicktype(){
echo "$1" | xclip -sel clip
keycombo Control_L v
}
2022-04-24 19:57:01 +02:00
grab_screen_to_public(){
id=$1
filepath="/opt/static/$id/preview.png"
tempfile="/opt/static/$id/temp.png"
mkdir -p "/opt/static/$id"
rm -f "$tempfile"
scrot "$tempfile"
mv -f "$tempfile" "$filepath"
}
keycombo(){
for key in "$@"
do
xdotool keydown $key
sleep 0.01
done
for key in "$@"
do
xdotool keyup $key
sleep 0.01
done
2022-06-17 12:09:32 +02:00
sleep 0.05
}
start_firefox(){
rm -rf /root/.mozilla/firefox/bifup8k5.docker/sessionstore-backups
#echo 'user_pref("layout.css.devPixelsPerPx", "1.5");' >> /root/.mozilla/firefox/bifup8k5.docker/prefs.js
firefox --devtools > /dev/null &
FIREFOX_PID=$!
2022-05-25 21:15:17 +02:00
while [ $(get_pixel_color 100 100) = "NONE" ]
do
sleep 0.1
done;
}
prepare_firefox(){
# xdotool key Return # in case there's a "firefox closed unexpectedly" button
# sleep 1
# grab "after sleep 1"
click 1886 13 #maximize button
2022-04-24 18:22:58 +02:00
grab "after maximize"
FIREFOX_WIDTH=$(wmctrl -lpG | grep Firefox | awk '{print $6}')
while [ "$FIREFOX_WIDTH" != "2880" ]
do
sleep 0.1
done
#grab "after sleep 1"
2022-04-24 21:54:10 +02:00
# no need to reopen the network tab, as it's almost certainly already open
# keycombo Control_L Shift_L e
# grab "after ctrl+shift+e"
# keycombo Shift_L F5 #profiler
# grab "after shift-c F5"
# keycombo Control_L Shift_L e
# sleep 5 # it needs some time
}
2022-05-25 21:15:17 +02:00
wait_for_pixel_color(){
x=$1;
y=$2;
color=$3;
timeout=$4;
start=$(timestamp)
while [ $(get_pixel_color 143 122) != "$color" ]
2022-05-25 21:15:17 +02:00
do
sleep 0.1
ts=$(timestamp)
if [ $(( ts - start )) -gt $(( timeout * 1000 )) ]
then
return
fi
2022-05-25 21:15:17 +02:00
done
}
wait_for_website_to_load(){
times=0
2022-05-25 21:15:17 +02:00
while [ $(get_pixel_color 143 122) = "#2e3436" ] # the center of the X icon that becomes a "refresh" icon once the website is finished loading
do
sleep 0.5
#printf "."
#scrot
times=$((times + 1))
2022-04-24 20:04:45 +02:00
if [ $times -eq 30 ]
then
2022-05-27 15:49:56 +02:00
echo "{\"current_action\": \"website load timeout, proceeding anyway...\"}"
break;
fi
done
}
load_website(){
2022-07-09 20:04:57 +02:00
WEBSITE_URL=$1
WEBSITE_NAME=$2
keycombo Control_L l
grab ctrl+l
quicktype "$WEBSITE_URL"
grab type url
xdotool key Delete
xdotool key Return
grab enter
sleep 1
echo "{\"current_action\": \"Wczytywanie strony $WEBSITE_NAME...\"}"
wait_for_website_to_load
sleep 0.3
wait_for_website_to_load
sleep 0.3
wait_for_website_to_load
sleep 7 # sometimes the consent modal needs a little time to show up
}
open_network_inspector(){
keycombo Shift_L F5 #profiler
2022-07-09 20:04:57 +02:00
sleep 0.1
keycombo Control_L Shift_L e
2022-07-09 20:04:57 +02:00
wait_for_pixel_color 1777 152 0a84ff 3
}
open_console(){
keycombo Shift_L F5 #profiler
sleep 0.1
keycombo Control_L Shift_L k
wait_for_pixel_color 1510 152 0a84ff 3
}
network_inspector_search(){
query=$1
keycombo Control_L f
sleep 0.2
2022-04-24 18:22:58 +02:00
keycombo Control_L a
sleep 0.1
xdotool type "$query"
2022-06-15 20:27:15 +02:00
#xdotool key Escape
sleep 0.3
seq 28 | xargs -I {} xdotool key Tab
xdotool key Down
sleep 0.1
xdotool key Up
sleep 0.1
}
network_inspector_has_more_entries(){
2022-06-15 20:27:15 +02:00
grab network_inspector_has_more_entries
2022-05-25 21:15:17 +02:00
[ $(get_pixel_color 1267 1572) = "#f9f9fa" ]
}
network_inspector_next_entry(){
xdotool key Tab
sleep 0.05
xdotool key Down
sleep 0.5 # some time is needed here for request headers to render into view
}
# last_message="_____"
# measure(){
# }