昨天忍不住氪了LOL云顶宝典,一共150级没有自动领取真的忍不了,所以想看看有没有方法可以实现自动领取
0x00 准备
需要的模块有:pyautogui,time
要打包的话还需要一个pyinstaller
0x01 思路
领取界面大概是这样的,先点击
然后会跳出一个窗口,再点击
确认关闭
然后切换到下一个奖励继续领取
但是问题在于:下一个奖励的图标是不一样的,我们要怎么去用定位图片的函数定位这个图标。
那么如何继续进行呢?
我的解决方法是:寻找到一个固定的图标,然后进行移动,移动到下一个奖励图标所在的位置。这里我选择了
先把鼠标定位到藏品按钮以后,经过测量,左移20像素,下移400像素,就到达了下一个藏品的位置。当然这样有一个不好的地方:对lol客户端的尺寸和win10的缩放比例有要求,一旦改变了以后,这个20,400的参数就会发生变化。
那么确定了思路以后,代码就很简单
0x02 代码
from PIL.Image import Image
from PIL.ImageOps import grayscale
import pyautogui,timecnt = 0while cnt<150 :cnt = cnt + 1#点击领取奖励按钮loc_get = pyautogui.locateOnScreen('get.png',grayscale=True)xg,yg = pyautogui.center(loc_get)pyautogui.click(xg,yg,2,0.5,'left')time.sleep(2)#点击确认按钮loc_ok = pyautogui.locateOnScreen('ok.png',grayscale=True)xo,yo = pyautogui.center(loc_ok)pyautogui.click(xo,yo,1,0,'left')time.sleep(2)#定位到藏品并且移动到下一个奖品点击loc_cp = pyautogui.locateOnScreen('cangping.png',grayscale=True)xc,yc = pyautogui.center(loc_cp)xn = xc + 20yn = yc + 400pyautogui.click(xn,yn,1,0,'left')time.sleep(4)
0x03 问题及其解决
刚开始测试的时候,locateOnScreen一直返回null,也就是说找不到图片。再StackOverflow上面找了半天,发现有很多人说要在前面加time.sleep或者说要加参数grayscale=True然后安装opencv加一个置信参数。
但是我测试统统都没用,加了置信参数.5以后确实不返回NULL了,但是会定位到奇怪的地方。
最后我发现:我截图的电脑是1080p分辨率,100%缩放。我写代码并且测试的机器是2k分辨率,200%缩放。于是我抱着试一试的心态,把这台电脑的参数调成1080p,100%缩放。
然后意想不到的就来了,居然可以识别了。
所以还是要自己多分析分析原因,网上查到的解决方法不一定适合你。
最后用pyinstall编译成exe,然后和三个png文件一起打包发送到有lol的电脑测试。
发现最后还有一个小问题:在领取7天皮肤宝箱的时候,这个确认变成了确认领取,导致无法识别。我也懒得改代码重新编译了,那就改图,把图片换成了领取窗口右上角的x键来关闭窗口。