我只發(fā)布腳本,沒有其他內(nèi)容!
因?yàn)楹芏嗳硕荚趩?,這不是什么高端的東西,我們一起進(jìn)步吧! 我自己也在用,只有這個穩(wěn)定,其他的其實(shí)都不好用。
需要自己截圖,保存在與程序同目錄下,通過圖片判斷是否點(diǎn)擊以及點(diǎn)擊哪里。
源代碼:
》》》學(xué)習(xí)的路上當(dāng)然會很艱難。沒有好的學(xué)習(xí)資料,怎么學(xué)習(xí)?學(xué)習(xí)過程中有不懂的地方,建議加入交流Q群號:有志同道合的人群里的朋友,互相幫助,群里有很好的視頻學(xué)習(xí)教程和PDF!還有很棒的答案!"""
#python 3.6.4
# encoding:utf-8
#確保已連接好adb
#1080 2280 分辨率,一加6測試通過
#抖音版本20200618
import os
import cv2
import sys
import time
import random
from PIL import Image #pip install pillow
import diannaoshuohua
import zhaotu
# 上傳照片到電腦
def screen():
# 截圖保存在手機(jī)上
os.system('adb shell screencap -p /sdcard/screen.png')
# 傳到電腦上
os.system('adb pull /sdcard/screen.png')
# 截圖,粉絲詳情頁圖片
def screen3():
# 截圖保存在手機(jī)上
os.system('adb shell screencap -p /sdcard/screen3.png')
# 傳到電腦上
os.system('adb pull /sdcard/screen3.png')
#處理照片
def getDistance():
#讀取圖片
image = Image.open('screen.png')
#返回元組
width = image.size[0]
height = image.size[1]
#print(height,width)
for i in range(803,804):#遍歷一個縱列
for j in range(0,height):
if image.getpixel((i,j))[:3] == (179, 38, 69):#如果找到符合位置的顏色點(diǎn),則確定了按鈕所在
yield j #生成器。返回所有找到的縱坐標(biāo)的值
def jietu(mubiaotu):
# 打開剛截取的全屏圖
img = Image.open(mubiaotu)
# 定位到需要截取的地方
img = img.crop((0, 200, 1080, 1400))
# 截取成功并保存到本地
img.save('screen3_jietu.png')
def as_num(x):
y = '{:.10f}'.format(x) # .10f 保留10位小數(shù)
return y
# 查找圖片
def findImg(target1,template2):
#讀取目標(biāo)圖片
target = cv2.imread(target1)
#讀取模板圖片
template = cv2.imread(template2)
#獲得模板圖片的高寬尺寸
theight,twidth = template.shape[:2]
#執(zhí)行模板匹配,采用的匹配方式cv2.TM_SQDIFF_NORMED
result = cv2.matchTemplate(target,template,cv2.TM_SQDIFF_NORMED)
cv2.normalize(result,result, 0, 1, cv2.NORM_MINMAX, -1 )
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
strmin_val = str(min_val)
cv2.rectangle(target,min_loc,(min_loc[0]+twidth,min_loc[1]+theight),(0,0,225),2)
print ("匹配最小值為:"+as_num(float(str(min_val))))
print ('匹配最大值為:'+as_num(float(str(max_val))))
r = int((image.getpixel((min_loc[0]+23,min_loc[1]+17)))[0])
if (abs(float(as_num(float(str(max_val))))) >= 0.9) and r > 180:#如果找到符合位置的顏色點(diǎn):
print ('找到符合的圖片')
return True
else:
print('沒有找到符合的圖片')
return False
if __name__ == '__main__':#主函數(shù)開頭
i=0
n=0
sj = random.uniform(1,5)
for _ in range(100):
screen()
print('截屏某用戶的粉絲列表')
xy = zhaotu.findImg2('s.png','screen.png')
for d in xy:
screen()
time.sleep(sj)
os.system('adb shell input tap {} {}'.format(d[0],d[1]))
time.sleep(sj)
screen3()#個人詳情頁截圖
time.sleep(sj)
jietu('screen3.png')
time.sleep(sj)
if zhaotu.findImg1('nv.png','screen3_jietu.png'):
xy = zhaotu.findImg1('nv.png','screen3_jietu.png')
image = Image.open("screen3_jietu.png")#打開個人詳情頁截圖
r = int((image.getpixel((xy[0],xy[1])))[0])
if (r > 180):
print('找到一位女士,即將關(guān)注!')
os.system('adb shell input tap 550 466')#點(diǎn)擊關(guān)注按鈕,暫用坐標(biāo),待完善
time.sleep(sj)
os.system('adb shell input keyevent 4')
time.sleep(sj)
i=i+1
print('已關(guān)注了'+str(i)+'位女士')
if i == 175:
print('本次運(yùn)行已關(guān)注198人,已退出運(yùn)行!')
diannaoshuohua.shuohua('本次已關(guān)注198人,即將退出!')
os.system('adb shell input keyevent 26')#power事件。
sys.exit()
else:
os.system('adb shell input keyevent 4') #點(diǎn)擊后退按鈕
else:
print('這不是女士,即將返回!')
n=n+1
os.system('adb shell input keyevent 4') #點(diǎn)擊后退按鈕
#翻頁滑動按鈕
os.system('adb shell input swipe 548 1500 540 225 511')
time.sleep(random.uniform(0.4, 0.8))
print('正在翻頁。。。')
#zhaotu.py 調(diào)用方法:findImg('目標(biāo)圖片地址','模板圖片地址')
#findImg2----多目標(biāo)匹配,返回的是生成器結(jié)果,需要for遍歷出單個結(jié)果
#findImg1----單目標(biāo)匹配,返回圖片所在位置的中心點(diǎn)坐標(biāo)值
import cv2
import numpy
from PIL import Image
def as_num(x):
y = '{:.10f}'.format(x) # .10f 保留10位小數(shù)
return y
def findImg2(target,template):#opencv模板匹配----多目標(biāo)匹配
#讀取目標(biāo)圖片
target = cv2.imread(target)
#讀取模板圖片
template = cv2.imread(template)
#獲得模板圖片的高寬尺寸
theight, twidth = template.shape[:2]
#執(zhí)行模板匹配,采用的匹配方式cv2.TM_SQDIFF_NORMED
print(theight,twidth)
result = cv2.matchTemplate(target,template,cv2.TM_SQDIFF_NORMED) #CV_TM_SQDIFF_NORMED
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
cv2.rectangle(target,min_loc,(min_loc[0]+twidth,min_loc[1]+theight),(0,0,225),2)
strmin_val = str(min_val)
#初始化位置參數(shù)
temp_loc = min_loc
other_loc = min_loc
numOfloc = 1
#第一次篩選----規(guī)定匹配閾值,將滿足閾值的從result中提取出來
#對于cv2.TM_SQDIFF及cv2.TM_SQDIFF_NORMED方法設(shè)置匹配閾值為0.01
threshold = 0.01 #這個值從0.01到0.05之間
loc = numpy.where(result if loc:
#遍歷提取出來的位置
for other_loc in zip(*loc[::-1]):
#print(other_loc[0],other_loc[1])
yield other_loc
else:
return false
# 查找設(shè)定的圖片是否包含在另一張圖片里
def findImg1(target1,template2):#傳入要查找的圖片地址和名稱,1為大圖,2為小圖,從大圖里查找小圖。
#讀取目標(biāo)圖片
target = cv2.imread(target1)
theight1,twidth1 = target.shape[:2]
#讀取模板圖片
template = cv2.imread(template2)
#獲得模板圖片的高寬尺寸
theight,twidth = template.shape[:2]
#執(zhí)行模板匹配,采用的匹配方式cv2.TM_SQDIFF_NORMED
result = cv2.matchTemplate(target,template,cv2.TM_SQDIFF_NORMED)
#歸一化處理
cv2.normalize(result,result, 0, 1, cv2.NORM_MINMAX, -1 )
#尋找矩陣(一維數(shù)組當(dāng)做向量,用Mat定義)中的最大值和最小值的匹配結(jié)果及其位置
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
#對于cv2.TM_SQDIFF及cv2.TM_SQDIFF_NORMED方法min_val越趨近與0匹配度越好,匹配位置取min_loc
#對于其他方法max_val越趨近于1匹配度越好,匹配位置取max_loc
strmin_val = str(min_val)
#min_loc:矩形定點(diǎn)
cv2.rectangle(target,min_loc,(min_loc[0]+twidth,min_loc[1]+theight),(0,0,225),2)
#顯示結(jié)果,并將匹配值顯示在標(biāo)題欄上
print ("匹配最小值為:"+as_num(float(str(min_val))))
print ('匹配最大值為:'+as_num(float(str(max_val))))
if (abs(float(as_num(float(str(max_val))))) >= 0.9):# 如果找到
print ('找到符合的圖片')
return min_loc[0]+twidth1/2,min_loc[1]+theight1/2
else:
print('沒有找到符合的圖片')
return False
有同學(xué)問寫劇本難學(xué)嗎? 我還沒有回復(fù)抖音腳本注冊機(jī),我想及時用最簡單明了的方式解釋一下。
以編寫各種掛機(jī)腳本為例,其實(shí)很簡單。 如果有人說這很難,他們就是在愚弄你。
掛機(jī)腳本,一句話:讓程序驅(qū)動手機(jī)抖音腳本注冊機(jī),模擬人的動作,操作手機(jī)執(zhí)行某些動作。
人有眼光,能思考、能判斷,知道下一步該做什么。 而且它一開始就不知道程序腳本。 所以你必須告訴它。 它聽不懂人類的語言,所以你必須用編程語言來告訴它。
我們懂語言。 有兩點(diǎn)很重要:詞匯和語法。 掌握了這兩點(diǎn)之后,你就能說人類的語言了。 例如,“天空”是一個單詞,“我抬頭看著天空”是一個語法句型。 “我抬頭看了看天,發(fā)現(xiàn)要下雨了,所以我決定回家打把傘?!?這里有思考和判斷,可以使人不再是傻子。
所有腳本語言,無論是否,它們也有自己的詞匯和語法。 但總的單詞量和語法就那么幾個。 需要兩三天的時間,瀏覽一下,了解一點(diǎn)。 翻書。 只要兩三天,以后就知道怎么翻書、偷看了。
接下來你要寫一個掛機(jī)腳本,比如你想關(guān)注抖音粉絲。
當(dāng)你認(rèn)為你可以關(guān)注一個人的粉絲列表下的所有人時,那么多人可能會關(guān)注你。 這就是最初的編程思路。 這與程序本身無關(guān)。
那么,你要寫的腳本就是先去抖音用戶的粉絲列表頁面。 該頁面的特征標(biāo)志是什么? 你可以用眼睛看到它,但程序不知道它。 只能通過頁面上的東西來判斷,比如頁面上有什么圖形(這叫找圖片識別圖片,我的腳本就是用的),或者頁面上有什么元素,或者文字是什么那里(提供此功能)。
一旦您選定了粉絲列表頁面,就可以點(diǎn)擊每個“關(guān)注”按鈕了。 如果一個頁面上有10個“關(guān)注”按鈕,程序就得點(diǎn)擊10次,你就得用語法告訴程序按照你的設(shè)計(jì)執(zhí)行動作。
點(diǎn)擊按鈕后,為了不讓抖音注意到機(jī)器人在快速圈粉抖音腳本注冊機(jī),你必須假裝成人類,點(diǎn)擊按鈕后暫停一會兒。 這時候可以用一個詞,比如sleep(1000),意思是程序執(zhí)行到這里,暫停1000毫秒。
同樣,兩三天就足以掌握這些單詞和語法。
如果你不想學(xué),你在圈子里呆幾年、十幾年
,那就沒有人能救你了。問一下腳本同學(xué),我的腳本需要你在本地配置環(huán)境。
屏幕截圖是您要查找的徽標(biāo)或您要單擊的按鈕的屏幕截圖。 如果看不懂的話,肯定有點(diǎn)混亂。
我沒有時間教這個。 如果你有興趣,你可以自己檢查一下。 這并不難。 這是一日之事。