未加星标

Python模拟鼠标点击――如何正确的肝阴阳师

字体大小 | |
[开发(python) 所属分类 开发(python) | 发布者 店小二03 | 时间 2016 | 作者 红领巾 ] 0人收藏点击收藏

本来嘛,说好了要写Selenium自动化搜电影的笔记的,然后正好今天上课无聊玩阴阳师开了个SSR,发现还有600体!准备怒刷之,但是又肝不动了。打算尝试用python写个脚本来代替我自动点击(PC端,安卓模拟器)

大家放心我没写出来

写好在测试的时候,发现一到安卓模拟器就丢失焦点(也可能是点不了),对win32编程完全不熟悉,研究了2,3个小时没解决。又跟一个网易游戏的聚聚聊了会,他用C++写的用得和我一样的方法完成了。。。。。

(如果有必要我明天换C++写一下。。。)但是测试了其他游戏,如腾讯游戏大厅,炉石传说,都可以按照设定的逻辑正常点击。

我在写完上面一段话的时候突然想起来,我是不是应该把.py文件用 管理员模式运行 一下试试。。。。。唉 然后就 成功 自动刷了几次御魂。。。

把开发工具和几个常用的方法贴出来。

安卓模拟器:Bluestacks

Python版本:2.7

使用的包:


  import time
  import win32api,win32gui,win32con
  from ctypes import *

在pywin32下,我们可以调用windos编程的一些函数。比如说调用MessageBox弹个窗啥的。当然我们今天主要调用的是与鼠标操作相关的函数,用python语言实现鼠操作的模拟。

1.鼠标的点击 def clickLeftCur():


defclickLeftCur(): win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN|win32con.MOUSEEVENTF_LEFTUP, 0, 0)

第一个参数表示 按下鼠标左键后放开鼠标左键,模拟了一次左键单击,

而后面两个参数0表示关于上一次鼠标事件后的偏移量,我们暂时不用。

2.鼠标的移动


def moveCurPos(x,y):
windll.user32.SetCursorPos(x, y)

顾名思义,移动鼠标。x,y表示以你当前屏幕左上角为0,0原点的坐标系的坐标单位为一像素。

3.获取鼠标当前坐标


def getCurPos():
return win32gui.GetCursorPos()

获取鼠标当前位置的坐标信息。

好,有了上诉三个函数之后,我们就可以干一下奇怪的事情了。比如把鼠标从当前位置往右移动100个像素之后点击一下鼠标。


#获取鼠标当前位置
xy=getCurPos()
#向右移动100个像素
moveCurPos(xy[0]+100, xy[1])
#单击鼠标左键
clickLeftCur()

OK,到这里我们已经熟悉了简单的鼠标操作。

那我们怎么把它应用到阴阳师里面呢!!!!

比如刷觉醒:

1.我们应该在探索页面中,点击左下角的觉醒材料

2.然后选择你要刷的麒麟

3.选择层数,点击挑战

4.点击准备

5.点击任意位置获得红蛋,点击任意位置开启,再次点击任意位置回到 3

6.开始下一次 刷刷刷

这里有几个要注意的地方,我在程序里一一指出来。

既然我们要点击的区域很多,那我们就得记录很多的坐标,所以我用了一个函数来检测当前句柄和鼠标的位置。


def getPos():
while True:
time.sleep(0.2)
getCurPos()
pos=getCurPos()
s=getWinHandle(pos)
print s ,pos

这个函数会一直输出你鼠标所在的位置信息和鼠标焦点所在的窗口句柄,通过记录这些数据,我们可以告诉程序接下里需要移动和点击的轨迹。

准备完成之后,我们就开始刷刷刷!


#跳转到指定句柄的窗口
win32gui.SetForegroundWindow(4720694)
time.sleep(1)

这里就要用到我们刚才使用的getPos()函数获得的信息了,每次的窗口句柄都是不同的。首先我们先将焦点转到到阴阳师游戏窗口。


#移动到左下角 觉醒材料 点击
moveCurPos(420,845)
clickLeftCur()
time.sleep(2)

因为在庭院中的移动会影响探索灯笼的位置,所以假设我们已经在探索页面。点击左下角的觉醒材料页面,等待2秒来响应。


#点击风麒麟
moveCurPos(976,467)
clickLeftCur()
time.sleep(2)

风麒麟最好点,我们先点风麒麟,其他的麒麟根据固定的位置应有不同的点击方式


#移动到挑战 点击
moveCurPos(1417,716)
clickLeftCur()
time.sleep(10)

由于阴阳师会记录你上一次挑战的层数,所以我这里就不选层了。由于这里要点击动画,我选择等待10秒。


#点击准备
moveCurPos(1665, 714)
clickLeftCur()
time.sleep(2)

点击准备后开始战斗。


#等待战斗结束
time.sleep(45)

这里是最不好估计的,我觉得你应该多尝试几次固定层数的时间,然后取平均值,并适当的延长一段时间。我这里为了测试方便,选择的是四层。


#任意点击屏幕3次
clickLeftCur()
time.sleep(2)
clickLeftCur()
time.sleep(2)
clickLeftCur()
time.sleep(3)

结束后单击三次任意位置,就能开启宝箱并退出当前战斗。

前面的坐标啊,句柄啊,都是我临时获得的,我只要稍微移动一下窗口就不可用了。所以,我们学习的是方法啊!!!!今天就弄了几个小时,主要是被管理员权限坑惨了!!!!!啊啊啊!!!

想一劳永逸的话也很简单,每次都固定窗口的大小(比如全屏幕),或者通过获取窗口的句柄,来或者窗口的长宽,而每个控件都是固定位置在窗口中的,这样我们只要通过控件所在位置的长宽比,就可以一次性解决这些问题。

另外刷探索副本的话由于宝箱掉落的位置不确定,所以比较难使用这个方法实现,这个方法比较适用于 觉醒材料,御魂,结界突破。并且在使用的过程中,是不能动电脑的。。。。我也想后台刷啊!改天有空了查查其他资料去!

求关注公众号 :eatPython

本文开发(python)相关术语:python基础教程 python多线程 web开发工程师 软件开发工程师 软件开发流程

主题: C++Python探索数据网易腾讯定位
分页:12
转载请注明
本文标题:Python模拟鼠标点击――如何正确的肝阴阳师
本站链接:http://www.codesec.net/view/482732.html
分享请点击:


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 开发(python) | 评论(0) | 阅读(49)