commit c6cfb31d69800a595a80f13992e07e6c29b4f02a Author: wangzz Date: Sun Dec 29 18:31:52 2024 +0800 py脚本 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..44ac2ff --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +script/__pycache__/ diff --git a/README.md b/README.md new file mode 100644 index 0000000..a15c872 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# 赚金币 \ No newline at end of file diff --git a/script/adb.py b/script/adb.py new file mode 100644 index 0000000..790aba8 --- /dev/null +++ b/script/adb.py @@ -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(" ")) diff --git a/script/apps.py b/script/apps.py new file mode 100644 index 0000000..6683b47 --- /dev/null +++ b/script/apps.py @@ -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("看视频任务完成") + diff --git a/script/devices.py b/script/devices.py new file mode 100644 index 0000000..42dbc86 --- /dev/null +++ b/script/devices.py @@ -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) \ No newline at end of file diff --git a/script/main.py b/script/main.py new file mode 100644 index 0000000..c4ff88d --- /dev/null +++ b/script/main.py @@ -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() \ No newline at end of file diff --git a/script/ui.py b/script/ui.py new file mode 100644 index 0000000..2fd3ce0 --- /dev/null +++ b/script/ui.py @@ -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) + + + + \ No newline at end of file