Clicar em imagem reconhecida - Python + pyautogui

1. Clicar em imagem reconhecida - Python + pyautogui

Claudio
claudio_sbc

(usa CentOS)

Enviado em 26/11/2021 - 12:08h


Bom dia pessoal,

Tenho o script abaixo para utilização em um jogo online, atualmente ele já reconhece o monstro e teleporta quando não encontrado o monstro na tela.
Não estou conseguindo fazer com que ele clique sobre o monstro quando a condição é cumprida.
No loop consegui definir a semelhança mínima para que a condição seja cumprida.
Como eu faria para clicar sobre a imagem considerando a semelhança mínima?
Alguém poderia ajudar?

Coloquei até um vídeo no youtube demonstrando o que acontece:
[youtube]https://youtu.be/9gr6uUnoBxY[/youtube]

Código utilizado:
from pyautogui import moveTo, click
import pyautogui
import time
import keyboard
import random
import win32api, win32con

imagem = 'sprite.png'
while 1:
if pyautogui.locateOnScreen(imagem, confidence=0.7):
print("Mob encontrado!")
time.sleep(0.7)
else:
print("O mob não está na Tela...")
print("Teleportando para procurar.")
time.sleep(0.2)
pyautogui.press('F2')
time.sleep(0.7)



  


2. Re: Clicar em imagem reconhecida - Python + pyautogui

Samuel Leonardo
SamL

(usa XUbuntu)

Enviado em 26/11/2021 - 23:05h

claudio_sbc escreveu:
Código utilizado:
from pyautogui import moveTo, click
import pyautogui
import time
import keyboard
import random
import win32api, win32con

imagem = 'sprite.png'
while 1:
if pyautogui.locateOnScreen(imagem, confidence=0.7):
print("Mob encontrado!")
time.sleep(0.7)
else:
print("O mob não está na Tela...")
print("Teleportando para procurar.")
time.sleep(0.2)
pyautogui.press('F2')
time.sleep(0.7)

Nesse link:
https://pyautogui.readthedocs.io/en/latest/screenshot.html#the-locate-functions
Diz que a locateOnScreen retorna um Box se achar a imagem.
Então, se o problema é apenas clicar, você precisa salvar o retorno de locateOnScreen numa variável.
Depois, usar a variável para clicar com o click: tipo, click(box.x, box.y)

Observe o seguinte, que o locateOnScreen vai dar um exception caso não ache a imagem.
Sendo assim você deve tratar o exception fora do if.

Ou melhor, você precisa fazer mais ou menos isso:
while 1:
box=(0,0,0,0)
try:
box=pyautogui.locateOnScreen(imagem)
except:
continue #não achou imagem
#se chegou aqui é porque achou a imagem
click(box.left,box.top)


Se não tiver dando exceptions tente este link:
https://stackoverflow.com/questions/54461133/python-pyautogui-return-imagenotfoundexception-but-exce...


3. Re: Clicar em imagem reconhecida - Python + pyautogui

Samuel Leonardo
SamL

(usa XUbuntu)

Enviado em 27/11/2021 - 00:01h

Pode ser preciso colocar o click no meio da imagem, sendo assim faça isso no click:
click(box.left + box.width/2, box.top + box.height/2)


4. Re: Clicar em imagem reconhecida - Python + pyautogui

Claudio
claudio_sbc

(usa CentOS)

Enviado em 29/11/2021 - 15:49h


SamL escreveu:
Pode ser preciso colocar o click no meio da imagem, sendo assim faça isso no click:
click(box.left + box.width/2, box.top + box.height/2)


Ele não reconhece a coordenada.
Veja a saída:

Traceback (most recent call last):
File "C:\Users\claud\PycharmProjects\teste1\rag.py", line 12, in <module>
pyautogui.click(box.left + box.width/2, box.top + box.height/2)
AttributeError: 'NoneType' object has no attribute 'left'

Process finished with exit code 1


5. Re: Clicar em imagem reconhecida - Python + pyautogui

Samuel Leonardo
SamL

(usa XUbuntu)

Enviado em 29/11/2021 - 16:06h


claudio_sbc escreveu:


SamL escreveu:
Pode ser preciso colocar o click no meio da imagem, sendo assim faça isso no click:
click(box.left + box.width/2, box.top + box.height/2)


Ele não reconhece a coordenada.
Veja a saída:

