薅羊毛!如何让趣头条自动阅读挣钱

说到趣头条,这是一家让人惊讶的公司。2016年上线,2018年成功在美国纳斯达克上市,从上线到上市,仅仅用了2年时间,目前趣头条的市值有32亿美元。

在这里插入图片描述

趣头条并非以用户体验获取成功,其实我觉得体验非常差,其里边的各种广告和诱导分享让人烦不胜烦。

既然能短短时间内上市,肯定有其独到之处了。趣头条主打三四五线城市,其文章大多为社会、养生、八卦、搞笑娱乐之类。大量的四五线城市中趣头条的用户群体,他们时间充足,喜欢趣头条里边的文章,而且看文章能挣钱,邀请新用户还有钱,所以也乐于使用。据说趣头条日活有两千万,不得了!

由于安卓手机有adb调试功能,使用adb能模拟用户操作手机,所以就想:能不能用adb来操控手机,让趣头条为我自动看文章挣金币,于是写了此文。

实际运行效果和收入

在这里插入图片描述
关于收入,我只能告诉你我已经成功挣到钱并提现到微信了,哈哈。
欢迎你也来玩一下试试,而且不止趣头条,腾讯,百度,今日头条都有类似的应用可以薅。都有文末有代码的下载方式。

实现方案分析

开发语言与环境

尝试找过其类似脚本,有一些自动化测试的软件,但是百度了一下,都要安装配置一大坨东西,各种配置,所以我想不如自己直接利用adb实现。

环境 说明
开发语言 c++
运行操作系统 windows x64
编译器 mingw64 g++8.2

如何获取当前的应用的包名和页面

adb shell dumpsys activity top

在这里插入图片描述
从上图可以看出,我们拿到了当前运行的应用的包名和它的Activity名称。

dumpsys命令很强大,如果需要查看详细使用,可以关注我的公众号,里边有dumpsys的详细说明文章。

如何模拟用户滑动界面

adb shell input swipe startX startY endX endY 500

从startX,startY坐标滑动到endX,endY坐标 最后一个参数为总体时间(ms)

如何模拟点击界面

adb shell input tap x y

点击绝对坐标x,y

如何如何获取要点击的按钮的坐标值

可以打开手机的设置界面,在开发者选项中打开"指针位置"选项。打开后,点击或屏幕就可以显示出坐标了,滑动时也会显示轨迹。
在这里插入图片描述

趣头条分析

经过分析后发现下图的规律:
在这里插入图片描述

具体如何操控趣头条挣金币

每小时领取一次小时奖励(60个金币)

  • 第一步:点击领取按钮,会弹出一个对话框
  • 第一步:点击后按返回键,关闭对话框

看小视频挣金币

  • 第一步:点击小视频按钮
  • 第二步:等待一端时间
  • 第三步:回到第一步 (点击后趣头条会自己刷新下一个视频)

看文章挣金币

  • 第一步:点击左下角的头条按钮
  • 第二步: 在头部滑动,选择一类文章
  • 第三步:点击一个文章,进入文章详情界面
  • 第四步:慢慢向下,向上滑动,看文章一段时间
  • 第五步:按返回键退出文章界面

用到的趣头条的界面Activity名称

基本金币都在下面几个界面里,其他界面可以看成是广告界面,在程序里用返回键将其关闭以消除干扰。

  • 主界面 “com.jifen.qkbase.main.MainActivity”
    这个界面还以fragment的形式包含了小视频界面,长视频界面。
  • 文章详情面 “.content.newsdetail.news.NewsDetailActivity”
  • 视频文章界面 “.content.newsdetail.video.VideoNewsDetailQkPlayerActivity”

具体设计

初步的设计想法:

	while ( true ) {
		//检查adb是否连接,应用是否已经启动
		//领每小时一次的时段奖金
		
		//看几个视频
		for(xxxx)
		{
			//点击视频菜单
			//点击一个视频
			//等视频播放一段时间
			
			//各种检查
			//检查adb连接状态,检查当前的应用是否是趣头条,界面是不是广告界面。。。
			//换下一个视频
		}
		//看几个文章
		for(xxxx)
		{
			//点击到文章页
			//选择一类文章
			//选择一个文章
			//开始查看文章
			//看完后退出文章界面
			
			//各种检查
			//检查adb连接状态,检查当前的应用是否是趣头条,界面是不是广告界面。。。
		}
	}

这种方式,内部单独对adb连接状态,应用启动状态,当前的应用的界面做检查,各种特殊情况要一一处理,非常麻烦,很难搞清楚。

改进设计

这么一个自动化工具,依赖于当前的adb的连接状态,当前运行的应用,当前的activity界面,当前的模式(看小视频还是看文章),这让我想起了设计模式里的“状态模式”。于是我们可以将模式的切换,以及对当前状态的检查单独抽离出来,放到大的循环去统一处理, 每个界面只需要按照当前的mode执行相应的刷积分操作即可。

下面是伪代码实现:

初始化 mode = 看短视频

while (true) {
	//获取adb连接状态,当前的应用包名和activity名称
	if (包名不是趣头条) {
		onAppDie(){
			//启动趣头条
		}
		continue;
	}

	//更新自动化模式(看小视频还是看文章)
	schedule(){
		//按需修改mode
		
	}
	
	if (当前是主界面) {
		onMainPage() {
			if(当前是看小视频模式) {
				return;
			}
			//是看文章模式,点击一个文章
		}
		continue;
	}
	if (当前是文章详情界面) {
		onNewsArticlePage(){
			if(当前是看小视频模式) {
				按返回键,退出到主界面
				return;
			}
			//滑动界面看文章
			按返回键,退出到主界面
		}
		continue;
	}
	//其他界面当做事误点击了广告界面
	onOtherPage(){
		按返回键,退出到主界面
	}
}

实际运行效果

遗留的问题

  • 没有办法知道挣了金币没有,有时候有些文章已经看过了或者本身就没金币;
  • 点击的坐标是适配我的手机的(硬编码在代码里了),没适配其他手机。

结束语

通过adb基本可以实现刷金币的功能。如果你家里有几个旧手机,可以拿来刷两刷,看看能不能挣钱。文章里的是伪代码,具体代码欢迎关注下方的公众号,然后回复"薅趣头条"获取完整的代码。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/yinmingxuan/article/details/88845869
今日推荐