起因
本人在平时偶尔玩玩阴阳师,最近阴阳师推出了拜师系统,奖励丰厚。收够五个徒弟还能有动态框框和皮蛋。但是自己又不是魔鬼那种巨佬,又没人看的上。故开了个小号,小号又没有樱饼开不了系统自带的代刷系统。想到python能够通过模块来控制鼠标,那么能不能通过python控制鼠标来代肝呢。
实现
python用来控制鼠标之类的系统控件的模块为pywin32,pywin32模块下载地址在安装时需先配置python环境,安装完pywin32后就可以开始编码了。(本人使用网易阴阳师官方电脑版客户端登录)
import random
import time
import win32api, win32gui, win32con
# 需要点击的坐标
pos = {
'people':(578, 336),#单人开始按钮的坐标
'team':(659, 398),#多人组队开始按钮的坐标
}
def reset_window_pos(targetTitle):
'''
搜索桌面上的应用,将对应应用名的窗口固定并拉伸尺寸
'''
hWndList = []
win32gui.EnumWindows(lambda hWnd, param: param.append(hWnd), hWndList)
for hwnd in hWndList:
title = win32gui.GetWindowText(hwnd)
if (title.find(targetTitle) >= 0): #调整目标窗口到坐标(600,300),大小设置为(600,600)
win32gui.SetWindowPos(hwnd, win32con.HWND_TOPMOST, 0,0,800,0, win32con.SWP_SHOWWINDOW)
def ClickLeftCur():
'''
鼠标的单击事件
'''
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
time.sleep(0.05)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
def moveCurPos(pos):
'''
鼠标的移动事件
'''
win32api.SetCursorPos(pos)
def getCurPos():
'''
获取鼠标的坐标
'''
return win32gui.GetCursorPos()
def GetRandom():
'''
生成随机坐标元祖
'''
return (random.randint(20,700),random.randint(300,400))
if __name__ == '__main__':
time.sleep(2)
# 获取当前鼠标的坐标
# xy = getCurPos()
# print(xy)
# 获取阴阳师手游的窗口并将它固定
reset_window_pos('阴阳师-网易游戏')
# 循环操作
for i in range(100):
# 移动到单人开始的坐标,模拟点击,并等待23秒
# 组队时,将pos['people']改为pos['team']即可
moveCurPos(pos['people'])
ClickLeftCur()
time.sleep(23)
# 战斗结算画面,随机点击御魂下方的画面
moveCurPos(GetRandom())
ClickLeftCur()
time.sleep(1.5)
moveCurPos(GetRandom())
ClickLeftCur()
time.sleep(3)
moveCurPos(GetRandom())
ClickLeftCur()
moveCurPos(pos['people'])
ClickLeftCur()
ClickLeftCur()
#等待转场动画结束
time.sleep(3)
其中的时间设定可根据具体情况来设定。运行时需要使用管理员权限来运行不然会报错
这只是一段粗制滥造的代码,测试下来刷了三四百体力没啥问题。虽然程序友好性极差,但已经基本满足了我的个人需求。可能等以后有新需求了会再做优化吧。