慢走不送 发表于 2020-6-18 10:22

抖音自动关注粉丝引流脚本,最新测试每天可加110人左右,python脚本,到手可用

我只发脚本,别的什么都不说了,版主别开枪!


因为很多人在问,这个不是什么高大上的玩意儿,发出来共同进步!我自己在用的,还只有这个稳定一点,别的什么其实都不好用。


需要自己截图,存在程序同目录下,就是通过图片判断,是否点击和点击位置。

主程序
#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():
      # 截图保存在手机上
      os.system('adb shell screencap -p /sdcard/screen.png')
      # 传到电脑上
      os.system('adb pull /sdcard/screen.png')

# 截图,粉丝详情页图片
def screen3():
      # 截图保存在手机上
      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
      height = image.size
      #print(height,width)

      for i in range(803,804):#遍历一个纵列
                for j in range(0,height):
                        if image.getpixel((i,j))[:3] == (179, 38, 69):#如果找到符合位置的颜色点,则确定了按钮所在
                              yield j   #生成器。返回所有找到的纵坐标的值

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位小数
    return y

# 查找图片
def findImg(target1,template2):
      #读取目标图片
      target = cv2.imread(target1)
      #读取模板图片
      template = cv2.imread(template2)
      #获得模板图片的高宽尺寸
      theight,twidth = template.shape[:2]
      #执行模板匹配,采用的匹配方式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+twidth,min_loc+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+23,min_loc+17))))
      if (abs(float(as_num(float(str(max_val))))) >= 0.9) and r > 180:#如果找到符合位置的颜色点:
                print ('找到符合的图片')
                return True
      else:
                print('没有找到符合的图片')
                return False


if __name__ == '__main__':#主函数开头

      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,d))
                        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,xy))))
                              if (r > 180):
                                        print('找到一位女士,即将关注!')
                                        os.system('adb shell input tap 550 466')#点击关注按钮,暂用坐标,待完善
                                        time.sleep(sj)
                                        os.system('adb shell input keyevent 4')
                                        time.sleep(sj)                                       
                                        i=i+1
                                        print('已关注了'+str(i)+'位女士')
                                        if i == 175:
                                                print('本次运行已关注198人,已退出运行!')
                                                diannaoshuohua.shuohua('本次已关注198人,即将退出!')
                                                os.system('adb shell input keyevent 26')#power事件。
                                                sys.exit()
                              else:
                                        os.system('adb shell input keyevent 4') #点击后退按钮      
                        else:
                              print('这不是女士,即将返回!')
                              n=n+1
                              os.system('adb shell input keyevent 4') #点击后退按钮
                                       
                #翻页滑动按钮
                os.system('adb shell input swipe 548 1500 540 225 511')
                time.sleep(random.uniform(0.4, 0.8))
                print('正在翻页。。。')


#zhaotu.py 调用方法:findImg('目标图片地址','模板图片地址')
#findImg2----多目标匹配,返回的是生成器结果,需要for遍历出单个结果
#findImg1----单目标匹配,返回图片所在位置的中心点坐标值

import cv2
import numpy
from PIL import Image

def as_num(x):
    y = '{:.10f}'.format(x)# .10f 保留10位小数
    return y

def findImg2(target,template):#opencv模板匹配----多目标匹配
      #读取目标图片
      target = cv2.imread(target)
      #读取模板图片
      template = cv2.imread(template)
      #获得模板图片的高宽尺寸
      theight, twidth = template.shape[:2]
      #执行模板匹配,采用的匹配方式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+twidth,min_loc+theight),(0,0,225),2)

      strmin_val = str(min_val)
      #初始化位置参数
      temp_loc = min_loc
      other_loc = min_loc
      numOfloc = 1
      #第一次筛选----规定匹配阈值,将满足阈值的从result中提取出来
      #对于cv2.TM_SQDIFF及cv2.TM_SQDIFF_NORMED方法设置匹配阈值为0.01
      threshold = 0.01 #这个值从0.01到0.05之间
      loc = numpy.where(result<threshold)
      if loc:
                #遍历提取出来的位置
                for other_loc in zip(*loc[::-1]):
                  #print(other_loc,other_loc)
                  yield other_loc
      else:
                return false


# 查找设定的图片是否包含在另一张图片里
def findImg1(target1,template2):#传入要查找的图片地址和名称,1为大图,2为小图,从大图里查找小图。
      #读取目标图片
      target = cv2.imread(target1)
      theight1,twidth1 = target.shape[:2]
      #读取模板图片
      template = cv2.imread(template2)
      #获得模板图片的高宽尺寸
      theight,twidth = template.shape[:2]
      #执行模板匹配,采用的匹配方式cv2.TM_SQDIFF_NORMED
      result = cv2.matchTemplate(target,template,cv2.TM_SQDIFF_NORMED)
      #归一化处理
      cv2.normalize(result,result, 0, 1, cv2.NORM_MINMAX, -1 )
      #寻找矩阵(一维数组当做向量,用Mat定义)中的最大值和最小值的匹配结果及其位置
      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:矩形定点
      cv2.rectangle(target,min_loc,(min_loc+twidth,min_loc+theight),(0,0,225),2)
      #显示结果,并将匹配值显示在标题栏上
      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+twidth1/2,min_loc+theight1/2
      else:
                print('没有找到符合的图片')
                return False

8fei 发表于 2020-6-18 10:28

6666

佛尔多 发表于 2020-6-18 10:49

谢谢大佬

qq389602382 发表于 2020-6-18 10:50

好的,非常感谢

fla 发表于 2020-6-18 11:39

谢谢分享

从前慢 发表于 2020-6-18 11:47

喜欢但是不会用哭了

jyhh09 发表于 2020-6-18 11:52

谢谢大牛

愿意忍受 发表于 2020-6-18 13:05

感谢楼主分享

popozs 发表于 2020-6-18 14:49

6666666666

钓默默 发表于 2020-6-18 15:18

主要是怎么用,这方面小白
页: [1] 2
查看完整版本: 抖音自动关注粉丝引流脚本,最新测试每天可加110人左右,python脚本,到手可用