This commit is contained in:
wangzz
2024-12-29 18:31:52 +08:00
commit c6cfb31d69
7 changed files with 400 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
script/__pycache__/

1
README.md Normal file
View File

@@ -0,0 +1 @@
# 赚金币

66
script/adb.py Normal file
View File

@@ -0,0 +1,66 @@
import subprocess
import re
import threading
lock = threading.Lock()
# 获取连接的设备
def device_get():
cmd = "adb devices"
result = subprocess.run(cmd.split(" "), capture_output=True, text=True)
stdout = result.stdout
# print("------ stdout --------")
# print(stdout)
# print("------ stdout --------")
devices = []
for line in stdout.split("\n")[1:]:
line = line.strip()
if line != "":
match = re.match(r"(\S+)", line)
devices.append(match.group(1))
return devices
# 连接远程设备
def device_connect(ip, port = 5555):
cmd = "adb connect {}:{}".format(ip, port)
result = subprocess.run(cmd.split(" "), capture_output=True, text=True)
stdout = result.stdout
# print(stdout)
return stdout.startswith("connected to")
# 断开设备
def device_disconnect(ip, port = 5555):
cmd = "adb disconnect {}:{}".format(ip, port)
result = subprocess.run(cmd.split(" "), capture_output=True, text=True)
stdout = result.stdout
# print(stdout)
return stdout.startswith("disconnected")
class Operator:
def __init__(self, id):
self.id = id
def home(self):
cmd = "adb -s {} shell input keyevent 3".format(self.id)
self._run(cmd)
def back(self):
cmd = "adb -s {} shell input keyevent 4".format(self.id)
self._run(cmd)
def power(self):
cmd = "adb -s {} shell input keyevent 26".format(self.id)
self._run(cmd)
def touch(self, x, y):
cmd = "adb -s {} shell input tap {} {}".format(self.id, x, y)
self._run(cmd)
def swipe(self, startX, startY, endX, endY, time):
cmd = "adb -s {} shell input swipe {} {} {} {} {}".format(self.id, startX, startY, endX, endY, time)
self._run(cmd)
def _run(self, cmd):
with lock:
subprocess.run(cmd.split(" "))

155
script/apps.py Normal file
View File

