Refactor the script so it's more readable. Make image annotation multithreaded
This commit is contained in:
		
							parent
							
								
									8661cf88c7
								
							
						
					
					
						commit
						9dc42f6f90
					
				@ -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"
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										180
									
								
								script3.sh
									
									
									
									
									
								
							
							
						
						
									
										180
									
								
								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 "$@"
 | 
			
		||||
while network_inspector_has_more_entries
 | 
			
		||||
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
 | 
			
		||||
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!"
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										124
									
								
								utils.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										124
									
								
								utils.sh
									
									
									
									
									
										Normal file
									
								
							@ -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
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user