Comportement bizarre avec un mouselogger
Bonjour, bonsoir !
(Une autre question à la con pour ceux qui ont du temps à perdre...)
Je m'amuse à faire un robot pour cliquer sur la coche du reCAPTCHA (parce que je m'ennuie) et je suis face à un comportement étrange des variables globales (avec IDLE) :
Faites le test chez vous avec ces 2 codes, appuyez sur Entrée pour lancer le mouselogger puis Echap pour arrêter le script puis cliquez au hasard.
Je ne comprends pas pourquoi avec ce premier code la touche Echap ne stoppe le while li mais avec le second code oui ni pourquoi le faite de cliquer arrête bien le while li cette fois-ci.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| import win32gui, threading, time, random
from pynput.keyboard import Key, Listener
from pynput.mouse import Listener as Listener2
li = 0
mo = 0
coords = []
pressed_coords = []
def mouse_listener():
print('START OF MOUSE LISTENER')
with Listener2(on_click=on_click) as listener2:
listener2.join()
while li:
t = random.random()
time.sleep(t)
x,y = win32gui.GetCursorPos()
coords.append([x,y,t])
print('END OF MOUSE LISTENER')
def on_click(x, y, button, pressed):
global li
print('{0} at {1}'.format('Pressed' if pressed else 'Released',(x, y)))
pressed_coords.append([x,y])
li = 0
# Stop listener
return False
def on_release(key):
global li, mo
print('{0} release'.format(key))
if key == Key.esc and li:
li=0
# Stop listener
return False
elif key == Key.enter and not li:
li=1
threading.Thread(target=mouse_listener).start()
# Collect events until released
with Listener(on_release=on_release) as listener:
listener.join() |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| import win32gui, threading, time, random
from pynput.keyboard import Key, Listener
from pynput.mouse import Listener as Listener2
li = 0
mo = 0
coords = []
pressed_coords = []
#-----------------1ERE PARTIE QUI CHANGE-------------------------
def mouse_listener2():
with Listener2(on_click=on_click) as listener2:
listener2.join()
#----------------------------------------------------------------
def mouse_listener():
print('START OF MOUSE LISTENER')
#-----------------2nde PARTIE QUI CHANGE-------------------------
threading.Thread(target=mouse_listener2).start()
#----------------------------------------------------------------
while li:
t = random.random()
time.sleep(t)
x,y = win32gui.GetCursorPos()
coords.append([x,y,t])
print('END OF MOUSE LISTENER')
def on_click(x, y, button, pressed):
global li
print('{0} at {1}'.format('Pressed' if pressed else 'Released',(x, y)))
pressed_coords.append([x,y])
li = 0
# Stop listener
return False
def on_release(key):
global li, mo
print('{0} release'.format(key))
if key == Key.esc and li:
li=0
# Stop listener
return False
elif key == Key.enter and not li:
li=1
threading.Thread(target=mouse_listener).start()
# Collect events until released
with Listener(on_release=on_release) as listener:
listener.join() |
Sûrement un truc de débutant que j'ai pas compris...
PS : Je viens de faire un test sur la démo de reCAPTCHA, il m'a proposé de trouver les images quand j'ai repris la main mais pas avant :ptdr: