想法
每点30个赞都有概率为up的直播增加曝光,支持某个up,就为这个up直播间不断点赞。
但动手一个一个点一定太累了,应该是有脚本能代替这个简单的工作。
实现
怎么执行脚本?
Auto.js
Auto.js是一款Android平台上的自动化工具,它可以帮助用户编写和运行脚本来自动执行手机上的各种操作。用户可以使用JavaScript语言编写脚本,实现自动点击、滑动、输入文字等操作,从而实现自动化执行一系列任务的目的。
Auto.js下载:首页 (autoxjs.com)
Auto.js帮助文档链接:Index | Auto.js 4.1.0 文档 (hexuesong.cn)
JavaScript代码执行流程
使用一门不熟悉的编程语言编写代码时,我个人认为需要先知道这门语言的执行流程,这样才能快速上手。
JavaScript代码执行流程与C语言一样,自顶向下,逐条执行。但因为有一些特性,又与C语言不同。
关键字
我们得先知道一点JavaScript的关键字。
-
声明变量:var、let。
-
声明常量:const。
-
声明函数:function。
需要注意的是:
-
变量拥有一个默认值,undefined。
-
JavaScript变量会根据值自动推断变量的类型,所以不需要显式指定变量的类型。
-
使用
var
关键字重复声明一个已存在的变量,则后续的声明将会覆盖前面的声明。如果再次声明的变量没有提供一个值,则声明会被解析器忽略,不会产生影响。var x = 10; var x = 20; // x的值为20 var y = 10; var y; // y的值为10
-
在相同的作用域内使用
function
关键字重复声明一个已存在的函数,则后续的声明会覆盖前面的声明。 -
let、const相比于var更为严格,类似于C语言中变量的语法规则。不能重复声明。
作用域
JavaScript有两种常见的作用域,函数级作用域和块级作用域。
函数级作用域
在函数级作用域中,变量的可见性仅限于包含它们的函数内部(如exampleFunction函数的{}
内)。
使用 var
关键字声明变量时,该变量的作用域是整个函数,无论该变量是在函数的哪个位置声明的,都可以在函数的任何地方访问。
function exampleFunction() {
var x = 10;
// 可以访问函数内部的变量
console.log(y);
if (true) {
var y = 20;
// 可以访问函数内部的变量
console.log(x);
}
}
需要注意的是:
-
函数外部无法访问函数内部的变量。
-
函数内部可以使用函数外部的变量。
-
函数内部与函数外部都拥有相同的变量时,使用函数内部的变量。
var a = 1; function func() { // 输出undefined console.log(a); var a = 2; // 输出2 console.log(a); }
块级作用域
在块级作用域中,变量的可见性仅限于包含它们的代码块内部(通常是由花括号 {}
包裹的代码段)。
function exampleFunction() {
let x = 10;
if (true) {
let y = 20;
// 可以访问块级作用域内的变量
console.log(x);
}
// 无法访问块级作用域内的变量,会抛出ReferenceError错误
console.log(y);
}
变量提升
JavaScript在编译代码前会对其进行处理,会将使用var关键字声明的变量以及使用function关键字声明的函数的声明提升到当前作用域顶部。
可以这样理解:
// 处理前
var a = 1;
let b = 1;
function c() {
let e = 1;
var f = 1;
}
let d = 1;
// 处理后
var a;
let b;
function c() {
var f;
let e;
e = 1;
f = 1;
}
let d;
a = 1;
b = 1;
d = 1;
编写JavaScript
参考文档开始编辑JavaScript代码
// Auto.js的一个内置函数,用于初始化自动化环境。
auto();
//这个函数用于设置屏幕的分辨率,参数为设备的宽度和高度
setScreenMetrics(1080, 1920);
// 点击屏幕上坐标为(540, 540)的位置,第一次点击触发点赞操作
click(540, 540);
// 循环一百次点击操作,即点击100个赞
for (int i = 1; i <= 100; i++) {
click(540, 540);
// 加入500毫秒的延迟,降低脚本的执行速度
sleep(500);
}
点击100次就停止了,让for循环换成while,参考Auto.js文档,调用函数检测设备是否在充电,如果返回true,循环执行;中途移除电源,循环结束。
// Auto.js的一个内置函数,用于初始化自动化环境。
auto();
// 弹出文本框,用户点击`确认`按钮时,程序继续执行。
alert("设备插入电源,脚本执行;移除设备电源,脚本结束。");
// 设置屏幕分辨率
setScreenMetrics(1080, 1920);
// 调用device.isCharging()函数,判读设备是否在充电
let running = device.isCharging();
// 若设备有供电,程序执行
if (running) {
// 模拟点击屏幕坐标为x,y(540, 540)位置
click(540, 540);
// 以running作为循环执行的依据条件
while (running) {
// 在状态为 true 时不断点击屏幕
click(540, 540);
// 添加延迟,避免占用过多系统资源
sleep(100);
// 更新running状态
if (!device.isCharging()) {
// 判断设备电源是否存在
running = false;
}
}
}
据网友说,每天只能给同一个up点1000个赞,且点赞不能长时间频繁,会被封禁ip。那就加上条件,点击1000个赞后脚本结束,其中每隔3分钟点100个赞,1000个赞30分钟完成。
// Auto.js的一个内置函数,用于初始化自动化环境。
auto();
// 弹出文本框,用户点击`确认`按钮时,程序继续执行。
alert("设备插入电源,脚本执行;移除设备电源,脚本结束。");
// 设置屏幕分辨率
setScreenMetrics(1080, 1920);
// 调用device.isCharging()函数,判读设备是否在充电
let running = device.isCharging();
// 定义变量count,记录点赞次数
let count = 0;
// 若设备有供电,程序执行
if (running) {
// 以running作为循环执行的依据条件
while (running) {
// 模拟点击屏幕坐标为x,y(540, 540)位置
click(540, 540);
// 记录点赞次数
count++;
for (let i = 1; i <= 100; i++) {
// 电源不存在或点赞次数为10时,退出脚本
if (!device.isCharging() || count == 10) {
// 更新running状态
running = false;
// 结束点赞
break;
}
// 在状态为 true 时不断点击屏幕
click(540, 540);
// 添加延迟,避免占用过多系统资源
sleep(100);
}
// 检查running状态
if (!running) {
// 结束脚本
break;
}
// 每点100个赞,间隔3分钟
sleep(180000);
}
}