1. 程式人生 > 程式設計 >使用Python刷淘寶喵幣(低階入門版)

使用Python刷淘寶喵幣(低階入門版)

這兩天因為雙十一來臨,到處收集喵幣,反反覆覆的點選操作搞得我十分頭痛,遂產生了寫個指令碼自動點選的想法。

【低階入門版本】之中不牽扯影象文字轉換,或者影象匹配的問題,只是簡單的螢幕開屏、點選和滑動。如果你對更智慧化的程式有想法,歡迎回復與我一起研究,後續我會增添文字識別和定位,以適應在各類不同螢幕上進行此類操作。

在開始這篇文章前,首先你需要確認自己電腦上安裝了 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 代表截圖的方式,根據手機型號的不同,截圖方式會有差別,如果你的手機不適用與此截圖方式,可在此函式中繼續增加其它的截圖方式。

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份),判斷如果都為黑色,則為息屏狀態。

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("熄屏狀態...")
 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刷淘寶喵幣(低階入門版),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回覆大家的。在此也非常感謝大家對我們網站的支援!
如果你覺得本文對你有幫助,歡迎轉載,煩請註明出處,謝謝!