查找邮箱注册过的网站,新增备案网站负责人,wordpress本地上传阿里元,物流单号查询网站建设参考大佬们的博客#xff0c;凑出了阴阳师的简单挂机脚本#xff0c;对各个博主进行感谢#xff0c;鞠躬.jpg 实现原理#xff1a; 对各个按钮等需要点击的地方进行截图#xff0c;然后对整个屏幕截屏#xff0c;通过模板匹配得到截图在截屏中的坐标位置#xff0c;进行… 参考大佬们的博客凑出了阴阳师的简单挂机脚本对各个博主进行感谢鞠躬.jpg 实现原理 对各个按钮等需要点击的地方进行截图然后对整个屏幕截屏通过模板匹配得到截图在截屏中的坐标位置进行点击 实现方法 对整个屏幕进行截图并保存 1 ####截图方法1#### 2 importwin32gui3 importwin32ui4 importwin32con5 importwin32api6 defPrintscreen():7 #获取桌面 8 hdesktop win32gui.GetDesktopWindow()9 10 #分辨率适应 11 width win32api.GetSystemMetrics(win32con.SM_CXVIRTUALSCREEN)12 height win32api.GetSystemMetrics(win32con.SM_CYVIRTUALSCREEN)13 left win32api.GetSystemMetrics(win32con.SM_XVIRTUALSCREEN)14 top win32api.GetSystemMetrics(win32con.SM_YVIRTUALSCREEN)15 #width1920 # 因为用win32api.GetSystemMetrics获取的分辨率不对于是我直接手输入进去的 16 #height1080 17 18 #创建设备描述表 19 desktop_dc win32gui.GetWindowDC(hdesktop)20 img_dc win32ui.CreateDCFromHandle(desktop_dc)21 22 #创建一个内存设备描述表 23 mem_dc img_dc.CreateCompatibleDC()24 25 #创建位图对象 26 screenshot win32ui.CreateBitmap()27 screenshot.CreateCompatibleBitmap(img_dc, width, height)28 mem_dc.SelectObject(screenshot)29 30 #截图至内存设备描述表 31 mem_dc.BitBlt((0, 0), (width, height), img_dc, (left, top), win32con.SRCCOPY)32 33 #将截图保存到文件中 34 screenshot.SaveBitmapFile(mem_dc, yuan.png)35 36 #内存释放 37 mem_dc.DeleteDC()38 win32gui.DeleteObject(screenshot.GetHandle())39 40 #测试 41 Printscreen() 1 ####截图方法2#### 2 from PIL importImage3 from PIL importImageGrab4 5 defPrintscreen():6 #截图坐标 左上角 右下角 7 size (0, 0,1920,1080)8 img ImageGrab.grab(size)9 #保存截图 10 img.save(yuan.png)11 print(截图进行了一次刷新)12 #打开截图 13 #img.show() 14 15 #测试 16 Printscreen() 通过模板匹配得到截图的坐标位置 模板匹配参考博客 图像筛选参考博客 注模板匹配具有自身的局限性主要表现在它只能进行平行移动若原图像中的匹配目标发生旋转或大小变化该算法无效。所以打开阴阳师后不要进行放大或缩小。 1 importcv22 importnumpy as np3 from matplotlib importpyplot as plt4 importmath5 6 ###图像匹配### 7 defImage_Discern(imgone,imgtwo):8 #1.模板匹配 9 #大图 10 img cv2.imread(imgone)11 img_gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)12 13 #小图 14 template cv2.imread(imgtwo, 0)15 h, w template.shape[:2] #rows-h, cols-w 16 img2 img.copy()17 18 #对比图像 19 res cv2.matchTemplate(img_gray, template, cv2.TM_SQDIFF_NORMED)20 21 #返回坐标 22 min_val, max_val, min_loc, max_loc cv2.minMaxLoc(res)23 top_left min_loc24 bottom_right (top_left[0] w, top_left[1] h)25 26 #计算中心坐标 27 a1, a2 top_left28 b1, b2 bottom_right29 c1 (a1 w/2)*0.8 #0.8匹配屏幕分辨率(因为分辨率原因这里乘0.8用于适应平复分辨率坐标位置) 30 c2 (a2 h/2)*0.8 31 e1 math.ceil(c1)32 e2 math.ceil(c2)33 d1 (e1, e2)34 #print(中心坐标为 , d1) 35 36 ###测试图像匹配弹出图像显示匹配位置### 37 #在匹配点画小圆心 38 #cv2.circle(res, top_left, 10, 0, 2) 39 #cv2.imshow(res, res) 40 41 ## 画矩形 42 #cv2.rectangle(img2, top_left, bottom_right, (0, 255, 0), 2) 43 #cv2.imshow(img2,img2) 44 #cv2.waitKey(0) 45 46 #两张图片是否匹配 47 #print(各个参数为,min_val, max_val, min_loc, max_loc) 48 49 ###进行图像筛选### 50 if min_val 0.03:51 #print(图片匹配) 52 return(d1)53 else:54 #print(图片不匹配) 55 return(0)56 57 58 #测试 59 #Image_Discern(e1.png,a2.png) # (大图小图)匹配图像 通过坐标位置进行点击 鼠标点击参考博客 1 importwin32api2 importwin32con3 importwin32gui4 importtime5 importrandom6 7 defxunzhao():8 9 wdname u阴阳师-网易游戏 10 #取得窗口句柄 11 hwnd win32gui.FindWindow(0, wdname)12 if nothwnd:13 print(窗口找不到请确认窗口句柄名称【%s】 %wdname )14 exit()15 #窗口显示最前面 16 win32gui.SetForegroundWindow(hwnd)17 18 def move_click(x, y, t0): #移动鼠标并点击左键 19 suiji1 random.randint(0,10)20 suiji2 random.randint(0,10)21 22 #print(鼠标抖动随机数为,suiji2, ,suiji1) 23 win32api.SetCursorPos((xsuiji1, ysuiji2)) #设置鼠标位置(x, y)设置随机数以防被封 24 time.sleep(0.1)25 win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)26 win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0) #点击鼠标左键 27 #print(模拟点击) 28 return029 30 #测试 31 #while True : 32 #suiji random.randint(0,5) #获得随机数 33 #xunzhao() #游戏顶置获得句柄 34 #time.sleep(suiji) #间隔时间 35 #move_click(1280, 685) #坐标点击 一个简陋的实例 有基本的方法后然后就可以写代码进行挂机了。 贴一个自己刷探索的代码其中click模块为鼠标模拟点击printscreen模块为截屏image_discern模块为模板匹配 1 importclick2 importprintscreen3 importimage_discern4 importtime5 6 ###进行图标点击### 7 defIdentify_Click(little):8 a 0.1 9 click.xunzhao()10 time.sleep(a) #间隔秒数 11 printscreen.Printscreen() #截图 12 time.sleep(a)13 b1 image_discern.Image_Discern(yuan.png, little) #图像对比 14 for i in range(1,10):15 if b1 0:16 print(准备再次寻找第,i,次)17 time.sleep(a)18 click.xunzhao()19 time.sleep(a)20 printscreen.Printscreen()21 time.sleep(a)22 b1 image_discern.Image_Discern(yuan.png, little)23 else:24 time.sleep(a)25 printscreen.Printscreen() #截图 26 b1 image_discern.Image_Discern(yuan.png, little) #图像对比 27 a1, a2 b1 #地址赋值 28 click.move_click(a1, a2) #模拟点击 29 time.sleep(a)30 break 31 32 ###寻找场景内是否有相应图标### 33 defIdentify_Click_Seek(little):34 a 0.1 35 click.xunzhao()36 time.sleep(a) #间隔秒数 37 printscreen.Printscreen() #截图 38 time.sleep(a)39 b1 image_discern.Image_Discern(yuan.png, little) #图像对比 40 if b1 0:41 #print(没有相应图标) 42 return(False)43 else:44 #print(找到相应图标) 45 return(True) 上面那代码块为identify_click模块 1 importtime2 importidentify_click3 importrandom4 5 defTansuo():6 7 b08 whileTrue:9 a (-----------------)10 ##判断体力是否足够## 11 if identify_click.Identify_Click_Seek(./png/tansuo/tansuo13.png):12 print(a)13 print(体力不足)14 break #结束循环 15 ###组队结束战斗### 16 if identify_click.Identify_Click_Seek(./png/tansuo/tansuo17.png):17 print(a)18 print(战斗结束回到组队页面)19 break #结束循环 20 ##判断是否结束## 21 elif identify_click.Identify_Click_Seek(./png/tansuo/tansuo12.png):22 print(a)23 print(探索结束)24 break 25 ##判断战斗结束## 26 elif identify_click.Identify_Click_Seek(./png/tansuo/tansuo04.png):27 identify_click.Identify_Click(./png/tansuo/tansuo04.png)28 print(a)29 print(战斗结束)30 continue #跳出本次循环 31 ##判断准备按钮## 32 elif identify_click.Identify_Click_Seek(./png/tansuo/tansuo08.png):33 identify_click.Identify_Click(./png/tansuo/tansuo08.png)34 print(a)35 print(战斗开始)36 whileTrue:37 if identify_click.Identify_Click_Seek(./png/tansuo/tansuo15.png):38 identify_click.Identify_Click(./png/tansuo/tansuo15.png)39 break 40 elif identify_click.Identify_Click_Seek(./png/tansuo/tansuo04.png):41 identify_click.Identify_Click(./png/tansuo/tansuo04.png)42 break 43 elif identify_click.Identify_Click_Seek(./png/tansuo/tansuo16.png):44 identify_click.Identify_Click(./png/tansuo/tansuo16.png)45 else:46 time.sleep(0.1)47 if identify_click.Identify_Click_Seek(./png/tansuo/tansuo15.png):48 print()49 print(战斗失败中止脚本)50 print()51 break 52 continue #跳出本次循环 53 ##BOSS## 54 elif identify_click.Identify_Click_Seek(./png/tansuo/tansuo07.png):55 print(a)56 print(发现BOSS)57 identify_click.Identify_Click(./png/tansuo/tansuo07.png)58 continue 59 ##小怪## 60 elif identify_click.Identify_Click_Seek(./png/tansuo/tansuo03.png):61 print(a)62 print(发现小怪)63 identify_click.Identify_Click(./png/tansuo/tansuo03.png)64 continue 65 ##奖励宝箱## 66 elif identify_click.Identify_Click_Seek(./png/tansuo/tansuo09.png):67 identify_click.Identify_Click(./png/tansuo/tansuo09.png)68 time.sleep(random.randint(1,2))69 whileTrue:70 if identify_click.Identify_Click_Seek(./png/tansuo/tansuo10.png):71 identify_click.Identify_Click(./png/tansuo/tansuo11.png)72 break 73 else:74 time.sleep(2)75 print(a)76 print(领取奖励宝箱)77 continue 78 ##进行走动## 79 elif identify_click.Identify_Click_Seek(./png/tansuo/tansuo05.png):80 print(a)81 print(进行走动)82 b b1 83 if b 5:84 identify_click.Identify_Click(./png/tansuo/tansuo05.png)85 print(向右)86 time.sleep(random.randint(3,4)) #间隔3~4秒 87 continue 88 else:89 identify_click.Identify_Click(./png/tansuo/tansuo06.png)90 print(向左)91 time.sleep(random.randint(3,4)) #间隔3~4秒 92 continue 93 94 time.sleep(0.5) #间隔3~4秒 95 return(True)96 97 #测试 98 Tansuo() 当中的图片 这些是最近东拼西凑的代码简单的代替了下无聊的手点鼠标环节虽然说游戏内有樱饼这一说但我是个穷人。玩游戏的同时可以学点东西何乐而不为呢哈哈哈。以后可能还会去进行优化修改。 还有一个简单实现的方法运用pyautogui库进行鼠标点击、截屏等操作pyautogui库使用方法参考博客 最后再次感谢各位大佬的博客