吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 14996|回复: 72
收起左侧

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

  [复制链接]
cheng0009 发表于 2020-6-18 09:16
本帖最后由 wushaominkk 于 2020-6-18 17:55 编辑

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


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


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

主程序

[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[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):#如果找到符合位置的颜色点,则确定了按钮所在
                                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[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:#如果找到符合位置的颜色点:
                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[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('找到一位女士,即将关注!')
                                        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[0]+twidth,min_loc[1]+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[0],other_loc[1])
                    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[0]+twidth,min_loc[1]+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[0]+twidth1/2,min_loc[1]+theight1/2
        else:
                print('没有找到符合的图片')
                return False

免费评分

参与人数 11吾爱币 +10 热心值 +10 收起 理由
liushi131 + 1 + 1 谢谢@Thanks!
薇信kant168 + 1 我也愿意学啊,就是不知道有没有师傅带入门
17636323567 + 1 + 1 热心回复!
dbb19910508 + 1 我很赞同!
好爸爸网络 + 1 + 1 谢谢@Thanks!
大迷糊 + 1 + 1 谢谢@Thanks!
lmtreewu + 1 + 1 谢谢@Thanks!
林逸致 + 1 + 1 用心讨论,共获提升!
loserぅ + 1 + 1 热心回复!
王星星 + 1 + 1 谢谢@Thanks!
忆念i + 1 + 1 谢谢@Thanks!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| cheng0009 发表于 2020-6-21 09:22
有同学问写脚本难不难学,我一直没回复,想等个时间用最简单明了的方式说明一下。

拿写各种挂机脚本来说,其实非常简单。如果有人说难,那就是准备忽悠你。

挂机脚本,用一句话说明白:让程序去驱动手机,模拟人的动作,操作手机执行一定动作。

人有视觉,会思考判断,知道下一步该干什么。而程序脚本一开始它是不知道的。所以你得告诉它。它呢,听不懂人话,所以你得用程序语言来告诉它。

我们知道语言,有单词和语法两个重要的东西,掌握了这两个,你就会说人话。比如“天”是单词,“我抬头看了看天”是语法句式。“我抬头看了看天,发现天快要下雨了,我决定回家拿把伞”,这里就有思考和判断,可以让一个人不再是个傻逼。

所有的脚本编程语言,不管python,还是autojs,他们也都有自己的单词和语法两个东西。但是单词和语法总量,就那么几个,花两三天时间就能浏览完,并稍加理解,如果记不住,到时用的时候查百度查文档就行,这不是闭卷考试,你随便翻书。只要两三天时间,你以后就知道该怎么翻书偷看了。

接下来,你就会写挂机脚本了,比如你要刷抖音粉丝。
当你想到你可以去关注一个人的粉丝列表下所有的人,这样就有不少人也许会回关你。这个就是一开始的程序设计思路。这本身跟程序无关。

那么,你要写的脚本就是,先到一个抖音用户的粉丝列表页,这个页面有什么特征标识,你眼睛看得到,程序不知道啊,它只能通过页面上有的东西来判断,比如页面上有什么图形(这个叫找图识图,我的python脚本就是用的这种方式),或者页面有什么元素,或者有什么文字之类的(autojs提供这种功能)。
当确定了一个粉丝列表页,接下来就该去点击每个“关注”按钮了。一页有10个“关注”按钮,程序就得点10次,你就得用语法告诉程序,让它按照你的设计来执行动作。
点完一个按钮之后,为了防止抖音察觉有机器人在快速圈粉,你得装作人类,点完一个按钮要稍微停顿一下,这时你就可以用一个单词,比如sleep(1000),这个表示程序执行到这里,暂停1000毫秒。

再说一遍,掌握这些单词和语法,两三天时间就够了。

你不愿意学,几年,十几年在原地打转,那谁也没办法救你。


——————————————————————————————————————————————————————
问python脚本的同学,我那个脚本需要你在本地配置好python环境。

截图是截你要查找的标识图片,或者你要点击的按钮图片。如果不懂python那肯定有点蒙圈。

这个没时间教了,有兴趣自己查一下,不难的,一天把的事。

免费评分

参与人数 2吾爱币 +2 热心值 +2 收起 理由
446321859 + 1 + 1 大师,我悟了!
liclub + 1 + 1 这么好的回复为什么没人点赞?

查看全部评分

tflyr 发表于 2020-6-18 15:32
liwen559 发表于 2020-6-18 10:12
其实还有更简单的也是脚本,可以录制!这都不算什么,关键是养号和防止频繁操作封号处理,抖音可不是小平台

我有个小伙伴就玩的挺6,他粉丝才几万 。但是他发的视频总是几十万几百万上千万的播放量,就几部手机天天研究,哪怕是搬运的视频都有很高的播放量
ciker_li 发表于 2020-6-18 09:19
import diannaoshuohua
import zhaotu
这几个包在哪?
具体怎么操作
tkggcell12 发表于 2020-6-18 09:20
看不懂 不会用
 楼主| cheng0009 发表于 2020-6-18 09:23
ciker_li 发表于 2020-6-18 09:19
import diannaoshuohua
import zhaotu
这几个包在哪?

zhaotu 就在下方。
至于diannaoshuohua是一个关注任务完成之后,一个电脑的语音提示,把那句引用删掉,正常运行,没时间传了,马上要出门
新日安 发表于 2020-6-18 09:34
我测试下,,,楼主真牛
戒心 发表于 2020-6-18 09:35
大佬怎么使用
岁月饶过谁 发表于 2020-6-18 09:35
我等小白只能观望
唐小样儿 发表于 2020-6-18 09:37
好像要,但是搞不懂啊
a192424 发表于 2020-6-18 09:50
不会用你教教不
xiaojunleader 发表于 2020-6-18 09:56
小白观望  坐等大佬指点
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 21:26

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表