#python #pyautogui
#python #pyautogui
Вопрос:
Я хотел бы создать скрипт, который нажимает на изображения в зависимости от того, что запрашивается, он должен проходить через список изображений. так, например, если программа попросит пользователя щелкнуть по зеленому кружку:
question_list = greencircle, redcircle, bluesquare, redtriangle
if(greencircle == greencircle.png){
pyautogui.click(greencircle.png)
}
может кто-нибудь помочь с этим?
Комментарии:
1. Если вам нужно распознавание изображений, вы должны использовать OpenCV для распознавания изображений на экране и pyautogui для щелчка по ним после получения их координат.
2. Способ задать свой первый вопрос! Добро пожаловать!! Основываясь на документации, похоже, что pyautogui.click() — правильный синтаксис. Можете ли вы уточнить, какую проблему вы видите? pyautogui.readthedocs.io/en/latest
3. @StephenGodderidgeThanks спасибо! Итак, в основном у меня есть приложение для моего школьного проекта, и у меня есть программа, которая просит пользователя щелкнуть по чему-то, в основном как изображение из reCAPTCHA. Моя программа просто не работает, и я не знаю почему
4. Итак, программа должна знать, что представляет собой каждое изображение, верно? Таким образом, он может выбирать, какое изображение щелкнуть? Если это так, я бы пошел с тем, что предложил @Nastor. Проверьте OpenCV для распознавания изображений. Вот удобный учебник, с которого вы могли бы начать: learnopencv.com/image-recognition-and-object-detection-part1
5. Разве opencv не принимает только камеру? Мне нужно сделать снимок на экране, чтобы камера не разрешалась
Ответ №1:
PyAutoGUI имеет встроенную вызываемую функцию locateOnScreen()
, которая возвращает координаты x, y центра изображения, если она может найти его на текущем экране (он делает снимок экрана, а затем анализирует его).
Изображение должно точно совпадать, чтобы это работало; т. Е. Если вы хотите нажать на button.png
эту кнопку, изображение должно быть того же размера / разрешения, что и кнопка в вашей Windows, чтобы программа ее распознала. Один из способов добиться этого — сделать снимок экрана, открыть его в paint и вырезать только ту кнопку, которую вы хотите нажать (или вы можете попросить PyAutoGUI сделать это за вас, как я покажу в более позднем примере).
import pyautogui
question_list = ['greencircle', 'redcircle', 'bluesquare', 'redtriangle']
user_input = input('Where should I click? ')
while user_input not in question_list:
print('Incorrect input, available options: greencircle, redcircle, bluesquare, redtriangle')
user_input = input('Where should I click?')
location = pyautogui.locateOnScreen(user_input '.png')
pyautogui.click(location)
Приведенный выше пример требует, чтобы у вас уже был greencircle.png
и все другие .png в вашем каталоге
PyAutoGUI также может делать снимки экрана, и вы можете указать, в какой области экрана делать снимок pyautogui.screenshot(region=(0, 0, 0, 0))
. Первые два значения — это координаты x, y для верхнего левого края области, которую вы хотите выбрать, третье — как далеко вправо (x), а четвертое — как далеко вниз (y).
В следующем примере делается снимок экрана с логотипом Windows 10, сохраняется в файл, а затем нажимается на логотип с помощью указанного файла .png
import pyautogui
pyautogui.screenshot('win10_logo.png', region=(0, 1041, 50, 39))
location = pyautogui.locateOnScreen('win10_logo.png')
pyautogui.click(location)
Вам также не нужно сохранять снимок экрана в файл, вы можете просто сохранить его как переменную
import pyautogui
win10 = pyautogui.screenshot(region=(0, 1041, 50, 39))
location = pyautogui.locateOnScreen(win10)
pyautogui.click(location)
Для того, чтобы программа определяла, нажал ли пользователь в определенной области (скажем, на логотип Windows 10), потребуется другая библиотека, такая как pynput.
from pynput.mouse import Listener
def on_click(x, y, button, pressed):
if 0 < x < 50 and 1080 > y > 1041 and str(button) == 'Button.left' and pressed:
print('You clicked on Windows 10 Logo')
return False # get rid of return statement if you want a continuous loop
with Listener(on_click=on_click) as listener:
listener.join()
СОБИРАЕМ ВСЕ ЭТО ВМЕСТЕ
import pyautogui
from pynput.mouse import Listener
win10 = pyautogui.screenshot(region=(0, 1041, 50, 39))
location = pyautogui.locateOnScreen(win10)
# location[0] is the top left x coord
# location[1] is the top left y coord
# location[2] is the distance from left x coord to right x coord
# location[3] is the distance from top y coord to bottom y coord
x_boundary_left = location[0]
y_boundary_top = location[1]
x_boundary_right = location[0] location[2]
y_boundary_bottom = location[1] location[3]
def on_click(x, y, button, pressed):
if x_boundary_left < x < x_boundary_right and y_boundary_bottom > y > y_boundary_top and str(button) == 'Button.left' and pressed:
print('You clicked on Windows 10 Logo')
return False # get rid of return statement if you want a continuous loop
with Listener(on_click=on_click) as listener:
listener.join()