薅羊毛时间版APK下载地址:薅羊毛时间版_v0.0.40.apk - 蓝奏云
薅羊毛时间版源代码下载地址:薅羊毛时间版源码.rar - 蓝奏云
薅羊毛时间表顾名思义就是支持时间账号,可以进行时间付费,也可以购买永久账号,这个是次要的。主要的是此版本的APP支持【领宝箱、做任务、清缓、签到、提现和评论】每个APP的功能是不一样的。就按照下面的目录讲解吧!
一、功能区域
二、框架描述
三、资费介绍
四、其他介绍
一、功能区域
目前薅羊毛的APP大概有这多么(不能写名称你们懂得)
文章图片
先放个提现图给大家过过瘾再加之增加信心。
文章图片
金额都不大,0.3元和0.2元的。每个机器都不大一样我有个机器稍微少点。强调一下现在虽然是薅羊毛的后时代但是依然可以薅羊毛,主要是技术和被薅羊毛的APP版本。无障碍、adb、root都已经出现很多问题。协议成本又太高….难道没有办法了吗?我都提现了不可能没办法的,采用APP的历史版本,当然APP得允许使用和提现。不废话上图。
文章图片
我已经提供app的下载,大家安装后下载就可以了。这个版本的薅羊毛必须使用内置提供的APP
用某APP(实际名称会被封杀)举例说明下功能。
筷子,有图有真相
文章图片
来点实际的东西
关注一个用户
function 关注1个用户() {
let returnValue = https://www.it610.com/article/adenTools.getBusinessInfo(appName,"关注1个用户")
if (returnValue) {
if (returnValue =https://www.it610.com/article/= adenTools.getDate()) {
toastLog("关注1个用户任务已经完成...")
return
}
}
toastLog("关注1个用户任务")
if (clickRedPacket()) {
adenTools.sleepRandom3()
adenTools.swipeDown()
adenTools.sleepRandom1()
adenTools.swipeDown()
adenTools.sleepRandom1()
adenTools.swipeDown()
if (text("关注1个用户").exists()) {
if (adenTools.clickControlBounds(text("关注1个用户"))) {
adenTools.sleepRandom1()
if (adenTools.clickControlBounds(text("关注"))) {
adenTools.sleepRandom1()
back()
adenTools.sleepRandom1()
adenTools.clickControlBounds(text("领金币"))
adenTools.sleepRandom1()
adenTools.clickControlBounds(text("知道了"))
adenTools.recordBusinessInfo(appName, "关注1个用户") //到这里应该是提现成功
back()
}
}
}
}}
评论1个作品
function 评论1个作品() {
let returnValue = https://www.it610.com/article/adenTools.getBusinessInfo(appName,"评论1个作品")
if (returnValue) {
if (returnValue =https://www.it610.com/article/= adenTools.getDate()) {
toastLog("评论1个作品任务已经完成...")
return
}
}
toastLog("start评论1个作品任务")
if (clickRedPacket()) {
adenTools.swipeDown()
adenTools.sleepRandom1()
adenTools.swipeDown()
adenTools.sleepRandom1()
adenTools.swipeDown()
if (text("评论1个作品").exists()) {
if (adenTools.clickControlBounds(text("评论1个作品"))) {
adenTools.sleepRandom1()
if (adenTools.clickControlBounds(id("subject_layout"))) {
adenTools.sleepRandom1()
adenTools.sleepRandom1()
adenTools.sleepRandom1()
let little_image_array = adenTools.buildImageArray("评论", "./Image/快手", 6);
if (adenTools.clickAreaForFindImage(little_image_array)) {
let comment = adenComment.CommentKeyWord[Math.floor(Math.random() * adenComment.CommentKeyWord.length)];
adenTools.sleepRandom1()
if (adenTools.clickControlBounds(text("发条有爱评论~"))) {
adenTools.sleepRandom1()
setText(0, comment);
adenTools.sleepRandom1()
if (adenTools.clickControlBounds(text("发送"))) {
toastLog("自动评论成功")
if (!adenTools.clickControlBounds(id("comment_header_close"))) {
back();
}
adenTools.sleepRandom1()
back()
adenTools.sleepRandom1()
if (clickRedPacket()) {
adenTools.sleepRandom1()
adenTools.swipeDown()
adenTools.sleepRandom1()
adenTools.swipeDown()
adenTools.sleepRandom1()
adenTools.swipeDown()
adenTools.clickControlBounds(text("领金币"))
adenTools.sleepRandom1()
adenTools.clickControlBounds(text("知道了"))
adenTools.recordBusinessInfo(appName, "评论1个作品") //到这里应该是提现成功
back()
adenTools.sleepRandom1()
}
}
}
} else {
if (clickRedPacket()) { }
}}
}
}
}
}
筷子极速版吧大家都知道筷子是啥意思。
- 自动阅读(基本功能)视频的下滑同时伴随着随机上滑、随机点赞、随机关注和随机评论。
- 每隔10分钟会执行一下领取宝箱动作、签到、关注等事件给大家放个图
文章图片
这些功能已经内置在各个APP上。大家不用单独设置。
- 大家最关注的就是自动TX,筷子极速版大额TX是要验证码的但是咱TX0.3的啊所以不用验证码。
文章图片
薅羊毛时间版APP本身其实有很多功能,大家可以参考薅羊毛专业版说明书看看APP功能。基本一样。
文章图片
二、框架描述
虽然偏技术但是也得提及,对咱技术人是个帮助,同时小弟也希望大神大咖们不要嘲笑我小弟再次谢过了。
核心技术改成了Autojs7因此支持找图操作。同时找图也有局限性我们技术人都知道的,找图是有分辨率限制的。此款APP是在1920*1080分辨率下截图和找图的因此非此分辨率是不支持的。但是我们技术人是可以修正,其实改改图就行。
进入正题我给大家放个项目截图:
文章图片
Autojs7是支持项目的因此将各个页面分离不在出现万行代码。启动页面的引用。
文章图片
该项目基本的UI都已经写好了,例如:
- APP主界面
- 登录
- 注册
- 系统配置
- 个人页面
- 设备信息
- Flash页面
- 悬浮窗页面
- 账号合法性检测
文章图片
- App升级
文章图片
- 检测网络
文章图片
还有个大家都在苦找得JS页面通讯。Autojs多线程访问UI。
工具类里面也封装了很多使用的方法例如:
adenTools.clickAreaForFindImage多个小图联合找图(可以扩展成多分辨率找图)
/**
* 找图,找到并点击
* @param {可以是数组也可以是字符串,传输数组可以多次找图知道找到为止} img_path_array
* @param {找图区域,默认是全屏找图,该参数可以不传输} area_region
* @param {相似度,默认是0.8,可以不传输} threshold
* @returns true表示执行成功Flase表示失败
*/
adenTools.clickAreaForFindImage=function(img_path_array, area_region, threshold,is_continue) {
try {
area_region = area_region || [0, 0, device.width, device.height] //默认的找图区域 全屏找图 前2位是坐标 后面是长度和宽度千万别理解成是坐标
threshold = threshold || 0.8 // 默认的相识度0.8
is_continue=is_continue|| false
if (img_path_array instanceof Array) {
let arrayLength = img_path_array.length
for (let i = 0;
i < arrayLength;
i++) {
//toastLog("正在进行第" + (i + 1) + "次找图...")
img_path = img_path_array[i] //小图地址可判断是否存在
if (!files.exists(img_path)) {
toastLog(img_path + "文件不存在因此跳过")
continue
}
var little_image = images.read(img_path) //小图
var find_result_bounds = findImage(
captureScreen(), little_image, {
region: area_region,
threshold: threshold
});
if (find_result_bounds) {
toastLog(img_path+"图找到,准备点击坐标:" + find_result_bounds)
click(find_result_bounds.x, find_result_bounds.y)
return true
} else {
//toastLog(img_path+"小图存在但是在大图中未找到图片进入下一次循环...")
}
}
return false
}
if (typeof (img_path_array) == "string") {
img_path = img_path_array//小图地址可判断是否存在
if (!files.exists(img_path)) {
toastLog(img_path + "文件不存在因此跳过")
return false
}
var little_image = images.read(img_path) //小图
var find_result_bounds = findImage(
captureScreen(), little_image, {
region: area_region,
threshold: threshold
});
if (find_result_bounds) {
toastLog(img_path+"图找到,准备点击坐标:" + find_result_bounds)
click(find_result_bounds.x, find_result_bounds.y)
return true
} else {
//toastLog(img_path + "小图存在但是在大图中未找到图片")
return false
}
}
} catch (error) {
toastLog("clickAreaForFindImage方法出现错误:" + error)
return false;
}
}
adenTools.clickRegionForFindImage多个小图联合找图(可以扩展成多分辨率找图)
adenTools.clickRegionForFindImage=function(img_path_array, area_region, threshold,is_continue) {
try {
area_region = area_region || [0, 0, device.width, device.height] //默认的找图区域 全屏找图 前2位是坐标 后面是长度和宽度千万别理解成是坐标
threshold = threshold || 0.9 // 默认的相识度0.85
is_continue=is_continue|| false
if (img_path_array instanceof Array) {
let arrayLength = img_path_array.length
for (let i = 0;
i < arrayLength;
i++) {
img_path = img_path_array[i] //小图地址可判断是否存在
if (!files.exists(img_path)) {
toastLog(img_path + "文件不存在因此跳过")
continue
}
var little_image = images.read(img_path) //小图
var find_result_bounds = images.matchTemplate(
captureScreen(), little_image, {
region: area_region,
threshold: threshold,
max: 100
});
if (find_result_bounds) {
find_result_bounds.matches.forEach(match => {
log(img_path+"point = " + match.point + ", similarity = " + match.similarity);
click(match.point.x, match.point.y)
});
if(is_continue || is_continue=="true"){
continue;
}
return true
} else {
//toastLog(img_path + "小图存在但是在大图中未找到图片进入下一次循环...")
}
}
return false
}
if (typeof (img_path_array) == "string") {
img_path = img_path_array//小图地址可判断是否存在
if (!files.exists(img_path)) {
toastLog(img_path + "文件不存在因此跳过")
return false
}
var little_image = images.read(img_path) //小图
var find_result_bounds = images.matchTemplate(
captureScreen(), little_image, {
region: area_region,
threshold: threshold,
max: 100
});
toastLog(find_result_bounds)
if (find_result_bounds) {
//toastLog(img_path + "图找到,准备点击坐标:" + find_result_bounds)
click(find_result_bounds.x, find_result_bounds.y)
return true
} else {
//toastLog(img_path + "小图存在但是在大图中未找到图片")
return false
}
}
} catch (error) {
toastLog("clickRegionForFindImage方法出现错误:" + error)
return false;
}
}
adenTools.swipeFindElement滑动页面寻找元素或图片(可设置阈值)
adenTools.swipeFindElement=function(searchTimes, searchArray) {
try {
for (let i = 0;
i < searchTimes;
i++) {
toastLog("第"+i+"次查找元素")
let elementCoordinate = adenTools.findImageCoordinate(searchArray)
if (elementCoordinate) {return elementCoordinate
} else {
adenTools.swipeDown()
}
}
return null
} catch (error) {
toastLog("swipeFindElement滑动查找元素失败"+error)
}
}
查找页面的元素或者图片
adenTools.clickWordOrImage 点击文字或图片
adenTools.clickWordOrImage=function(elem, img_array) {
if (elem.exists()) {
adenTools.clickControlBounds(elem)
return true
} else {
if (adenTools.clickControlBounds(img_array)) {
return true
}
}
return false
}
adenTools.clickControOffsetCoordinates 点击找到图片的偏移量
/**
* 点击UI上元素的偏移坐标
* @param {查找的元素} element
* @param {偏移的坐标} cordinates
* @returns 成功返回True失败错误等返回False
*/
adenTools.clickControOffsetCoordinates=function(element,cordinates){
try {
let resultJson=adenTools.getControlBounds(element)
if(resultJson==null || resultJson== undefined){
return false
}else{
if (cordinates instanceof Array) {
toastLog(cordinates[1])
let x=parseInt(resultJson.x)+parseInt(cordinates[0])
let y=parseInt(resultJson.y)+parseInt(cordinates[1])
toastLog(y)
return click(x, y);
}
return false
}
} catch (error) {
toastLog("clickControOffsetCoordinates方法出现错误:" + error)
return false
}
}
获取手机安装app列表
/**
* 获取手机安装app的集合
*/
adenTools.getAppList = function () {
var pm = context.getPackageManager()
var appList = pm.getInstalledApplications(0)
var appInfoList = []
for (let i = 0;
i < appList.size();
i++) {
var app = appList.get(i)
var appInfo = {
appName: app.loadLabel(pm),
packageName: app.packageName,
isSystemApp: false
}
let android_version=device.release
if(android_version==11){}else{
if (!app.isSystemApp()) {
appInfoList.push(appInfo)
}
}
}
//追加app 微信阅读
var appInfo = {
appName: "微信阅读",
packageName: "com.yadinghao.wx.read",
isSystemApp: false
}
appInfoList.push(appInfo)
return appInfoList
}
写日志
/**
* 写日志,toast、consle和文件日志
* @param {日志内容} loginfo
* @param {日志等级} level
*/
writeLog = function (loginfo, level) {
try {
var logName = ""
if(level=="error"){
logName = softName + "" + adenTools.getDate() + "_" + "Log.txt";
}else{
logName = softName + "" + adenTools.getDate() + "_" + "ErrorLog.txt";
}
var logPath = rootPath + "/日志/";
let message = adenTools.getTime() + "(" + softVersion + "):" + loginfo;
if (!files.isDir(rootPath)) {
if (files.create(rootPath)) {
files.create(logPath)
}
} else {
files.create(logPath)
}
let logFilePath = logPath + "/" + logName;
if (!files.exists(logFilePath)) {
files.create(logFilePath);
files.write(logFilePath, message + "\r");
//写日志
}
else {
files.append(logFilePath, message + "\r");
//追加日志
}toast(message);
if (level == "log") {
console.log(message);
} else if (level == "info") {
console.info(message);
} else if (level == "warn") {
console.warn(message);
} else if (level == "error") {
console.error(message);
}
} catch (error) {
console.error("系统再写日志的时候出现错误若不影响使用请略过" + error);
}
}
随机时间
/**
* 休眠随机0.1秒至0.5秒
*/
adenTools.sleepRandom0 = function () {
sleep(random(100, 500));
}
/**
* 休眠随机1秒至3秒
*/
adenTools.sleepRandom1 = function () {
sleep(random(1000, 3000));
}
/**
* 休眠随机3秒至5秒
*/
adenTools.sleepRandom3 = function () {
sleep(random(3000, 5000));
}
/**
* 休眠随机5秒至7秒
*/
adenTools.sleepRandom5 = function () {
sleep(random(5000, 7000));
}
/**
* 休眠随机7秒至9秒
*/
adenTools.sleepRandom7 = function () {
sleep(random(7000, 9000));
}
/**
* 休眠随机11秒至9秒
*/
adenTools.sleepRandom9 = function () {
sleep(random(9000, 11000));
}
日期函数
直线滑动
曲线滑动A(贝叶斯函数)
/**
* 贝塞尔曲线
* @param {坐标点} ScreenPoint
* @param {偏移量} Offset
*/
adenTools.bezier_curves = function (ScreenPoint, Offset) {
cx = 3.0 * (ScreenPoint[1].x - ScreenPoint[0].x);
bx = 3.0 * (ScreenPoint[2].x - ScreenPoint[1].x) - cx;
ax = ScreenPoint[3].x - ScreenPoint[0].x - cx - bx;
cy = 3.0 * (ScreenPoint[1].y - ScreenPoint[0].y);
by = 3.0 * (ScreenPoint[2].y - ScreenPoint[1].y) - cy;
ay = ScreenPoint[3].y - ScreenPoint[0].y - cy - by;
tSquared = Offset * Offset;
tCubed = tSquared * Offset;
result = {
"x": 0,
"y": 0
};
result.x = (ax * tCubed) + (bx * tSquared) + (cx * Offset) + ScreenPoint[0].x;
result.y = (ay * tCubed) + (by * tSquared) + (cy * Offset) + ScreenPoint[0].y;
return result;
}/**
*
* @param {*} qx
* @param {*} qy
* @param {*} zx
* @param {*} zy
* @param {*} time
* @param {*} timesInterval
*/
adenTools.curveDown = function (qx, qy, zx, zy, time, timesInterval) {
var xxy = [time];
var point = [];
var dx0 = {
"x": qx,
"y": qy
};
var dx1 = {
"x": random(qx - 100, qx + 100),
"y": random(qy, qy + 50)
};
var dx2 = {
"x": random(zx - 100, zx + 100),
"y": random(zy, zy + 50),
};
var dx3 = {
"x": zx,
"y": zy
};
for (var i = 0;
i < 4;
i++) {
eval("point.push(dx" + i + ")");
};
for (let i = 0;
i < 1;
i += 0.08) {
let newPoint = adenTools.bezier_curves(point, i);
xxyy = [parseInt(newPoint.x), parseInt(newPoint.y)]
xxy.push(xxyy);
}
gesture.apply(null, xxy);
let randomMin = timesInterval * 1000;
let randomMax = (parseInt(timesInterval) + 2) * 1000;
let delayTime = random(randomMin, randomMax);
sleep(delayTime);
}
adenTools.clickControlBounds 点击找到控件的坐标
太多了自己下载项目看吧。我这里就不一一列举了。项目的位置是Plgin文件夹下。
文章图片
三、资费介绍
作者搞这个软件也是不容易大家支持一下吧~
全部源码是300R包含整个工程
单独APK的邀请码10R每个月
永久(无时间现在)每个邀请码是100R
还望大家理解和支持谢谢送大家一首打油诗
学习知识费力气,收集整理更不易。
知识付费甚欢喜,为咱码农谋福利。
四、其他
App不切换了我该怎么办
两个解决方案,如果都不行我也没招了
- 无障碍服务假活真死,一般华为手机爱这样,重启手机就可以
- 这个是权限问题,不同的手机配置可能不大一样尤其是小米
文章图片
被薅羊毛APK下载
十几个App都有了。必须使用我的版本否则会封号,在薅羊毛时间版中也可以下载。
文章图片
链接:https://pan.baidu.com/s/1qg6zN0vrklyCv-6DQiM3lw?pwd=bq26 提取码:bq26
机型选择
经过多年的甄选基本确定了一个稳定机型
1、OppOR9S 和 OppOR9Sk
2小米5或者小6
其实我不大建议使用华为的手机,电池真心的不行。我3部华为手机电池全部鼓包分别是:华为Mate10、华为Nova和荣耀V8。虽然荣耀被卖了但是我们也不能买新机器干阿。
系统要求
Android7以上包含安卓7非Android7别试验了浪费时间。
薅羊毛时间版APK下载地址:薅羊毛时间版_v0.0.40.apk - 蓝奏云
薅羊毛时间版源代码下载地址:薅羊毛时间版源码.rar - 蓝奏云
【AutoJs|Autojs7实戦---薅羊毛时间版APK】
推荐阅读
- AutoJs|AutoJs4.1.0实战教程---最后惊喜的一篇
- 浏览器工作原理与实践(四)
- 前端|「性能优化」首屏时间从12.67s到1.06s,我是如何做到的()
- 前端|Vue + TypeScript + Element 项目实战及踩坑记
- 突发奇想|Vue + Element做个个人中心玩玩~
- 浏览器工作原理与实践(三)
- C#|详解 .Net6 Minimal API 的使用方式
- 前端转安卓后的经历
- JS系列(认识迭代器和可迭代对象)