使用Python刷淘寶喵幣(低階入門版)
這兩天因為雙十一來臨,到處收集喵幣,反反復復的點擊操作搞得我十分頭痛,遂產生了寫個腳本自動點擊的想法。
【低階入門版本】之中不牽扯圖像文字轉換,或者圖像匹配的問題,只是簡單的屏幕開屏、點擊和滑動。如果你對更智能化的程序有想法,歡迎回復與我一起研究,后續(xù)我會增添文字識別和定位,以適應在各類不同屏幕上進行此類操作。
在開始這篇文章前,首先你需要確認自己電腦上安裝了 Python 或者 Anacoda(Python的一個集成類庫),除此之外安裝了ADB(如果沒有安裝請查看這篇博文),確認用USB鏈接到了手機,手機需開啟USB調試。
如果上述工作全部完成,那我們在接下的過程中應該會進行的很愉快。
首先新建一個Python文件(.py的),引入一些可能會用到的庫。
# coding: utf-8 import os import sys import subprocess import time import math from PIL import Image import random
在這之后,我們寫上一些按鈕、點擊與滑動的函數。
def click(x, y): # 點擊屏幕(x, y)坐標點 cmd = 'adb shell input tap {x1} {y1}'.format(x1=x, y1=y) os.system(cmd) def slide(x, y, ex, ey): # 滑動屏幕從(x, y)坐標點到(ex, ey)坐標點 print("滑動屏幕") cmd = 'adb shell input swipe {x1} {y1} {x2} {y2}'.format(x1=x, y1=y, x2=ex, y2=ey) os.system(cmd) def touch(key): # 按動相應的按鍵 if key == "back": print("> 返回按鍵") os.system('adb shell input keyevent 4') elif key == "light": print("> 開屏按鍵") os.system('adb shell input keyevent 26') time.sleep(1) # 等待1s 等手機反應
寫一個截屏并且保存的函數,以便我們之后進階的時候會用到(入門版可跳過)。
在此處這個 screenshot_way 代表截屏的方式,根據手機型號的不同,截屏方式會有差別,如果你的手機不適用與此截屏方式,可在此函數中繼續(xù)增加其它的截屏方式。
screenshot_way = 2 def pull_screenshot(filename): ''' 獲取截屏 ''' global screenshot_way if screenshot_way == 2 or screenshot_way == 1: process = subprocess.Popen('adb shell screencap -p', shell=True, stdout=subprocess.PIPE) screenshot = process.stdout.read() if screenshot_way == 2: binary_screenshot = screenshot.replace(b'\r\n', b'\n') else: binary_screenshot = screenshot.replace(b'\r\r\n', b'\n') f = open(filename, 'wb') f.write(binary_screenshot) f.close() elif screenshot_way == 0: os.system('adb shell screencap -p /sdcard/'+filename) os.system('adb pull /sdcard/'+filename+' .')
因為我覺得手機可能會息屏,所以寫個函數判斷一下是不是黑屏(入門版可跳過)。
在屏幕上平均取了100個點(長取10份,寬取10份),判斷如果都為黑色,則為息屏狀態(tài)。
def is_black(im): im_pixel = im.load() piece_x_dilation = int(im.size[1]/10) piece_y_dilation = int(im.size[1]/10) piece_x_max = im.size[0] piece_y_max = im.size[1] for i in range(0, piece_x_max, piece_x_dilation): for j in range(0, piece_y_max, piece_y_dilation): if not im_pixel[i, j][0] == 0 or not im_pixel[i, j][1] == 0 or \ not im_pixel[i, j][2] == 0 or not im_pixel[i, j][3] == 255: return False print("熄屏狀態(tài)...") return True
最后,準備工作就全部完成了,主函數如下。
def main(): ''' 主函數 ''' while True: pull_screenshot('autojump.png') # 截圖并保存為autojump.png im = Image.open('./autojump.png') # 打開截圖autojump.png if is_black(im): # 如果沒寫這個函數可以去掉if...一直到else touch('light') # 點亮屏幕 slide(int(im.size[0]/2), int(im.size[1]/1.1), int(im.size[0]/2), int(im.size[1]/2)) # 因為我的手機是上滑解鎖,所以上滑了一下 else: print("點擊進入瀏覽") click(591, 783) # 這個位置是進入“領喵幣”界面底下,那個“去逛逛”按鈕的位置 # 因為是 入門版 ,所以這個坐標就寫死了,是我用PS量的(手動滑稽) for i in range(0, 10): # 點開之后隨機向下滑動幾下 # 滑動位置也有著微小的隨機變化(怕被檢測出來是機器) if random.random() > 0.5: slide(int(im.size[0]/2 - (random.random()*20) + 10), int(im.size[1]/1.1 - (random.random()*20) + 10), int(im.size[0]/2 - (random.random()*20) + 10), int(im.size[1]/1.1 - (random.random()*20) - 300)) # 向上稍微滑滑 time.sleep(3) # 等待3s touch('back') # 返回按鍵 time.sleep(1) # 等待1s
總結
以上所述是小編給大家介紹的使用Python刷淘寶喵幣(低階入門版),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!
如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!
相關文章
ffmpeg+Python實現(xiàn)B站MP4格式音頻與視頻的合并示例代碼
這篇文章主要介紹了ffmpeg+Python實現(xiàn)B站MP4格式音頻與視頻的合并,本文通過實例圖文相結合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-10-10selenium + python 獲取table數據的示例講解
今天小編就為大家分享一篇selenium + python 獲取table數據的示例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-10-10