Para essa aplicação utilizamos duas bibliotecas principais:
pip install pyautogui
pip install pillow
Como dito anteriormente, o programa trabalha em primeiro plano. Com a tela do site já aberta, a estrutura básica do programa é:
import pyautogui
from PIL import Image
brother = Image.open('img/brother.png')
captcha = Image.open('img/capt.png')
votar_nov = Image.open('img/vot_again.png')
while True:
#Localiza brother na tela, move o mouse até a posição e clica
x, y = pyautogui.locateCenterOnScreen(brother)
pyautogui.moveTo(x, y)
pyautogui.click()
#Localiza "Sou Humano" na tela, move o mouse até a posição e clica
w, z = pyautogui.locateCenterOnScreen(brother)
pyautogui.moveTo(w, z)
pyautogui.click()
#Localiza "Votar Novamente" na tela, move o mouse até a posição e clica
a, b = pyautogui.locateCenterOnScreen(brother)
pyautogui.moveTo(a, b)
pyautogui.click()
Se rodarmos o programa acima, ele sempre clicará no mesmo ponto da tela, que despertará o captcha do site. Queremos evitar isso. Além do mais, a aplicação tenta localizar a próxima imagem no instante seguinte que clica na tela. O site pode demorar um pouco para carregar, então nosso programa vai travar. Para contornar essas questões, vamos trazer duas outras bibliotecas. Também vamos configurar o nosso movimento do mouse pra que ele fique mais aleatório e pareça mais humano.
from random import randint
from random import uniform
from time import sleep
mouse_func = [pyautogui.easeOutBack, pyautogui.easeInOutQuad, pyautogui.easeOutQuad, pyautogui.easeInBounce, pyautogui.easeInElastic]
Assim podemos reescrever cada uma das interações:
sleep(100) # aguarda 1s pra tela aparecer
x, y = pyautogui.locateCenterOnScreen(brother) # localiza imagem
pyautogui.moveTo(w+randint(-20,150), z+randint(-30,10), uniform(0.5, 2.0), choice(mouse_func)) # move para uma posição aleatória entorno do x,y. O movimento dura de 0.5s à 2s e segue as configurações definidas
pyautogui.click() #clica
Dessa forma nosso programa já consegue ser utlizado
O projeto, como dito anteriormente, é simples e criado para praticar o uso mais básico da automação da interface com usuário. O potencial da aplicação é pequeno, se pensarmos em votos por minuto. Poderíamos fazer algumas melhorias pra que ele responda com mais velocidade, ainda assim, por ser um processo em primeiro plano com captura de tela, o potencial máximo do programa é limitado. Obrigado, Yuri, que deu o ponta pé pra criar essa aplicação e também já fez as outras implementações no BBB nos anos anteriores.