自己用python写的topwar的自动化小程序

最近玩一个小程序口袋奇兵,因为这个游戏太浪费时间,加上一直在学python,用这个游戏来实战python,第一步,学会了鼠标连点。然后,发现还是要图像识别,才能提高准确率,后来又改做后台鼠标,经过了几次修改,现在能自动跟车。

ps:利用键盘停止程序运行,在直接连点的时候好使,后面更新了程序后,用键盘却不能中断程序了,这个问题在csdn上找了好多,也没能解决。

也学了好久的爬虫,效率最高的肯定是通过爬虫去直接发请求,但是网页元素遇到了canvas对象,不知道怎么查找canvas里的元素,卡在这里了,在网上找了一些自动化测试的教程,也没有找到解决的办法,希望有大神能指导指导。

附上我的原码:

import sys
import time
import win32gui
import pymouse
import pyautogui
import keyboard
import threading
import win32api
import win32con
x = 0    # 锤子循环次数
y = 2000     # 黑车循环次数
z = 0      # 难民循环次数
koudai = win32gui.FindWindow(None, '口袋奇兵')
print('窗口标题:%s' % (koudai))
# 通过句柄获取窗口的左、上、右、下,位置
left, top, right, bottom = win32gui.GetWindowRect(koudai)
print(left, top, right, bottom)
pos = (left, top)   # 左上角的位置
reflash = (70, 800)    # 刷新位置(以下为相对位置)
team = (299, 730)  # 第4队位置
fire = (250, 380)  # 开火
# backto 和confirm用于错误时返回
backto = (51, 110)  # 战争界面返回位置
confirm = (300, 520)
confirm2 = (300, 550)
def gochuizi():
    for i in range(0,x):
        chuizi = pyautogui.locateOnScreen(image='chuizi.jpg', confidence=0.7)
        if chuizi == None:
            time.sleep(3)
            continue
        else:
            pos1 = (chuizi[0] - 50-pos[0], chuizi[1] + 50-pos[1])
            print(pos1)
            long_position = win32api.MAKELONG(pos1[0],pos1[1])
            win32gui.SendMessage(koudai, win32con.WM_LBUTTONDOWN, win32con.MK_LBUTTON, long_position)
            win32gui.SendMessage(koudai, win32con.WM_LBUTTONUP, win32con.MK_LBUTTON, long_position)
            time.sleep(0.1)
            print('锤子')
            go_fire()
        print('i'+str(i))
        time.sleep(1)
def goheiche():
    for j in range(0,y):
        heiche = pyautogui.locateOnScreen(image='heiche.jpg', confidence=0.7)
        if heiche ==None:
            time.sleep(3)
            continue
        else:
            pos2 = (heiche[0] - 50-pos[0], heiche[1] + 50-pos[1])
            print(pos2)
            long_position2 = win32api.MAKELONG(pos2[0], pos2[1])
            win32gui.SendMessage(koudai, win32con.WM_LBUTTONDOWN, win32con.MK_LBUTTON, long_position2)
            win32gui.SendMessage(koudai, win32con.WM_LBUTTONUP, win32con.MK_LBUTTON, long_position2)
            time.sleep(0.1)
            print('黑车')
            go_fire()
        print('j'+str(j))
        time.sleep(1)
def gonanmin():
    for h in range(0,z):
        nanmin = pyautogui.locateOnScreen(image='nanmin.png', confidence=0.7)
        if nanmin == None:
            time.sleep(3)
            continue
        else:
            pos3 = (nanmin[0] - 50-pos[0], nanmin[1] + 50-pos[1])
            print(pos3)
            long_position3 = win32api.MAKELONG(pos3[0], pos3[1])
            win32gui.SendMessage(koudai, win32con.WM_LBUTTONDOWN, win32con.MK_LBUTTON, long_position3)
            win32gui.SendMessage(koudai, win32con.WM_LBUTTONUP, win32con.MK_LBUTTON, long_position3)
            time.sleep(0.1)
            print('难民')
            go_fire()
        print('h'+str(h))
        time.sleep(3)
def go_fire():
    # 4队 fire
    time.sleep(0.1)
    team_position = win32api.MAKELONG(team[0], team[1])
    win32gui.SendMessage(koudai, win32con.WM_LBUTTONDOWN, win32con.MK_LBUTTON, team_position)
    win32gui.SendMessage(koudai, win32con.WM_LBUTTONUP, win32con.MK_LBUTTON, team_position)
    time.sleep(0.1)
    fire_position = win32api.MAKELONG(fire[0], fire[1])
    win32gui.SendMessage(koudai, win32con.WM_LBUTTONDOWN, win32con.MK_LBUTTON, fire_position)
    win32gui.SendMessage(koudai, win32con.WM_LBUTTONUP, win32con.MK_LBUTTON, fire_position)
    time.sleep(1)
    print('战斗')
def go_refresh():
    for i in range(0,1000):
        reflash_position = win32api.MAKELONG(reflash[0], reflash[1])
        win32gui.SendMessage(koudai, win32con.WM_LBUTTONDOWN, win32con.MK_LBUTTON, reflash_position)
        win32gui.SendMessage(koudai, win32con.WM_LBUTTONUP, win32con.MK_LBUTTON, reflash_position)
        print('reflash'+str(i))
        # 出现卡战斗场面
        backto_position = win32api.MAKELONG(backto[0], backto[1])
        win32gui.SendMessage(koudai, win32con.WM_LBUTTONDOWN, win32con.MK_LBUTTON, backto_position)
        win32gui.SendMessage(koudai, win32con.WM_LBUTTONUP, win32con.MK_LBUTTON, backto_position)
        time.sleep(0.2)
        confirm_position = win32api.MAKELONG(confirm[0], confirm[1])
        win32gui.SendMessage(koudai, win32con.WM_LBUTTONDOWN, win32con.MK_LBUTTON, confirm_position)
        win32gui.SendMessage(koudai, win32con.WM_LBUTTONUP, win32con.MK_LBUTTON, confirm_position)
        time.sleep(0.2)
        confirm_position2 = win32api.MAKELONG(confirm2[0], confirm2[1])
        win32gui.SendMessage(koudai, win32con.WM_LBUTTONDOWN, win32con.MK_LBUTTON, confirm_position2)
        win32gui.SendMessage(koudai, win32con.WM_LBUTTONUP, win32con.MK_LBUTTON, confirm_position2)
        time.sleep(10)
def go_quit():
    while keyboard.is_pressed('ENTER'):
        # sys.exit()
        sys.quit()
        print('退出')
if __name__ == "__main__":
    threads = []
    t1 = threading.Thread(target=gochuizi)
    threads.append(t1)
    t2 = threading.Thread(target=goheiche)
    threads.append(t2)
    t3 = threading.Thread(target=gonanmin)
    threads.append(t3)
    t4 = threading.Thread(target=go_fire)
    threads.append(t4)
    t5 = threading.Thread(target=go_refresh)
    threads.append(t5)
    t6 = threading.Thread(target=go_quit)
    threads.append(t6)
    t1.start()
    t2.start()
    t3.start()
    # t4.start()不用启动,通过t1-3调用
    t5.start()
    t6.start()
    if keyboard.is_pressed('ENTER'):
        print('退出')
        quit()

猜你喜欢

转载自blog.csdn.net/weixin_59553410/article/details/126878133