@@ -0,0 +1,155 @@
import random
import time
import ui
class Rule:
def __init__(self):
pass
@classmethod
def count(self, num, interval, factor = 0):
self.num = num
self.interval = interval
self.factor = factor
return self
@classmethod
def time(self, duration, interval, factor = 0):
self.duration = duration
self.interval = interval
self.factor = factor
return self
class _App:
def __init__(self, name):
self.name = name
def name(self):
return self.name
def open_app(self):
pass
def open_function(self):
pass
def _exec(rule, func, log_prefix = ""):
factor = getattr(rule, "factor")
if hasattr(rule, "num"):
num = getattr(rule, "num")
i = 1
while i <= num:
wait_time = getattr(rule, "interval")
if factor > 0:
wait_time = round(random.uniform(wait_time - factor, wait_time + factor), 2)
print("{}{}/{} ,停留 {}".format(log_prefix, i, num, wait_time))
func()
time.sleep(wait_time)
i += 1
return True
if hasattr(rule, "time"):
duration = getattr(rule, "duration")
time_total = 0
while time_total < duration:
wait_time = getattr(rule, "interval")
if factor > 0:
wait_time = round(random.uniform(wait_time - factor, wait_time + factor), 2)
if time_total + wait_time > duration:
wait_time = round(duration - time_total, 2)
print("{}{}/{} ,停留 {}".format(log_prefix, time_total, duration, wait_time))
func()
time.sleep(wait_time)
time_total = round(time_total + wait_time, 2)
return True
return False
class ToutiaoLite(_App):
def __init__(self, device):
_App.__init__(self, "头条极速版")
self.device = device
def open_treasure_box(action):
print("开宝箱...")
print("开宝箱完成...")
def watch_video(self, rule):
print("开始看视频任务...")
_exec(rule, lambda : self.device.swipe_up(150, 50), "看视频中")
print("看视频任务完成")
def watch_ad(self, rule):
print("开始看广告任务...")
# 0.3
def func():
button = ui.Button(240, 450, 850, 920)
point = button.get_point()
self.device.back()
self.device.back() # 防止自动进入直播界面
self.device.click(point)
_exec(rule, lambda : func(), "看广告中")
print("看广告任务完成...")
class DouyinLite(_App):
def __init__(self, device):
_App.__init__(self, "抖音极速版")
self.device = device
def watch_video(self, rule):
print("开始看视频任务...")
_exec(rule, lambda : self.device.swipe_up(120, 80), "看视频中")
print("看视频任务完成")
class KuaishouLite(_App):
def __init__(self, device):
_App.__init__(self, "快手极速版")
self.device = device
def watch_video(self, rule):
print("开始看视频任务...")
_exec(rule, lambda : self.device.swipe_up(120, 80), "看视频中")
print("看视频任务完成")
class TomatoListen(_App):
def __init__(self, device):
_App.__init__(self, "番茄畅听")
self.device = device
def watch_video(self, rule):
print("开始看视频任务...")
_exec(rule, lambda : self.device.swipe_up(120, 80), "看视频中")
print("看视频任务完成")
def read_book(self, rule):
print("开始看书任务...")
_exec(rule, lambda : self.device.swipe_left(300, 100), "看书中")
print("看书任务完成")
class TomatoFiction(_App):
def __init__(self, device):
_App.__init__(self, "番茄小说")
self.device = device
def read_book(self, rule):
print("开始看书任务...")
_exec(rule, lambda : self.device.swipe_left(300, 100), "看书中")
print("看书任务完成")
def watch_video(self, rule):
print("开始看视频任务...")
_exec(rule, lambda : self.device.swipe_up(120, 80), "看视频中")
print("看视频任务完成")
class Alipay(_App):
def __init__(self, device):
_App.__init__(self, "支付宝")
self.device = device
def watch_video(self, rule):
print("开始看视频任务...")
_exec(rule, lambda : self.device.swipe_up(120, 80), "看视频中")
print("看视频任务完成")

90
script/devices.py Normal file
View File

@@ -0,0 +1,90 @@
import adb
import random
class _Action:
def __init__(self, id, scr_w, scr_h):
self.id = id
self.scr_w = scr_w
self.scr_h = scr_h
self.operator = adb.Operator(self.id)
# 唤醒
def wakeup(self):
pass
# 解锁
def unlock(self):
pass
# 锁屏
def lock(self):
self.operator.home()
self.operator.power()
# 返回
def back(self):
self.operator.back()
# 划动
def swipe(self, x1, y1, x2, y2, time):
self.operator.swipe(x1, y1, x2, y2, time)
# 上滑
def swipe_up(self, dist, speed):
x1 = int(self.scr_w * 0.25) + int(random.uniform(-10, 10))
x2 = x1 + int(random.uniform(-10, 10))
y1 = int(self.scr_w * 0.7) + int(random.uniform(-10, 10))
y2 = y1 - dist + int(random.uniform(-10, 10))
time = speed - int(random.uniform(-10, 10))
self.operator.swipe(x1, y1, x2, y2, time)
# 下滑
def swipe_down(self, dist, speed):
x1 = int(self.scr_w * 0.75) + int(random.uniform(-10, 10))
x2 = x1 + int(random.uniform(-10, 10))
y1 = int(self.scr_w * 0.5) + int(random.uniform(-10, 10))
y2 = y1 + dist + int(random.uniform(-10, 10))
time = speed + int(random.uniform(-10, 10))
self.operator.swipe(x1, y1, x2, y2, time)
# 左滑
def swipe_left(self, dist, speed):
x1 = int(self.scr_w * 0.7) + int(random.uniform(-10, 10))
x2 = x1 - dist + int(random.uniform(-10, 10))
y1 = int(self.scr_w * 0.75) + int(random.uniform(-10, 10))
y2 = y1 + int(random.uniform(-10, 10))
time = speed + int(random.uniform(-10, 10))
self.operator.swipe(x1, y1, x2, y2, time)
# 右滑
def swipe_right(self, dist, speed):
x1 = int(self.scr_w * 0.25) + int(random.uniform(-10, 10))
x2 = x1 + dist + int(random.uniform(-10, 10))
y1 = int(self.scr_w * 0.75) + int(random.uniform(-10, 10))
y2 = y1 + int(random.uniform(-10, 10))
time = speed + int(random.uniform(-10, 10))
self.operator.swipe(x1, y1, x2, y2, time)
# 点击
def click(self, point):
self.operator.touch(point.x, point.y)
class _Device(_Action):
def __init__(self, id, scr_w, scr_h):
super().__init__(id, scr_w, scr_h)
self.id = id
self.scr_w = scr_w
self.scr_h = scr_h
self.apps = []
def screen_width(self):
return self.scr_w
def screen_height(self):
return self.scr_h
class WikoHi70m(_Device):
def __init__(self, id):
super().__init__(id, 900, 1600)

