Может кто-нибудь объяснить мне, почему pyautogui TypeError: не удается распаковать не-итеративный нетипичный объект

#python

#python

Вопрос:

Я пытаюсь создать бота, который распознает изображение на экране и может щелкнуть по этому изображению. Однако, когда я запрашиваю бота щелкнуть по изображению, мне предлагается TypeError: не удается распаковать неинтерируемый нетипичный объект.

 import pyautogui as pg
import keyboard
import time
import pytesseract as tess
from PIL import Image

if pg.locateOnScreen('follow1.png', confidence=0.5) != None:
    pg.click('follow1.png')
  

Однако бот может распознать изображение на экране, но не может щелкнуть по нему.

 import pyautogui as pg
import keyboard
import time
import pytesseract as tess
from PIL import Image

if pg.locateOnScreen('follow1.png', confidence=0.5) != None:
    pg.print('found it!')

  

Как скрипт может распознать изображение на экране, но не щелкнуть по нему?

Комментарии:

1. pg.click('follow1.png') не соответствует ни одному из документированных применений этой функции. locateOnScreen возвращает набор координат и click() принимает координаты в качестве входных данных; вы не используете возвращаемое значение locateOnScreen и передаете строку click() , в которую я ожидал бы сбоя, поскольку это не то, как эта библиотека документирована для работы вообще. Попробуйте прочитать документацию для этих двух функций, найдите несколько примеров их использования, а затем повторите попытку и посмотрите, остались ли у вас проблемы.

2. Это неверно — pg.click(‘image.png’) является документированным использованием, хотя оно может быть ошибочным ( pyautogui.readthedocs.io/en/latest )

3. Как упоминал @RandomDavis, вам лучше использовать locateOnScreen, за которым следует щелчок. locateOnScreen также позволяет указать достоверность.

4. @Konrads моя ошибка, я не видел этого использования на их официальной странице click() , оно должно быть довольно новым?

Ответ №1:

Я тоже столкнулся с этой проблемой. Я, наконец, узнал, что причина заключалась в том, что значок на экране изменился из-за обновления программного обеспечения. Поэтому я использовал новый снимок для повторной обработки старого. И это сработало!

 pyautogui.click('D:/pp/video/3/edit.png')
  

Трассировка (последний последний вызов):
Файл «», строка 1, в
Файл «D:UserscordieroPycharmProjectsuntitledvideolibsite-packagespyautogui_init_.py «, строка 598, в оболочке
returnVal = wrappedFunction(*args, **kwargs)
Файл «D:UserscordieroPycharmProjectsuntitledvideolibsite-packagespyautogui_init_.py «, строка 980, в щелчке
x, y = _normalizeXYArgs(x, y)
TypeError: не удается распаковать не итерируемый нетипичный объект
pyautogui.click(‘D:/pp/video/3/edit.png ‘)

Ответ №2:

Я довольно новичок, так что это может не сработать, но я изменил это в коде:

Из: pyautogui.click(‘Image.png’)

Кому: pyautogui.click(pyautogui.locateOnScreen(‘Image.png’))

И это сработало для меня, надеюсь, это сработает и для вас!