From 9dc42f6f90bc755349410d2fcf76253dd92a3ef6 Mon Sep 17 00:00:00 2001 From: Kuba Orlik Date: Thu, 21 Apr 2022 22:20:44 +0200 Subject: [PATCH] Refactor the script so it's more readable. Make image annotation multithreaded --- annotate_header.sh | 7 +- script3.sh | 180 +++++++-------------------------------------- utils.sh | 124 +++++++++++++++++++++++++++++++ 3 files changed, 155 insertions(+), 156 deletions(-) create mode 100644 utils.sh diff --git a/annotate_header.sh b/annotate_header.sh index d1273f1..7a7b0b3 100755 --- a/annotate_header.sh +++ b/annotate_header.sh @@ -12,9 +12,10 @@ get_width(){ annotate_header(){ - header=$1 + echo annotate $1 + filename=$1 + shift; d=$(date "+%Y-%m-%d__%H_%M_%S") - filename="${d}__$header.png" #filename="2022-03-10__19_33_55__set-cookie.png" cropped_filename="${filename}__cropped.png" overlay_filename="${cropped_filename}__overlay.png" @@ -26,7 +27,6 @@ annotate_header(){ top=330 width=824 height=1260 - scrot $filename vips extract_area "$filename" "$cropped_filename" $left $top $width $height # prepare overlay canvases @@ -83,6 +83,7 @@ annotate_header(){ convert "$filename" "$overlay_filename" -compose Darken -composite "$annotated_filename.step.png" convert "$annotated_filename.step.png" "$hardoverlay_filename" -compose src-over -composite "$annotated_filename" rm "$overlay_filename" "$annotated_filename.step.png" "$hardoverlay_filename" "$cropped_filename" "$filename" + echo "done annotate $filename"; } #annotate_header "set-cookie" "identyfikator internetowy z cookie" "Cookie" "identyfikator internetowy z cookie" diff --git a/script3.sh b/script3.sh index 1fec64b..37fbb8f 100755 --- a/script3.sh +++ b/script3.sh @@ -2,171 +2,45 @@ source ./ephemeral-x.sh source ./annotate_header.sh +source ./utils.sh -get_pixel_color(){ - x=$1; - y=$2; - output_path="/tmp/$(mktemp -u XXXXXX).png" - scrot $output_path - magick $output_path -format "%[hex:p{$x,$y}]" info: -} +start_firefox +prepare_firefox +load_website "biedronka.pl" +open_network_inspector +network_inspector_search "method:GET domain:adocean.pl" # can filter with more granularity: https://developer.mozilla.org/en-US/docs/Tools/Network_Monitor/request_list#filtering_by_properties -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 -} +index=0 -click (){ - xdotool mousemove $1 $2 - xdotool click 1 -} +declare -a pids; +pids=() -grab (){ - NOTE="$@" - echo $@ - scrot --note "-f '/usr/share/fonts/noto/NotoSansMono-Medium.ttf/40' -c 255,0,0,255 -t '$NOTE'" -} - -keycombo(){ - for key in "$@" - do - xdotool keydown $key - sleep 0.01 - done - for key in "$@" - do - xdotool keyup $key - sleep 0.01 - done - sleep 0.5 -} - - -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 & - -# test - -FIREFOX_PID=$! - -sleep 3 - -xdotool key Return # in case there's a "firefox closed unexpectedly" button - -sleep 1 - -# click 1424 628 - -# grab before maximize - -click 1886 13 #maximize button - -sleep 1 - -#grab after maximize before control shift E - -#keycombo Control_L Shift_L e - -#sleep 1 - -# grab before escape - -#xdotool key Escape -sleep 0.1 -# grab after escape - - -keycombo Control_L Shift_L e -#xdotool key Escape -keycombo Shift_L c F5 #profiler -keycombo Control_L Shift_L e - -# grab after control shift e before ctrl L - -keycombo Control_L l - -# grab after control L - -xdotool type "biedronka.pl" - -xdotool key Return - -# grab after return - -sleep 1 - -# scrot - - -echo "waiting for the website to load..." -times=0 -while [ $(get_pixel_color 143 122) = "2E3436" ] # the center of the X icon that becomes a "refresh" icon once the website is finished loading +while network_inspector_has_more_entries do - sleep 0.5 - printf "." - #scrot - times=$((times + 1)) - if [ $times -eq 10 ] - then - echo "Could not load website in time" - break; - fi -done - -keycombo Shift_L F5 #profiler -echo shift f5 -sleep 1 -echo "sleep 1" -keycombo Control_L Shift_L e -echo ctrl shift e -scrot -keycombo Control_L f -sleep 0.2 -xdotool type "method:GET domain:adocean.pl" # can filter with more granularity: https://developer.mozilla.org/en-US/docs/Tools/Network_Monitor/request_list#filtering_by_properties -xdotool key Escape -sleep 0.3 -scrot - - - -seq 28 | xargs -I {} xdotool key Tab -xdotool key Down -sleep 0.1 -xdotool key Up -sleep 0.1 -#scrot - -while [ $(get_pixel_color 1267 1572) = "F9F9FA" ] -do - annotate_header \ + filename="${index}.png" + scrot "$filename" + annotate_header "$filename" \ "set-cookie" "identyfikator internetowy z cookie" \ "Cookie" "identyfikator internetowy z cookie" \ - "Referer" "Część mojej historii przeglądania" - xdotool key Tab - sleep 0.05 - xdotool key Down - sleep 0.2 - # use python script ^here to annotate the cropped png - # scrot - # echo "########## EXTRACTED TEXT: " - # extract_text 2056 330 824 1260 | grep cookie + "Referer" "Część mojej historii przeglądania" & + pids+=($!) + network_inspector_next_entry + ((index++)) +done + +echo "starting wait..." + +jobs -l + +for PID in "${pids[@]}" +do + wait $PID done -echo "Done!" kill -2 %%; cleanup - +echo "Done!" diff --git a/utils.sh b/utils.sh new file mode 100644 index 0000000..9ce5b7f --- /dev/null +++ b/utils.sh @@ -0,0 +1,124 @@ +#!/bin/bash + +get_pixel_color(){ + x=$1; + y=$2; + output_path="/tmp/$(mktemp -u XXXXXX).png" + scrot $output_path + magick $output_path -format "%[hex:p{$x,$y}]" info: +} + +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 +} + +grab (){ + NOTE="$@" + echo $@ + scrot --note "-f '/usr/share/fonts/noto/NotoSansMono-Medium.ttf/40' -c 255,0,0,255 -t '$NOTE'" +} + +keycombo(){ + for key in "$@" + do + xdotool keydown $key + sleep 0.01 + done + for key in "$@" + do + xdotool keyup $key + sleep 0.01 + done + sleep 0.5 +} + + + +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=$! + sleep 3 +} + +prepare_firefox(){ + xdotool key Return # in case there's a "firefox closed unexpectedly" button + sleep 1 + click 1886 13 #maximize button + sleep 1 + sleep 0.1 + keycombo Control_L Shift_L e + keycombo Shift_L c F5 #profiler + keycombo Control_L Shift_L e +} + +load_website(){ + URL=$1 + keycombo Control_L l + xdotool type "$URL" + xdotool key Return + sleep 1 + echo "waiting for $URL to load..." + times=0 + 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)) + if [ $times -eq 10 ] + then + echo "Could not load website in time" + break; + fi + done +} + +open_network_inspector(){ + keycombo Shift_L F5 #profiler + echo shift f5 + sleep 1 + echo "sleep 1" + keycombo Control_L Shift_L e + echo ctrl shift e +} + +network_inspector_search(){ + query=$1 + keycombo Control_L f + sleep 0.2 + xdotool type "$query" + 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(){ + [ $(get_pixel_color 1267 1572) = "F9F9FA" ] +} + +network_inspector_next_entry(){ + xdotool key Tab + sleep 0.05 + xdotool key Down + sleep 0.2 +}