62
script/main.py Normal file
View File

@@ -0,0 +1,62 @@
from devices import WikoHi70m
import apps
import random
def app_custom(device):
# 上滑视频
device.swipe(240 + int(random.uniform(-10, 10)), 1200 + int(random.uniform(-10, 10)), 240 + int(random.uniform(-10, 10)), 1100 + int(random.uniform(-10, 10)), 50)
# 上滑浏览(小窗口)
# device.swipe(450 + int(random.uniform(-10, 10)), 400 + int(random.uniform(-10, 10)), 450 + int(random.uniform(-10, 10)), 200 + int(random.uniform(-10, 10)), 300)
# 上滑视频(小窗口)
device.swipe(450 + int(random.uniform(-10, 10)), 400 + int(random.uniform(-10, 10)), 450 + int(random.uniform(-10, 10)), 200 + int(random.uniform(-10, 10)), 50)
# 左滑(小窗口)
# device.swipe(600 + int(random.uniform(-10, 10)), 400 + int(random.uniform(-10, 10)), 400 + int(random.uniform(-10, 10)), 400 + int(random.uniform(-10, 10)), 80)
def main():
# adb_cmd.mobile_unlock()
try:
wikoHi70m = WikoHi70m('3URNU24803102309')
# apps._exec(apps.Rule.count(500, 5, 2), lambda : app_custom(wikoHi70m), "任务执行中")
# 快手
# kuaishouLite = apps.KuaishouLite(wikoHi70m)
# kuaishouLite.watch_video(apps.Rule.count(500, 10, 2))
# 抖音
# douyinLite = apps.DouyinLite(wikoHi70m)
# 视频红包
# douyinLite.watch_video(apps.Rule.count(1000, 7, 2))
# 支付宝
# alipay = apps.Alipay(wikoHi70m)
# 视频红包
# alipay.watch_video(apps.Rule.count(1000, 7, 2))
# 头条
# toutiaoLite = apps.ToutiaoLite(wikoHi70m)
# toutiaoLite.watch_ad(apps.Rule.count(500, 10, 2))
# 番茄畅听
# tomatoListen = apps.TomatoListen(wikoHi70m)
# tomatoListen.read_book(apps.Rule.count(1000, 5, 2))
# tomatoListen.watch_video(apps.Rule.count(500, 10, 2))
# 番茄小说
tomatoFiction = apps.TomatoFiction(wikoHi70m)
tomatoFiction.read_book(apps.Rule.count(1000, 5, 2))
# tomatoFiction.watch_video(apps.Rule.count(500, 10, 2))
# 任务完成锁屏
wikoHi70m.lock()
except KeyboardInterrupt:
print("程序被用户中断")
if __name__ == "__main__":
main()

25
script/ui.py Normal file
View File

@@ -0,0 +1,25 @@
import random
# 位置
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
# 按纽
class Button:
def __init__(self, x, y, w = 0, h = 0):
self.x = x
self.y = y
self.w = w
self.h = h
def get_point(self, ran = True):
if ran == True and self.w > 0 and self.h > 0:
return Point(self.x + int(random.uniform(self.w * 4, self.w * 0.7)), self.y + int(random.uniform(self.h * 0.4, self.h * 0.7)))
else:
return Point(self.x, self.y)