Python模擬滑鼠點擊——如何正確的肝陰陽師

来源:http://www.cnblogs.com/eatPython/archive/2016/10/14/5958850.html
-Advertisement-
Play Games

本來嘛,說好了要寫Selenium自動化搜電影的筆記的,然後正好今天上課無聊玩陰陽師開了個SSR,發現還有600體!準備怒刷之,但是又肝不動了。打算嘗試用Python寫個腳本來代替我自動點擊(PC端,安卓模擬器) 大家放心我沒寫出來 寫好在測試的時候,發現一到安卓模擬器就丟失焦點(也可能是點不了), ...


  本來嘛,說好了要寫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():

def clickLeftCur():
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

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、匿名函數lambda lambda argument1,argument2,...argumentN :expression using arguments 1、lambda是一個表達式,而不是一個語句。 因為這一點,lambda可以出現在python語法不允許def出現的地方 例如,在一個列表 ...
  • 對文件路徑的操作 os.path.split(p)函數返回一個路徑的目錄名和文件名。 os.path.splitext():分離文件名與擴展名 os.path.isfile()和os.path.isdir()函數分別檢驗給出的路徑是一個文件還是目錄。 os.path.isabs(path):判斷一個 ...
  • http://www.cnblogs.com/MnCu8261/p/5418632.html ...
  • os模塊提供了對目錄或者文件的新建/刪除/查看文件屬性,還提供了對文件以及目錄的路徑操作。比如說:絕對路徑,父目錄…… os.sep可以取代操作系統特定的路徑分隔符。windows下為 “\\”,Linux下為"/" os.linesep字元串給出當前平臺使用的行終止符。例如,Windows使用'\ ...
  • 今天來總結下python3.4版本字典的一些操作方法。 字典是Python裡面一種無序存儲結構,存儲的是鍵值對 key - value。關鍵字應該為不可變類型,如字元串、整數、包含不可變對象的元組。字典的創建很簡單,用 d = {key1 : value2, key2 : value2}的形式就可以 ...
  • 該隨筆是記錄我的第一個python程式,一個爬去指定圖片站點的所有圖集,現在還是一個非常簡陋的單線程程式。下一步是改寫成多線程,雖然python多線程被詆毀得一塌糊塗。同時加上異常處理。 近來練習python程式,仿照別人的爬蟲寫一個自己的爬蟲來練練手。在編寫的過程中遇到各種問題,中文編碼、請求不到 ...
  • 感謝 非常感謝Bill Wing和Christoph Deil的審閱和更正。 作者:Nicolas Rougier, Mike Müller, Gaël Varoquaux 本章內容: 介紹 簡單繪圖 圖形,子圖,軸線和刻度 其他類型的圖形:示例和練習 教程之外的內容 快速參考 4.1 介紹 Mat ...
  • 今天來總結下python3.4版本列表的一些操作方法。 列表(list): 1、列表就像一個線性容器,但是比C++的 lis t擴展多得多,列表裡的元素可以是相同類型,也可以包含各種類型,比如列表裡嵌套另一個列表 2、list的索引是也是從0開始,但也可以從後訪問,L1[-1] 表示L1中的最後一個 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...