使用Python刷淘寶喵幣(低階入門版)
這兩天因?yàn)殡p十一來臨,到處收集喵幣,反反復(fù)復(fù)的點(diǎn)擊操作搞得我十分頭痛,遂產(chǎn)生了寫個(gè)腳本自動(dòng)點(diǎn)擊的想法。
【低階入門版本】之中不牽扯圖像文字轉(zhuǎn)換,或者圖像匹配的問題,只是簡單的屏幕開屏、點(diǎn)擊和滑動(dòng)。如果你對更智能化的程序有想法,歡迎回復(fù)與我一起研究,后續(xù)我會(huì)增添文字識(shí)別和定位,以適應(yīng)在各類不同屏幕上進(jìn)行此類操作。
在開始這篇文章前,首先你需要確認(rèn)自己電腦上安裝了 Python 或者 Anacoda(Python的一個(gè)集成類庫),除此之外安裝了ADB(如果沒有安裝請查看這篇博文),確認(rèn)用USB鏈接到了手機(jī),手機(jī)需開啟USB調(diào)試。
如果上述工作全部完成,那我們在接下的過程中應(yīng)該會(huì)進(jìn)行的很愉快。
首先新建一個(gè)Python文件(.py的),引入一些可能會(huì)用到的庫。
# coding: utf-8 import os import sys import subprocess import time import math from PIL import Image import random
在這之后,我們寫上一些按鈕、點(diǎn)擊與滑動(dòng)的函數(shù)。
def click(x, y): # 點(diǎn)擊屏幕(x, y)坐標(biāo)點(diǎn)
cmd = 'adb shell input tap {x1} {y1}'.format(x1=x, y1=y)
os.system(cmd)
def slide(x, y, ex, ey): # 滑動(dòng)屏幕從(x, y)坐標(biāo)點(diǎn)到(ex, ey)坐標(biāo)點(diǎn)
print("滑動(dòng)屏幕")
cmd = 'adb shell input swipe {x1} {y1} {x2} {y2}'.format(x1=x, y1=y, x2=ex, y2=ey)
os.system(cmd)
def touch(key): # 按動(dòng)相應(yīng)的按鍵
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 等手機(jī)反應(yīng)
寫一個(gè)截屏并且保存的函數(shù),以便我們之后進(jìn)階的時(shí)候會(huì)用到(入門版可跳過)。
在此處這個(gè) screenshot_way 代表截屏的方式,根據(jù)手機(jī)型號(hào)的不同,截屏方式會(huì)有差別,如果你的手機(jī)不適用與此截屏方式,可在此函數(shù)中繼續(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+' .')
因?yàn)槲矣X得手機(jī)可能會(huì)息屏,所以寫個(gè)函數(shù)判斷一下是不是黑屏(入門版可跳過)。
在屏幕上平均取了100個(gè)點(diǎn)(長取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
最后,準(zhǔn)備工作就全部完成了,主函數(shù)如下。
def main():
'''
主函數(shù)
'''
while True:
pull_screenshot('autojump.png') # 截圖并保存為autojump.png
im = Image.open('./autojump.png') # 打開截圖autojump.png
if is_black(im): # 如果沒寫這個(gè)函數(shù)可以去掉if...一直到else
touch('light') # 點(diǎn)亮屏幕
slide(int(im.size[0]/2), int(im.size[1]/1.1), int(im.size[0]/2), int(im.size[1]/2)) # 因?yàn)槲业氖謾C(jī)是上滑解鎖,所以上滑了一下
else:
print("點(diǎn)擊進(jìn)入瀏覽")
click(591, 783) # 這個(gè)位置是進(jìn)入“領(lǐng)喵幣”界面底下,那個(gè)“去逛逛”按鈕的位置
# 因?yàn)槭?入門版 ,所以這個(gè)坐標(biāo)就寫死了,是我用PS量的(手動(dòng)滑稽)
for i in range(0, 10): # 點(diǎn)開之后隨機(jī)向下滑動(dòng)幾下
# 滑動(dòng)位置也有著微小的隨機(jī)變化(怕被檢測出來是機(jī)器)
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
總結(jié)
以上所述是小編給大家介紹的使用Python刷淘寶喵幣(低階入門版),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!
相關(guān)文章
極簡Python庫CherryPy構(gòu)建高性能Web應(yīng)用實(shí)例探索
今天為大家介紹的是 CherryPy,它是一個(gè)極簡、穩(wěn)定且功能強(qiáng)大的Web框架,可以幫助開發(fā)者快速構(gòu)建高性能的 Web 應(yīng)用程序,使用 CherryPy,你可以輕松地創(chuàng)建RESTful API、靜態(tài)網(wǎng)站、異步任務(wù)和 WebSocket 等應(yīng)用2024-01-01
python+requests實(shí)現(xiàn)接口測試的完整步驟
這篇文章主要給大家介紹了關(guān)于python+requests實(shí)現(xiàn)接口測試的完整步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10
Python關(guān)于拓?fù)渑判蛑R(shí)點(diǎn)講解
在本篇文章里小編給大家分享了一篇關(guān)于Python關(guān)于拓?fù)渑判蛑R(shí)點(diǎn)講解內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。2021-01-01
安裝Python和pygame及相應(yīng)的環(huán)境變量配置(圖文教程)
下面小編就為大家?guī)硪黄惭bPython和pygame及相應(yīng)的環(huán)境變量配置(圖文教程)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-06-06
離線狀態(tài)下在jupyter notebook中使用plotly實(shí)例
這篇文章主要介紹了離線狀態(tài)下在jupyter notebook中使用plotly實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04
Python中實(shí)現(xiàn)對Timestamp和Datetime及UTC時(shí)間之間的轉(zhuǎn)換
這篇文章主要介紹了Python中實(shí)現(xiàn)對Timestamp和Datetime及UTC時(shí)間之間的轉(zhuǎn)換,例子則主要針對Ubuntu等類UNIX系統(tǒng),需要的朋友可以參考下2015-04-04
Python如何精準(zhǔn)定位并修改MP4文件的mvhd原子
深入了解MP4文件的結(jié)構(gòu)對于安全地修改元數(shù)據(jù)非常重要,這篇文章主要為大家詳細(xì)介紹了Python如何精準(zhǔn)定位并修改MP4文件的mvhd原子,需要的可以參考下2025-01-01

