我一直在尝试使用Python3和pyautogui为英雄联盟制作一个机器人。我可以使用 pywin32 使机器人左键单击和右键单击,但使用 pyautogui 按键无法正常工作。当单击文本框时,pyautogui 可以输入内容,但其他情况下无法使用功能。具体来说,
level_up
功能不起作用。以下是我的代码:
from pyautogui import *
import pyautogui
import time
import keyboard
import numpy as np
import random
import win32api, win32con
def click_right(x,y):#works fine
win32api.SetCursorPos((x,y))
win32api.mouse_event(win32con.MOUSEEVENTF_RIGHTDOWN,0,0)
time.sleep(.01)
win32api.mouse_event(win32con.MOUSEEVENTF_RIGHTUP,0,0)
def click_left(x,y):#works fine
win32api.SetCursorPos((x,y))
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,0,0)
time.sleep(.1)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,0,0)
def type(word):
for char in word:
pyautogui.keyDown(char)
time.sleep(.05)
pyautogui.keyUp(char)
def buy_item(item):#item is a string, works fine
click_left(1209,998)#open shop
time.sleep(.2)
click_left(313,281)#click to search for item
time.sleep(.2)
type(item)#type item name
time.sleep(.1)
click_right(318,354)#buy item
time.sleep(.1)
click_left(1170,217)#close shop
def buy_items(items):#items is a list of strings, works fine
click_left(1209, 998) # open shop
time.sleep(.2)
for item in items:
click_left(313, 281) # search item
time.sleep(.2)
type(item)
time.sleep(.1)
click_right(318, 354)
time.sleep(.1)
click_left(1170, 217)
#doesn't work
def level_up(ability):#ability is a char in 'qwer'
with pyautogui.hold('ctrl'):
pyautogui.press(['q'])
def main():
time.sleep(3)
buy_items(['dagger', 'zeal', 'cloth'])
time.sleep(1)
level_up('q')
#
if __name__ == '__main__':
main()
有没有办法正确地做到这一点?有比 pyautogui 更好的包吗?
我从
pyautogui
切换到 pydirectinput
,现在可以使用了。
def level_up(ability):#ability is a char in 'qwer'
pydirectinput.keyDown('ctrl')
pydirectinput.keyDown(ability)
time.sleep(.1)
pydirectinput.keyUp('ctrl')
pydirectinput.keyUp(ability)