Traceback (most recent call last):
File "C:\Users\claud\PycharmProjects\teste1\rag.py", line 12, in <module>
pyautogui.click(box.left + box.width/2, box.top + box.height/2)
AttributeError: 'NoneType' object has no attribute 'left'

Process finished with exit code 1

Segundo esta postagem:
https://stackoverflow.com/questions/43702511/why-pyautogui-locateonscreen-only-returns-none
É porque o locateOnScreen está retornando um valor None, ou melhor, você não passou o parâmetro "confidence" na locateOnScreen e por isso ela vai comparar com 100% de exatidão, ou pixel a pixel da imagem. Nesse caso, o pyautogui vai procurar exatamente a mesma imagem que o "imagem" passado na locateOnScreen.

Isso também indica que você precisa tratar o caso de retornar None, basta colocar um if pra comprarar o box com None, ver mais aqui:
https://stackoverflow.com/questions/23086383/how-to-test-nonetype-in-python


6. Re: Clicar em imagem reconhecida - Python + pyautogui

Claudio
claudio_sbc

(usa CentOS)

Enviado em 29/11/2021 - 23:10h


SamL escreveu:


claudio_sbc escreveu:


SamL escreveu:
Pode ser preciso colocar o click no meio da imagem, sendo assim faça isso no click:
click(box.left + box.width/2, box.top + box.height/2)


Ele não reconhece a coordenada.
Veja a saída:

Traceback (most recent call last):
File "C:\Users\claud\PycharmProjects\teste1\rag.py", line 12, in <module>
pyautogui.click(box.left + box.width/2, box.top + box.height/2)
AttributeError: 'NoneType' object has no attribute 'left'

Process finished with exit code 1

Segundo esta postagem:
https://stackoverflow.com/questions/43702511/why-pyautogui-locateonscreen-only-returns-none
É porque o locateOnScreen está retornando um valor None, ou melhor, você não passou o parâmetro "confidence" na locateOnScreen e por isso ela vai comparar com 100% de exatidão, ou pixel a pixel da imagem. Nesse caso, o pyautogui vai procurar exatamente a mesma imagem que o "imagem" passado na locateOnScreen.

Isso também indica que você precisa tratar o caso de retornar None, basta colocar um if pra comprarar o box com None, ver mais aqui:
https://stackoverflow.com/questions/23086383/how-to-test-nonetype-in-python


Agradeço mesmo a ajuda parceiro.

Porém, minha compreensão em python ainda não é suficiente para compreender o que preciso fazer.

Fico grato mesmo pela atenção.

Iniciei inclusive um curso sobre o assunto para tentar me inteirar a respeito.

Abraço.



7. Re: Clicar em imagem reconhecida - Python + pyautogui

Samuel Leonardo
SamL

(usa XUbuntu)

Enviado em 29/11/2021 - 23:28h


claudio_sbc escreveu:
Agradeço mesmo a ajuda parceiro.

Porém, minha compreensão em python ainda não é suficiente para compreender o que preciso fazer.

Fico grato mesmo pela atenção.

Iniciei inclusive um curso sobre o assunto para tentar me inteirar a respeito.

Abraço.

De boa cara. Vendo teu tópico, eu passei me interessar pelo pyautogui, na verdade eu nem conhecia tal lib.
Achei tão bacana que marquei aqui pra olhar mais devagar outra hora.
Em todo caso, eu te ajudei e tu me ajudou a descobrir o pyautogui.
Valeu.



8. Clicar em imagem reconhecida - Python + pyautogui

Claudio
claudio_sbc

(usa CentOS)

Enviado em 06/12/2021 - 15:28h

Consegui fazer reconhecer a posição da imagem com o código abaixo, está encontrando perfeitamente, porém, só não clica kkkk.

Conseguem ajudar?
from pyautogui import moveTo, click, press
import pyautogui
import time
import win32api,win32con

def click(x,y):
win32api.SetCursorPos((x,y))
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,0,0)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,0,0)

while True:
sc = pyautogui.screenshot(region=(1118, 25, 800, 615))
width,height = sc.size

for x in range(0,width,10):
achou = 0
for y in range(0,height,10):
r,g,b = sc.getpixel((x,y))
print(r,g,b)

if r == 255 and g == 255 and b == 0:
achou = 1
print('tentando clicar')
press('F4')
click(1118+x,25+y)
time.sleep(0.5)
break
if achou ==1:
break







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts