Bot en python3, cómo conseguir que tu ordenador reconozca imágenes por pantalla.

El objetivo de este tutorial es continuar el proyecto https ://1938.com.es/bot-click-python y unificar la automatización de tareas a través de clicks con la búsqueda de imágenes por pantalla en Python 3.

Podéis descargar el repositorio con el código de ejemplo del tutorial en la url https://github.com/al118345/Ejemplo_bot_python o el siguiente video:

Instalación.

Para instalar este proyecto lo único que necesitarás es tener la librería pynput y screen-search en tu entorno. Para ello ejecuta el siguiente comando cuando descargue el proyecto:

python -m pip install --upgrade pip
pip install -r requirements.txt

En caso de utilizar Linux y Python 3.7 ejecuta también el siguiente comando y te aparece un error NOTE: You must install tkinter on Linux to use MouseInfo. Run the following: sudo apt-get install python3-tk python3-dev

sudo apt-get install python3.7-tk

Otro detalle es que, si tu versión es 3.8 , la versión a instalar es python 3.8-tk. De no hacerlo, aparece un error

Buscar una imagen de la pantalla y realizar click sobre ella.

El siguiente código simplemente busca una imagen por pantalla para, una vez encontrada, presionar sobre ella.

# -*- coding: utf-8 -*-
from pynput.mouse import Button, Controller
import time
from screen_search import Search

mouse = Controller()
def click_raton_posicion (x,y):
    mouse.position = (x, y)
    print('Now we have moved it to {0}'.format(
        mouse.position))
    # Press and release
    mouse.press(Button.left)
    mouse.release(Button.left)
    time.sleep(1)



def imagen():
    search = Search("img/viewgrip_start.png")
    pos = search.imagesearch()
    print('dasda')
    if pos[0] == -1:
        return False
    else:
        return pos


while True:
    coordenadas = imagen()
    #si encuentro
    if coordenadas!= False:
        click_raton_posicion (coordenadas[0], coordenadas[1])
    time.sleep(150)

Básicamente, tenemos un bucle infinito que, cada 150 segundos, busca la imagen en la pantalla cómo se muestra a continuación

while True:
    coordenadas = imagen()
    #si encuentro
    if coordenadas!= False:
        click_raton_posicion (coordenadas[0], coordenadas[1])
    time.sleep(150)

El método para buscar por pantalla es muy sencillo, simplemente imagesearch() busca la imagen que desees. Si no la encuentra devuelve [-1,-1], en caso contrario, proporciona las coordenadas. EL método se utiliza de la siguiente forma:

def imagen():
    search = Search("img/viewgrip_start.png")
    pos = search.imagesearch()
    print('dasda')
    if pos[0] == -1:
        return False
    else:
        return pos

Por último, presionamos en las coordenadas con la siguiente función:

mouse = Controller()
def click_raton_posicion (x,y):
    mouse.position = (x, y)
    print('Now we have moved it to {0}'.format(
        mouse.position))
    # Press and release
    mouse.press(Button.left)
    mouse.release(Button.left)
    time.sleep(1)