2110 lines
76 KiB
Python
2110 lines
76 KiB
Python
|
|
import random
|
|||
|
|
import re
|
|||
|
|
import sys
|
|||
|
|
import os
|
|||
|
|
|
|||
|
|
from models.blum_tx import BlumTx
|
|||
|
|
from models.tg_birds import TgBbrids
|
|||
|
|
from models.tg_paws import TgPaws
|
|||
|
|
from models.tg_phone_devices import TgPhoneDevices
|
|||
|
|
from models.tg_xpin import TgXpin
|
|||
|
|
from models.tg_zoo import TgZoo
|
|||
|
|
from models.wallet_okx import WalletAddressOkx
|
|||
|
|
from ton.tools import get_jettons
|
|||
|
|
|
|||
|
|
# from process.tg_hi_ping import TGHIPIN
|
|||
|
|
|
|||
|
|
# 获取当前脚本所在的目录
|
|||
|
|
current_dir = os.path.dirname(os.path.abspath(__file__))
|
|||
|
|
|
|||
|
|
# 获取 'models' 模块所在的目录,假设它在和 'process' 同级的目录中
|
|||
|
|
models_dir = os.path.dirname(current_dir) # 'process' 目录的父目录
|
|||
|
|
|
|||
|
|
# 将 'models' 模块所在的目录添加到 sys.path
|
|||
|
|
sys.path.append(models_dir)
|
|||
|
|
|
|||
|
|
import time
|
|||
|
|
import uiautomator2 as u2
|
|||
|
|
from loguru import logger
|
|||
|
|
from concurrent.futures import ThreadPoolExecutor
|
|||
|
|
|
|||
|
|
from models.tg_blum_hz import TgBlumHz
|
|||
|
|
from models.tg_models import TelegramAccount
|
|||
|
|
|
|||
|
|
from process.tools import start_ldplayer, close_ldplayer, get_element, get_host_ip, get_ldplayer_list, match_image, \
|
|||
|
|
generate_fake_info, create_ldplayer, get_code, find_img
|
|||
|
|
|
|||
|
|
import threading
|
|||
|
|
|
|||
|
|
lock = threading.Lock()
|
|||
|
|
|
|||
|
|
|
|||
|
|
def get_x_y(coordinate, x, y):
|
|||
|
|
# 随机生成 0-50 之间的数值
|
|||
|
|
random_value = random.randint(x, y)
|
|||
|
|
|
|||
|
|
# 随机决定是加还是减
|
|||
|
|
if random.choice([True, False]):
|
|||
|
|
new_coordinate = coordinate + random_value
|
|||
|
|
else:
|
|||
|
|
new_coordinate = coordinate - random_value
|
|||
|
|
|
|||
|
|
return new_coordinate
|
|||
|
|
|
|||
|
|
|
|||
|
|
def swipe_up(d, start_y1, end_y1, duration=0.1, ):
|
|||
|
|
"""
|
|||
|
|
向上滑动屏幕的函数。
|
|||
|
|
|
|||
|
|
:param d: uiautomator2 的设备实例
|
|||
|
|
:param duration: 滑动持续时间(秒)
|
|||
|
|
"""
|
|||
|
|
# 获取屏幕的宽度和高度
|
|||
|
|
width, height = d.window_size()
|
|||
|
|
|
|||
|
|
# 定义滑动的起始和结束位置
|
|||
|
|
start_x = width / 2
|
|||
|
|
start_y = height * start_y1 # 从屏幕下方 80% 的位置开始滑动
|
|||
|
|
end_x = width / 2
|
|||
|
|
end_y = height * end_y1 # 滑动到屏幕上方 20% 的位置
|
|||
|
|
|
|||
|
|
# 执行滑动操作
|
|||
|
|
d.swipe(start_x, start_y, end_x, end_y, duration)
|
|||
|
|
|
|||
|
|
|
|||
|
|
def get_code_paw(url):
|
|||
|
|
import requests
|
|||
|
|
from lxml import html
|
|||
|
|
|
|||
|
|
try:
|
|||
|
|
headers = {
|
|||
|
|
"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
|
|||
|
|
"accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
|
|||
|
|
"dnt": "1",
|
|||
|
|
"priority": "u=0, i",
|
|||
|
|
"sec-ch-ua": "\"Not/A)Brand\";v=\"8\", \"Chromium\";v=\"126\", \"Microsoft Edge\";v=\"126\"",
|
|||
|
|
"sec-ch-ua-mobile": "?0",
|
|||
|
|
"sec-ch-ua-platform": "\"Windows\"",
|
|||
|
|
"sec-fetch-dest": "document",
|
|||
|
|
"sec-fetch-mode": "navigate",
|
|||
|
|
"sec-fetch-site": "none",
|
|||
|
|
"sec-fetch-user": "?1",
|
|||
|
|
"upgrade-insecure-requests": "1",
|
|||
|
|
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0"
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
response = requests.get(url, headers=headers)
|
|||
|
|
|
|||
|
|
# 将字符串形式的HTML转换为lxml可以解析的HTML树
|
|||
|
|
root = html.fromstring(response.content)
|
|||
|
|
|
|||
|
|
# 使用XPath查找ID为'test'的div元素
|
|||
|
|
code = root.xpath('//*[@id="code"]')[0].text
|
|||
|
|
|
|||
|
|
paw = root.xpath('//*[@id="password"]')[0].text
|
|||
|
|
|
|||
|
|
return code, paw
|
|||
|
|
except Exception as e:
|
|||
|
|
raise '电话号码失效'
|
|||
|
|
|
|||
|
|
|
|||
|
|
# 装饰器封住
|
|||
|
|
def decorator(func):
|
|||
|
|
def wrapper(self, *args, **kwargs):
|
|||
|
|
result = None
|
|||
|
|
|
|||
|
|
# 这里可以在函数执行前增加逻辑
|
|||
|
|
|
|||
|
|
# 启动模拟器
|
|||
|
|
if not self.start_d():
|
|||
|
|
return
|
|||
|
|
|
|||
|
|
try:
|
|||
|
|
result = func(self, *args, **kwargs)
|
|||
|
|
except Exception as e:
|
|||
|
|
print(e)
|
|||
|
|
|
|||
|
|
# 这里可以在函数执行后增加逻辑
|
|||
|
|
close_ldplayer(simulator_id=self.index_id)
|
|||
|
|
return result
|
|||
|
|
|
|||
|
|
return wrapper
|
|||
|
|
|
|||
|
|
|
|||
|
|
class TG:
|
|||
|
|
def __init__(self, tg_phone, dev_info=None, type1=0, ):
|
|||
|
|
|
|||
|
|
self.d = None # u2原生对象
|
|||
|
|
self.index_id = None # 雷电模拟器的id
|
|||
|
|
self.wallet_okx = None # 钱包对象
|
|||
|
|
|
|||
|
|
self.type1 = type1 # 雷电启动类型 0:index,1:name
|
|||
|
|
self.tg_phone = tg_phone # 电话表的信息
|
|||
|
|
self.dev_info = dev_info # session表对象
|
|||
|
|
|
|||
|
|
if type1 == 1: # 名字启动的逻辑
|
|||
|
|
# 查询出id
|
|||
|
|
for i in get_ldplayer_list():
|
|||
|
|
if self.tg_phone.ld_name == i["Name"]:
|
|||
|
|
self.index_id = i["ID"]
|
|||
|
|
break
|
|||
|
|
|
|||
|
|
self.id = "emulator-" + str(5554 + (int(self.index_id) * 2))
|
|||
|
|
elif type1 == 0: # id启动的逻辑
|
|||
|
|
self.id = "emulator-" + str(5554 + (int(self.tg_phone.index_id) * 2))
|
|||
|
|
self.index_id = self.tg_phone.index_id
|
|||
|
|
|
|||
|
|
def open_vpn(self, ):
|
|||
|
|
type1, ele = get_element(self.d, type1="text", grammar='Clash', timeout=1)
|
|||
|
|
if type1: # 点开过
|
|||
|
|
ele.click()
|
|||
|
|
else:
|
|||
|
|
apk_path = '../data/clash.apk'
|
|||
|
|
self.d.app_install(apk_path)
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.xpath('//*[@text="配置"]').click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.xpath('//*[@content-desc="新建"]').click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.xpath('//*[@text="URL"]').click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.xpath('//*[@text="仅接受 http(s) 和 content 类型"]').click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.send_keys(
|
|||
|
|
'https://api-huacloud.dev/sub?target=clash&insert=true&emoji=true&udp=true&clash.doh=true&new_name=true&filename=Flower_SS&url=https%3A%2F%2Fapi.xmancdn.com%2Fosubscribe.php%3Fsid%3D119913%26token%3DJPyA80MQ0pi7%26sip002%3D1')
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.xpath('//*[@text="确认"]').click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.xpath('//*[@resource-id="com.github.kr328.clash.foss:id/action_layout"]').click()
|
|||
|
|
time.sleep(15)
|
|||
|
|
self.d.xpath('//*[@text="新配置"]').click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.shell('input keyevent 4')
|
|||
|
|
|
|||
|
|
time.sleep(5)
|
|||
|
|
type1, ele = get_element(self.d, type1="text", grammar='已停止', timeout=5)
|
|||
|
|
if type1: # 点开过+
|
|||
|
|
ele.click()
|
|||
|
|
|
|||
|
|
type1, ele = get_element(self.d, type1="text", grammar='确定', timeout=5)
|
|||
|
|
if type1: # 点开过+
|
|||
|
|
ele.click()
|
|||
|
|
|
|||
|
|
# 使用 shell 方法执行 adb 命令,模拟按下主页按钮
|
|||
|
|
self.d.shell('input keyevent 3')
|
|||
|
|
|
|||
|
|
def open_vpn1(self):
|
|||
|
|
type1, ele = get_element(self.d, type1="xpath", grammar='//*[@text="Hiddify"]', timeout=1)
|
|||
|
|
if type1: # 点开过
|
|||
|
|
ele.click()
|
|||
|
|
else:
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.app_install('../data/Hiddify-Android-universal.apk')
|
|||
|
|
time.sleep(5)
|
|||
|
|
|
|||
|
|
type1, ele = get_element(self.d, type1="xpath", grammar='//*[@content-desc="开始"]', timeout=10)
|
|||
|
|
if type1: # 点开过
|
|||
|
|
ele.click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
type1, ele = get_element(self.d, type1="xpath", grammar='//*[@content-desc="新的配置文件"]', timeout=1)
|
|||
|
|
if type1: # 点开过
|
|||
|
|
ele.click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.xpath('//*[@content-desc="从剪贴板添加"]').set_text(
|
|||
|
|
"https://api-huacloud.dev/sub?target=clash&insert=true&emoji=true&udp=true&clash.doh=true&new_name=true&filename=Flower_SS&url=https%3A%2F%2Fapi.xmancdn.com%2Fosubscribe.php%3Fsid%3D147271%26token%3Du8lHQf7fIWL5%26sip002%3D1")
|
|||
|
|
time.sleep(5)
|
|||
|
|
|
|||
|
|
type1, ele = get_element(d=self.d, type1="xpath", grammar='//*[@content-desc="点击连接"]', timeout=10)
|
|||
|
|
if type1:
|
|||
|
|
ele.click()
|
|||
|
|
|
|||
|
|
time.sleep(5)
|
|||
|
|
type1, ele = get_element(d=self.d, type1="xpath", grammar='//*[@text="确定"]', timeout=1)
|
|||
|
|
if type1:
|
|||
|
|
ele.click()
|
|||
|
|
|
|||
|
|
type1, ele = get_element(d=self.d, type1="xpath", grammar='//*[@content-desc="已连接"]', timeout=50)
|
|||
|
|
if type1:
|
|||
|
|
time.sleep(5)
|
|||
|
|
|
|||
|
|
def open_vpn2(self):
|
|||
|
|
# 判断是否桌面是否有软件
|
|||
|
|
type1, ele = get_element(d=self.d, type1="xpath", grammar='//*[@content-desc="FlClash"]', timeout=5)
|
|||
|
|
if type1: # 有就删除,再安装
|
|||
|
|
# self.d.app_uninstall("com.follow.clash")
|
|||
|
|
# time.sleep(5)
|
|||
|
|
# self.d.app_install('../data/FlClash.apk')
|
|||
|
|
ele.click()
|
|||
|
|
else: # 没有安装
|
|||
|
|
self.d.app_install('../data/FlClash.apk')
|
|||
|
|
|
|||
|
|
type1, ele = get_element(d=self.d, type1="xpath", grammar='//*[@content-desc="同意"]', timeout=5)
|
|||
|
|
if type1:
|
|||
|
|
ele.click()
|
|||
|
|
|
|||
|
|
type1, ele = get_element(d=self.d, type1="xpath", grammar='//*[@content-desc="代理\n第 2 个标签,共 4 个"]',
|
|||
|
|
timeout=5)
|
|||
|
|
if not type1:
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.xpath('//*[@content-desc="配置\n第 2 个标签,共 3 个"]').click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.xpath('(//android.widget.Button)[last()]').click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.xpath('//*[@content-desc="URL\n通过URL获取配置文件"]').click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.xpath('(//android.widget.EditText)[last()]').click()
|
|||
|
|
time.sleep(1)
|
|||
|
|
self.d.send_keys(
|
|||
|
|
"https://api-huacloud.dev/sub?target=clash&insert=true&emoji=true&udp=true&clash.doh=true&new_name=true&filename=Flower_SS&url=https%3A%2F%2Fapi.xmancdn.com%2Fosubscribe.php%3Fsid%3D147271%26token%3Du8lHQf7fIWL5%26sip002%3D1")
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.xpath('//*[@content-desc="提交"]').click()
|
|||
|
|
time.sleep(10)
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.xpath('//*[@content-desc="代理\n第 2 个标签,共 4 个"]').click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.xpath('//android.widget.Button[2]').click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.xpath('//*[@content-desc="延迟"]').click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.press('back')
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.xpath('(//android.widget.Button)[last()]').click()
|
|||
|
|
time.sleep(15)
|
|||
|
|
self.d.click(309, 1291)
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.xpath('//*[@content-desc="仪表盘\n第 1 个标签,共 4 个"]').click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.xpath('//*[@content-desc="00:00:00"]').click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
type1, ele = get_element(d=self.d, type1="xpath", grammar='//*[@text="确定"]', timeout=5)
|
|||
|
|
if type1:
|
|||
|
|
ele.click()
|
|||
|
|
|
|||
|
|
time.sleep(10)
|
|||
|
|
|
|||
|
|
# 模拟按下 HOME 键,即返回桌面
|
|||
|
|
self.d.press("home")
|
|||
|
|
|
|||
|
|
time.sleep(5)
|
|||
|
|
|
|||
|
|
def kick_out_device(self):
|
|||
|
|
self.d.xpath('//*[@text="Telegram"]').click()
|
|||
|
|
type1, ele = get_element(self.d, type1="xpath", grammar='//*[@text="Continue"]', timeout=5)
|
|||
|
|
if type1: # 点开过+
|
|||
|
|
ele.click()
|
|||
|
|
type1, ele = get_element(self.d, type1="xpath", grammar='//*[@text="允许"]', timeout=5)
|
|||
|
|
if type1: # 点开过+
|
|||
|
|
ele.click()
|
|||
|
|
type1, ele = get_element(self.d, type1="xpath", grammar='//*[@text="允许"]', timeout=5)
|
|||
|
|
if type1: # 点开过+
|
|||
|
|
ele.click()
|
|||
|
|
|
|||
|
|
self.d.xpath('//*[@content-desc="Open navigation menu"]').click()
|
|||
|
|
self.d.xpath('//*[@text="Settings"]').click()
|
|||
|
|
|
|||
|
|
time.sleep(2)
|
|||
|
|
swipe_up(d=self.d, start_y1=0.8, end_y1=0.3, duration=0.5)
|
|||
|
|
self.d.xpath('//*[@text="Devices"]').click()
|
|||
|
|
|
|||
|
|
type1, ele = get_element(self.d, type1="xpath", grammar='//*[@text="Terminate All Other Sessions"]', timeout=5)
|
|||
|
|
if type1: # 点开过+
|
|||
|
|
ele.click()
|
|||
|
|
self.d.xpath('//*[@text="Terminate"]').click()
|
|||
|
|
|
|||
|
|
@decorator
|
|||
|
|
def up_name(self):
|
|||
|
|
|
|||
|
|
self.d.xpath('//*[@text="Telegram"]').click()
|
|||
|
|
|
|||
|
|
# 链接打开后的tg检测检测
|
|||
|
|
if self.tg_testing():
|
|||
|
|
print("账号掉了!!!")
|
|||
|
|
return
|
|||
|
|
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.xpath('//*[@content-desc="Open navigation menu"]').click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.xpath('//*[@text="Settings"]').click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.xpath('//*[@content-desc="More options"]').click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.xpath('//*[@text="Edit Info"]').click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
rect = self.d.xpath('//*[@text="Your name"]').bounds
|
|||
|
|
self.d.long_click(rect[2] - rect[0], rect[3] + 90)
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.xpath('//*[@text="全选"]').click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.click(rect[2] - rect[0], rect[3] + 90)
|
|||
|
|
time.sleep(5)
|
|||
|
|
for i in range(35):
|
|||
|
|
self.d.press("delete")
|
|||
|
|
|
|||
|
|
time.sleep(5)
|
|||
|
|
user_info = generate_fake_info()
|
|||
|
|
self.d.send_keys(f"🐦 SUI {user_info['first_name']}")
|
|||
|
|
time.sleep(5)
|
|||
|
|
# self.d.xpath(
|
|||
|
|
# '/hierarchy/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[2]/android.widget.FrameLayout[1]/android.widget.FrameLayout[2]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.ImageButton[1]/android.widget.ImageView[1]').click()
|
|||
|
|
self.d.click(1003, 155)
|
|||
|
|
time.sleep(15)
|
|||
|
|
|
|||
|
|
tg_brids_info = TgBbrids.get_or_none(TgBbrids.mobile == self.tg_phone.ld_name)
|
|||
|
|
tg_brids_info.modify_nickname = 1
|
|||
|
|
tg_brids_info.baned = 1
|
|||
|
|
tg_brids_info.save()
|
|||
|
|
|
|||
|
|
def log_tg(self):
|
|||
|
|
|
|||
|
|
try:
|
|||
|
|
|
|||
|
|
# 查询模拟器是否存在
|
|||
|
|
for i in get_ldplayer_list():
|
|||
|
|
if self.tg_phone.ld_name == i["Name"]:
|
|||
|
|
self.index_id = i["ID"]
|
|||
|
|
break
|
|||
|
|
|
|||
|
|
else: # 没有查询到,创建模拟器
|
|||
|
|
create_ldplayer(name=self.tg_phone.ld_name)
|
|||
|
|
time.sleep(10)
|
|||
|
|
|
|||
|
|
# 查询出id
|
|||
|
|
for i in get_ldplayer_list():
|
|||
|
|
if self.tg_phone.ld_name == i["Name"]:
|
|||
|
|
self.index_id = i["ID"]
|
|||
|
|
break
|
|||
|
|
|
|||
|
|
if self.index_id:
|
|||
|
|
self.id = "emulator-" + str(5554 + (int(self.index_id) * 2))
|
|||
|
|
logger.info(f"账号:{self.tg_phone.ld_name},查询到模拟器id,启动!!!")
|
|||
|
|
else:
|
|||
|
|
logger.info(f"账号:{self.tg_phone.ld_name},没有查询到,退出!!!")
|
|||
|
|
return
|
|||
|
|
|
|||
|
|
self.start_d()
|
|||
|
|
|
|||
|
|
type1, ele = get_element(self.d, type1="xpath", grammar='//*[@text="Telegram"]', timeout=5) # 等待tg打开
|
|||
|
|
if type1:
|
|||
|
|
ele.click()
|
|||
|
|
else:
|
|||
|
|
time.sleep(1)
|
|||
|
|
self.d.app_install('../data/Telegram.apk')
|
|||
|
|
|
|||
|
|
# 链接打开后的tg检测检测
|
|||
|
|
if self.tg_testing():
|
|||
|
|
logger.info(f"账号:{self.tg_phone.ld_name},开始登录。。。")
|
|||
|
|
|
|||
|
|
else:
|
|||
|
|
logger.info(f"账号:{self.tg_phone.ld_name},登录成功。。。")
|
|||
|
|
|
|||
|
|
self.tg_phone.phone_type = 1
|
|||
|
|
self.tg_phone.is_logged_in_telegram = 1
|
|||
|
|
self.tg_phone.server_id = get_host_ip()
|
|||
|
|
self.tg_phone.save()
|
|||
|
|
|
|||
|
|
close_ldplayer(simulator_id=self.index_id)
|
|||
|
|
return
|
|||
|
|
|
|||
|
|
time.sleep(1)
|
|||
|
|
type1, ele = get_element(self.d, type1="text", grammar='Start Messaging', timeout=5)
|
|||
|
|
if type1:
|
|||
|
|
ele.click()
|
|||
|
|
|
|||
|
|
type1, ele = get_element(self.d, type1="text", grammar='Continue', timeout=5)
|
|||
|
|
if type1: # 点开过
|
|||
|
|
ele.click()
|
|||
|
|
|
|||
|
|
type1, ele = get_element(self.d, type1="text", grammar='允许', timeout=5)
|
|||
|
|
if type1: # 点开过
|
|||
|
|
ele.click()
|
|||
|
|
|
|||
|
|
self.d.xpath('//*[@content-desc="Country code"]').set_text(self.tg_phone.one_phone_number)
|
|||
|
|
self.d.xpath('//*[@content-desc="Phone number"]').set_text(self.tg_phone.telephone)
|
|||
|
|
self.d.xpath('//*[@content-desc="Done"]').click()
|
|||
|
|
self.d(text="Yes").click()
|
|||
|
|
|
|||
|
|
type1, ele = get_element(self.d, type1="text", grammar='Continue', timeout=5)
|
|||
|
|
if type1: # 点开过
|
|||
|
|
ele.click()
|
|||
|
|
|
|||
|
|
type1, ele = get_element(self.d, type1="text", grammar='允许', timeout=5)
|
|||
|
|
if type1: # 点开过
|
|||
|
|
ele.click()
|
|||
|
|
|
|||
|
|
# 获取验证码,密码
|
|||
|
|
type1, ele = get_element(self.d, type1="xpath", grammar='//*[@text="Check your Telegram messages"]',
|
|||
|
|
timeout=100)
|
|||
|
|
|
|||
|
|
time.sleep(10)
|
|||
|
|
|
|||
|
|
code = get_code(phone=self.tg_phone.ld_name, )
|
|||
|
|
|
|||
|
|
# 输入验证码,密码
|
|||
|
|
# self.d.send_keys(code)
|
|||
|
|
self.d.shell(f'input text "{code}"')
|
|||
|
|
type1, ele = get_element(self.d, type1="xpath", grammar='//*[@text="Your password"]',
|
|||
|
|
timeout=100)
|
|||
|
|
time.sleep(3)
|
|||
|
|
self.d.send_keys("Qasdasd123.0")
|
|||
|
|
type1, ele = get_element(self.d, type1="xpath", grammar='//*[@content-desc="Done"]', timeout=5)
|
|||
|
|
if type1: # 点开过
|
|||
|
|
ele.click()
|
|||
|
|
|
|||
|
|
self.tg_phone.is_logged_in_telegram = 1
|
|||
|
|
self.tg_phone.server_id = get_host_ip()
|
|||
|
|
self.tg_phone.save()
|
|||
|
|
|
|||
|
|
time.sleep(25)
|
|||
|
|
|
|||
|
|
except:
|
|||
|
|
pass
|
|||
|
|
finally:
|
|||
|
|
close_ldplayer(simulator_id=self.index_id)
|
|||
|
|
|
|||
|
|
# 使用链接打开tg的检测
|
|||
|
|
def tg_testing(self):
|
|||
|
|
logger.info(f"电话号码:{self.tg_phone.ld_name}:账号检测中》》》")
|
|||
|
|
|
|||
|
|
# 判断需要tg打开链接
|
|||
|
|
for i in range(8):
|
|||
|
|
|
|||
|
|
type1, ele = get_element(d=self.d, type1="xpath", grammar='//*[@text="Continue"]', timeout=0.5)
|
|||
|
|
if type1:
|
|||
|
|
ele.click()
|
|||
|
|
|
|||
|
|
type1, ele = get_element(d=self.d, type1="xpath", grammar='//*[@text="允许"]', timeout=3)
|
|||
|
|
if type1:
|
|||
|
|
ele.click()
|
|||
|
|
|
|||
|
|
type1, ele = get_element(d=self.d, type1="xpath", grammar='//*[@text="允许"]', timeout=3)
|
|||
|
|
if type1:
|
|||
|
|
ele.click()
|
|||
|
|
|
|||
|
|
type1, ele = get_element(d=self.d, type1="xpath", grammar='//*[@text="OK"]', timeout=0.5)
|
|||
|
|
if type1:
|
|||
|
|
ele.click()
|
|||
|
|
|
|||
|
|
type1, ele = get_element(self.d, type1="xpath", grammar='//*[@text="Remind me later"]', timeout=0.5)
|
|||
|
|
if type1:
|
|||
|
|
ele.click()
|
|||
|
|
|
|||
|
|
type1, ele = get_element(self.d, type1="xpath", grammar='//*[@text="Telegram"]', timeout=0.5)
|
|||
|
|
if type1:
|
|||
|
|
ele.click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
type1, ele = get_element(self.d, type1="xpath", grammar='//*[@text="始终"]', timeout=0.5)
|
|||
|
|
if type1: ele.click()
|
|||
|
|
|
|||
|
|
# 判断tg是否掉了
|
|||
|
|
type1, ele = get_element(self.d, type1="xpath", grammar='//*[@text="Start Messaging"]',
|
|||
|
|
timeout=0.5) # 等待tg打开
|
|||
|
|
if type1:
|
|||
|
|
self.tg_phone.is_logged_in_telegram = 0
|
|||
|
|
self.tg_phone.save()
|
|||
|
|
|
|||
|
|
logger.info(f"电话号码:{self.tg_phone.ld_name}:检测完成:未登录!!!")
|
|||
|
|
return True
|
|||
|
|
|
|||
|
|
logger.warning(f"电话号码:{self.tg_phone.ld_name}:检测完成,已登录!!!")
|
|||
|
|
return False
|
|||
|
|
|
|||
|
|
@decorator
|
|||
|
|
def bind_wallet(self, ):
|
|||
|
|
|
|||
|
|
# 使用url打开tg小程序
|
|||
|
|
self.d.open_url('https://t.me/wallet/start')
|
|||
|
|
|
|||
|
|
# 链接打开后的tg检测检测
|
|||
|
|
if self.tg_testing():
|
|||
|
|
print("账号掉了!!!")
|
|||
|
|
return
|
|||
|
|
else:
|
|||
|
|
print("检查完成,账号正常!!!")
|
|||
|
|
|
|||
|
|
# 第一次打开钱包的按钮
|
|||
|
|
type1, ele = get_element(d=self.d, type1="xpath",
|
|||
|
|
grammar='//*[@text="I agree to the Terms of Use"]/android.view.View',
|
|||
|
|
timeout=5)
|
|||
|
|
if type1:
|
|||
|
|
ele.click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.xpath('//*[@text="Continue"]').click()
|
|||
|
|
|
|||
|
|
# 已经加入过的逻辑
|
|||
|
|
type1, ele = get_element(d=self.d, type1="xpath", grammar='//*[@text="TON Space"]', timeout=5)
|
|||
|
|
if type1:
|
|||
|
|
ele.click()
|
|||
|
|
x_y = match_image(d=self.d, template_path='wallet_int_ton_set_up.png', retry_times=10)
|
|||
|
|
if x_y:
|
|||
|
|
self.d.click(x_y[0][0], x_y[0][1])
|
|||
|
|
|
|||
|
|
swipe_up(d=self.d, start_y1=0.8, end_y1=0.5, duration=0.1)
|
|||
|
|
self.d.xpath('//*[@text="Remove TON Space"]').click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.xpath('//*[@text="Remove TON Space"]').click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.xpath('//*[@text="I understand that this TON Space will be removed from this device"]').click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.xpath('//*[@text="I have safely stored the Secret Recovery Phrase for TON Space"]').click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.xpath('(//*[@text="Remove TON Space"])[last()]').click()
|
|||
|
|
|
|||
|
|
else:
|
|||
|
|
|
|||
|
|
type1, ele = get_element(d=self.d, type1="xpath", grammar='//*[@text="让我们开始吧"]', timeout=5)
|
|||
|
|
if type1:
|
|||
|
|
ele.click()
|
|||
|
|
|
|||
|
|
x_y = match_image(d=self.d, template_path='wallet_set_up.png', retry_times=10)
|
|||
|
|
if x_y:
|
|||
|
|
self.d.click(x_y[0][0], x_y[0][1])
|
|||
|
|
|
|||
|
|
# 修改语言
|
|||
|
|
type1, ele = get_element(d=self.d, type1="xpath", grammar='//*[@text="钱包语言中文 (简体)"]', timeout=5)
|
|||
|
|
if type1:
|
|||
|
|
ele.click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.xpath('//*[@text="English"]').click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.xpath('//*[@content-desc="Go back"]').click()
|
|||
|
|
|
|||
|
|
# 打开ton开关
|
|||
|
|
x_y = match_image(d=self.d, template_path='wallet_ton_start.png', retry_times=10)
|
|||
|
|
if x_y:
|
|||
|
|
self.d.click(x_y[0][0], x_y[0][1])
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.xpath('//*[@content-desc="Go back"]').click()
|
|||
|
|
|
|||
|
|
type1, ele = get_element(d=self.d, type1="xpath", grammar='//*[@text="TON Space"]', timeout=5)
|
|||
|
|
if type1:
|
|||
|
|
ele.click()
|
|||
|
|
|
|||
|
|
swipe_up(d=self.d, start_y1=0.8, end_y1=0.5, duration=0.1)
|
|||
|
|
type1, ele = get_element(d=self.d, type1="xpath", grammar='//*[@text="Add Existing Wallet"]', timeout=5)
|
|||
|
|
if type1:
|
|||
|
|
ele.click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.xpath('//*[@text="Import Manually"]').click()
|
|||
|
|
|
|||
|
|
test = 'birth comic stage error expose certain gossip unfold wagon piece mushroom chronic meat knock cart fix shine lunch future hammer gauge very awake ecology'
|
|||
|
|
self.d.send_keys(test.replace(" ", "\n"))
|
|||
|
|
self.d.xpath('//*[@text="Next"]').click()
|
|||
|
|
|
|||
|
|
type1, ele = get_element(d=self.d, type1="xpath", grammar='//*[@text="View Wallet"]', timeout=500)
|
|||
|
|
if type1:
|
|||
|
|
ele.click()
|
|||
|
|
|
|||
|
|
def open_project(self, url):
|
|||
|
|
# 打开小程序
|
|||
|
|
self.d.open_url(url)
|
|||
|
|
|
|||
|
|
# 判断需要tg打开链接
|
|||
|
|
for i in range(5):
|
|||
|
|
|
|||
|
|
type1, ele = get_element(d=self.d, type1='xpath', grammar='//*[@text="Start"]', timeout=1)
|
|||
|
|
if type1:
|
|||
|
|
ele.click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
break
|
|||
|
|
|
|||
|
|
try:
|
|||
|
|
type1, ele = get_element(d=self.d, type1='xpath', grammar="//*[contains(@text, 'Telegram')]", timeout=1)
|
|||
|
|
if type1:
|
|||
|
|
ele.click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
type1, ele = get_element(d=self.d, type1="xpath", grammar='//*[@text="始终"]', timeout=1)
|
|||
|
|
if type1: ele.click()
|
|||
|
|
|
|||
|
|
except Exception as e:
|
|||
|
|
pass
|
|||
|
|
|
|||
|
|
def get_code(self):
|
|||
|
|
|
|||
|
|
# 启动模拟器
|
|||
|
|
if not self.start_d():
|
|||
|
|
return
|
|||
|
|
|
|||
|
|
self.d.xpath('//*[@text="Telegram"]').click()
|
|||
|
|
|
|||
|
|
# 链接打开后的tg检测检测
|
|||
|
|
if self.tg_testing():
|
|||
|
|
print("账号掉了!!!")
|
|||
|
|
return True
|
|||
|
|
|
|||
|
|
for i in range(10):
|
|||
|
|
type1, ele = get_element(d=self.d, type1="xpath", grammar='//*[@text="Continue"]', timeout=0.1)
|
|||
|
|
if type1:
|
|||
|
|
ele.click()
|
|||
|
|
|
|||
|
|
type1, ele = get_element(d=self.d, type1="xpath", grammar='//*[@text="允许"]', timeout=0.1)
|
|||
|
|
if type1:
|
|||
|
|
ele.click()
|
|||
|
|
|
|||
|
|
type1, ele = get_element(d=self.d, type1="xpath", grammar='//*[@text="允许"]', timeout=0.1)
|
|||
|
|
if type1:
|
|||
|
|
ele.click()
|
|||
|
|
|
|||
|
|
type1, ele = get_element(d=self.d, type1="xpath", grammar='//*[@text="OK"]', timeout=0.1)
|
|||
|
|
if type1:
|
|||
|
|
ele.click()
|
|||
|
|
|
|||
|
|
self.d.xpath('//*[@content-desc="Search"]').set_text('telegram')
|
|||
|
|
time.sleep(5)
|
|||
|
|
|
|||
|
|
try:
|
|||
|
|
self.d.xpath('//*[@text="Telegram, Verified\n, support"]').click()
|
|||
|
|
except Exception as e:
|
|||
|
|
self.d.xpath('//*[@text="Telegram Notifications, Verified\n, support"]').click()
|
|||
|
|
|
|||
|
|
for i in range(5):
|
|||
|
|
swipe_up(d=self.d, start_y1=0.8, end_y1=0.3, duration=0.1)
|
|||
|
|
time.sleep(5)
|
|||
|
|
|
|||
|
|
def get_code1(self):
|
|||
|
|
|
|||
|
|
self.d = u2.connect(self.id)
|
|||
|
|
|
|||
|
|
# # 链接打开后的tg检测检测
|
|||
|
|
# if self.tg_testing():
|
|||
|
|
# print("账号掉了!!!")
|
|||
|
|
# return True
|
|||
|
|
|
|||
|
|
for i in range(15):
|
|||
|
|
type1, ele = get_element(self.d, type1="xpath", grammar='//*[@text="Remind me later"]', timeout=0.5)
|
|||
|
|
if type1:
|
|||
|
|
ele.click()
|
|||
|
|
|
|||
|
|
for i in range(15):
|
|||
|
|
swipe_up(d=self.d, start_y1=0.8, end_y1=0.3, duration=0.1)
|
|||
|
|
time.sleep(1)
|
|||
|
|
|
|||
|
|
codes = []
|
|||
|
|
for i in self.d.xpath('//android.view.ViewGroup').all():
|
|||
|
|
matches = re.findall(r'\d{5}', i.text)
|
|||
|
|
|
|||
|
|
if matches:
|
|||
|
|
codes.append(matches[0])
|
|||
|
|
|
|||
|
|
return codes
|
|||
|
|
|
|||
|
|
def close_ldplayer(self):
|
|||
|
|
# 这里可以在函数执行后增加逻辑
|
|||
|
|
close_ldplayer(simulator_id=self.index_id)
|
|||
|
|
|
|||
|
|
def start_d(self):
|
|||
|
|
print(self.index_id, )
|
|||
|
|
|
|||
|
|
d_type = 0
|
|||
|
|
|
|||
|
|
# 连接模拟器
|
|||
|
|
for i in range(3):
|
|||
|
|
if d_type:
|
|||
|
|
break
|
|||
|
|
|
|||
|
|
start_ldplayer(simulator_id=self.index_id)
|
|||
|
|
|
|||
|
|
for i in range(3):
|
|||
|
|
time.sleep(15)
|
|||
|
|
try:
|
|||
|
|
self.d = u2.connect(self.id)
|
|||
|
|
d_type = 1
|
|||
|
|
break
|
|||
|
|
except Exception as e:
|
|||
|
|
pass
|
|||
|
|
else:
|
|||
|
|
close_ldplayer(simulator_id=self.index_id, )
|
|||
|
|
|
|||
|
|
time.sleep(10)
|
|||
|
|
|
|||
|
|
return d_type
|
|||
|
|
|
|||
|
|
def action(self):
|
|||
|
|
print(self.index_id, )
|
|||
|
|
|
|||
|
|
d_type = 0
|
|||
|
|
|
|||
|
|
# 连接模拟器
|
|||
|
|
for i in range(3):
|
|||
|
|
if d_type:
|
|||
|
|
break
|
|||
|
|
|
|||
|
|
start_ldplayer(simulator_id=self.index_id)
|
|||
|
|
|
|||
|
|
for i in range(3):
|
|||
|
|
time.sleep(15)
|
|||
|
|
try:
|
|||
|
|
self.d = u2.connect(self.id)
|
|||
|
|
d_type = 1
|
|||
|
|
break
|
|||
|
|
except Exception as e:
|
|||
|
|
pass
|
|||
|
|
else:
|
|||
|
|
close_ldplayer(simulator_id=self.index_id, )
|
|||
|
|
|
|||
|
|
time.sleep(10)
|
|||
|
|
|
|||
|
|
# tg逻辑
|
|||
|
|
# self.tg_action()
|
|||
|
|
|
|||
|
|
code = self.get_code() # 获取验证码
|
|||
|
|
|
|||
|
|
# 启动仓鼠
|
|||
|
|
# self.hk_action()
|
|||
|
|
|
|||
|
|
close_ldplayer(simulator_id=self.index_id)
|
|||
|
|
|
|||
|
|
return code
|
|||
|
|
|
|||
|
|
@decorator
|
|||
|
|
def action1(self):
|
|||
|
|
|
|||
|
|
tg_blum = TgBlumHz.get_or_none(TgBlumHz.tg_id == self.tg_phone.id)
|
|||
|
|
if not tg_blum:
|
|||
|
|
tg_blum = TgBlumHz.create(
|
|||
|
|
tg_id=self.tg_phone.id,
|
|||
|
|
phone=self.tg_phone.ld_name,
|
|||
|
|
)
|
|||
|
|
elif tg_blum.start == 1:
|
|||
|
|
return
|
|||
|
|
|
|||
|
|
self.open_vpn2()
|
|||
|
|
|
|||
|
|
self.open_project(url='https://t.me/ton_society_bot')
|
|||
|
|
time.sleep(5)
|
|||
|
|
type1, ele = get_element(d=self.d, type1='xpath', grammar='//*[@content-desc="Bot menu"]', timeout=50)
|
|||
|
|
if type1:
|
|||
|
|
ele.click()
|
|||
|
|
|
|||
|
|
type1, ele = get_element(d=self.d, type1='xpath', grammar='//*[@text="Start"]', timeout=10)
|
|||
|
|
if type1:
|
|||
|
|
ele.click()
|
|||
|
|
|
|||
|
|
type1, ele = get_element(d=self.d, type1='xpath', grammar='//*[@text="Normie Airdrop"]', timeout=50)
|
|||
|
|
if type1:
|
|||
|
|
print(1)
|
|||
|
|
|
|||
|
|
tg_blum.start = 1
|
|||
|
|
else:
|
|||
|
|
tg_blum.start = 1
|
|||
|
|
|
|||
|
|
tg_blum.save()
|
|||
|
|
|
|||
|
|
@decorator
|
|||
|
|
def pell_action(self):
|
|||
|
|
try:
|
|||
|
|
self.open_vpn2() # 打开vpn
|
|||
|
|
|
|||
|
|
self.open_project(url='https://t.me/AllianceMicroNodeBot/AMN?startapp=2P7FSM')
|
|||
|
|
|
|||
|
|
# 链接打开后的tg检测检测
|
|||
|
|
if self.tg_testing():
|
|||
|
|
print("账号掉了!!!")
|
|||
|
|
return
|
|||
|
|
|
|||
|
|
time.sleep(25)
|
|||
|
|
except Exception as e:
|
|||
|
|
print(e)
|
|||
|
|
|
|||
|
|
def tonkeeper_add(self):
|
|||
|
|
type1, ele = get_element(d=self.d, type1="xpath", grammar='//*[@text="Tonkeeper"]', timeout=10)
|
|||
|
|
if type1:
|
|||
|
|
self.d.app_uninstall('com.ton_keeper')
|
|||
|
|
|
|||
|
|
time.sleep(5)
|
|||
|
|
from pathlib import Path
|
|||
|
|
|
|||
|
|
# 获取当前脚本所在的文件夹路径
|
|||
|
|
current_folder_path = Path(__file__).parent.resolve()
|
|||
|
|
# 上一个路径
|
|||
|
|
grandparent_folder_path = current_folder_path.parent
|
|||
|
|
# 获取当前脚本所在文件夹下 data 文件夹的路径
|
|||
|
|
data_folder_path = grandparent_folder_path / 'data'
|
|||
|
|
|
|||
|
|
with lock:
|
|||
|
|
os.system(f"adb -s {self.d.serial} install -t {data_folder_path}/Tonkeeper.apk") # -s 指定设备,-t 允许测试包
|
|||
|
|
type1, ele = get_element(d=self.d, type1="xpath", grammar='//*[@text="Tonkeeper"]', timeout=10)
|
|||
|
|
if type1:
|
|||
|
|
ele.click()
|
|||
|
|
|
|||
|
|
type1, ele = get_element(d=self.d, type1="xpath", grammar='//*[@text="导入现有钱包"]', timeout=10)
|
|||
|
|
if type1:
|
|||
|
|
time.sleep(5)
|
|||
|
|
ele.click()
|
|||
|
|
|
|||
|
|
type1, ele = get_element(d=self.d, type1="xpath", grammar='//*[@text="使用24个秘密恢复词导入钱包"]', timeout=10)
|
|||
|
|
if type1:
|
|||
|
|
time.sleep(5)
|
|||
|
|
ele.click()
|
|||
|
|
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.xpath('//*[@resource-id="com.ton_keeper:id/word_1"]').click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
|
|||
|
|
# 输入助记词
|
|||
|
|
words = self.wallet_okx.words.replace(" ", "\n")
|
|||
|
|
self.d.send_keys(words)
|
|||
|
|
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.xpath('//*[@text="继续"]').click()
|
|||
|
|
|
|||
|
|
type1, ele = get_element(d=self.d, type1="xpath", grammar='//*[@text="继续"]', timeout=5)
|
|||
|
|
if type1:
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.xpath('//*[@resource-id="com.ton_keeper:id/selected"]').click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
ele.click()
|
|||
|
|
|
|||
|
|
time.sleep(5)
|
|||
|
|
for i in range(2):
|
|||
|
|
for i in range(4):
|
|||
|
|
self.d.xpath('//*[@text="1"]').click()
|
|||
|
|
time.sleep(1)
|
|||
|
|
|
|||
|
|
self.d.xpath('//*[@text="之后"]').click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.xpath('//*[@text="继续"]').click()
|
|||
|
|
type1, ele = get_element(d=self.d, type1="xpath", grammar='//*[@resource-id="com.ton_keeper:id/stories_close"]',
|
|||
|
|
timeout=15)
|
|||
|
|
if type1:
|
|||
|
|
ele.click()
|
|||
|
|
|
|||
|
|
time.sleep(5)
|
|||
|
|
res = self.d.xpath('//*[contains(@text, "您的地址")]').get_text().split('…')[-1].split()[0]
|
|||
|
|
if res != self.wallet_okx.v4r2_address[-4:]:
|
|||
|
|
self.d.xpath('//*[@resource-id="com.ton_keeper:id/settings"]').click()
|
|||
|
|
|
|||
|
|
type1, ele = get_element(d=self.d, type1="xpath", grammar='//*[@text="钱包 v4R2"]', timeout=25)
|
|||
|
|
if type1:
|
|||
|
|
time.sleep(5)
|
|||
|
|
ele.click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
|
|||
|
|
for i in range(4):
|
|||
|
|
self.d.xpath('//*[@text="1"]').click()
|
|||
|
|
time.sleep(1)
|
|||
|
|
|
|||
|
|
res = self.d.xpath('//*[contains(@text, "您的地址")]').get_text().split('…')[-1]
|
|||
|
|
logger.warning(f"当前模拟器名字:{self.tg_phone.ld_name},助记词后四位:{res}!!!")
|
|||
|
|
if res == self.wallet_okx.v4r2_address[-4:]:
|
|||
|
|
return True
|
|||
|
|
else:
|
|||
|
|
return True
|
|||
|
|
|
|||
|
|
return False
|
|||
|
|
|
|||
|
|
@decorator
|
|||
|
|
def paws_wallet(self):
|
|||
|
|
self.tg_paws_info = TgPaws.get_or_none(TgPaws.phone == self.tg_phone.ld_name)
|
|||
|
|
if self.tg_paws_info:
|
|||
|
|
logger.info(f"当前模拟器名字:{self.tg_phone.ld_name},项目表中查询到》》》")
|
|||
|
|
else:
|
|||
|
|
logger.error(f"当前模拟器名字:{self.tg_phone.ld_name},项目表中没有查询到!!!")
|
|||
|
|
return
|
|||
|
|
|
|||
|
|
self.wallet_okx = WalletAddressOkx.get_or_none(
|
|||
|
|
WalletAddressOkx.tg_id == self.tg_phone.id,
|
|||
|
|
WalletAddressOkx.ld_name == self.tg_phone.ld_name,
|
|||
|
|
WalletAddressOkx.project_name == "paws-不用跑"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
if self.tonkeeper_add():
|
|||
|
|
logger.info(f"当前模拟器名字:{self.tg_phone.ld_name},tonkeeper绑定成功!!!")
|
|||
|
|
else:
|
|||
|
|
logger.info(f"当前模拟器名字:{self.tg_phone.ld_name},tonkeeper绑定失败!!!")
|
|||
|
|
return
|
|||
|
|
|
|||
|
|
self.open_project(url='https://t.me/PAWSOG_bot/PAWS?startapp=l87URKRF')
|
|||
|
|
|
|||
|
|
# 链接打开后的tg检测检测
|
|||
|
|
if self.tg_testing():
|
|||
|
|
print("账号掉了!!!")
|
|||
|
|
return
|
|||
|
|
|
|||
|
|
try:
|
|||
|
|
self.d.xpath(f'//*[contains(@text, "{self.wallet_okx.v4r2_address[-4:]}")]')
|
|||
|
|
logger.info(f"当前模拟器名字:{self.tg_phone.ld_name},钱包成功!!!")
|
|||
|
|
return
|
|||
|
|
except:
|
|||
|
|
logger.error(f"当前模拟器名字:{self.tg_phone.ld_name},钱包没有绑或者是绑定失败!!!")
|
|||
|
|
self.tg_paws_info.wallet_start = 3
|
|||
|
|
self.tg_paws_info.save()
|
|||
|
|
|
|||
|
|
time.sleep(5)
|
|||
|
|
type1, ele = get_element(d=self.d, type1="xpath", grammar='//*[@text="Check the footprint map"]', timeout=20)
|
|||
|
|
if type1:
|
|||
|
|
time.sleep(5)
|
|||
|
|
x_Y = match_image(d=self.d, template_path="images/paws_ton1.png", retry_times=5, threshold=0.8)
|
|||
|
|
if x_Y: self.d.click(x_Y[0][0], x_Y[0][1])
|
|||
|
|
|
|||
|
|
time.sleep(5)
|
|||
|
|
x_Y = match_image(d=self.d, template_path="images/paws_wallet.png", retry_times=5, threshold=0.8)
|
|||
|
|
if x_Y: self.d.click(x_Y[0][0], x_Y[0][1])
|
|||
|
|
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.xpath('//*[@text="连接钱包"]').click()
|
|||
|
|
|
|||
|
|
self.tg_paws_info.wallet_start = 1
|
|||
|
|
self.tg_paws_info.save()
|
|||
|
|
time.sleep(20)
|
|||
|
|
|
|||
|
|
@decorator
|
|||
|
|
def paws_wallet_start(self):
|
|||
|
|
self.wallet_okx = WalletAddressOkx.get_or_none(
|
|||
|
|
WalletAddressOkx.tg_id == self.tg_phone.id,
|
|||
|
|
WalletAddressOkx.ld_name == self.tg_phone.ld_name,
|
|||
|
|
WalletAddressOkx.project_name == "paws-不用跑"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
if self.tonkeeper_add():
|
|||
|
|
logger.info(f"当前模拟器名字:{self.tg_phone.ld_name},tonkeeper绑定成功!!!")
|
|||
|
|
else:
|
|||
|
|
logger.info(f"当前模拟器名字:{self.tg_phone.ld_name},tonkeeper绑定失败!!!")
|
|||
|
|
return
|
|||
|
|
|
|||
|
|
self.open_project(url='https://t.me/PAWSOG_bot/PAWS?startapp=l87URKRF')
|
|||
|
|
|
|||
|
|
# 链接打开后的tg检测检测
|
|||
|
|
if self.tg_testing():
|
|||
|
|
print("账号掉了!!!")
|
|||
|
|
return
|
|||
|
|
|
|||
|
|
try:
|
|||
|
|
self.d.xpath(f'//*[contains(@text, "{self.wallet_okx.v4r2_address[-4:]}")]')
|
|||
|
|
logger.info(f"当前模拟器名字:{self.tg_phone.ld_name},钱包成功!!!")
|
|||
|
|
return
|
|||
|
|
except:
|
|||
|
|
logger.error(f"当前模拟器名字:{self.tg_phone.ld_name},钱包没有绑或者是绑定失败!!!")
|
|||
|
|
self.tg_paws_info.wallet_start = 3
|
|||
|
|
self.tg_paws_info.save()
|
|||
|
|
|
|||
|
|
@decorator
|
|||
|
|
def set_time_wallet(self):
|
|||
|
|
self.wallet_okx = WalletAddressOkx.get_or_none(
|
|||
|
|
WalletAddressOkx.tg_id == self.tg_phone.id,
|
|||
|
|
WalletAddressOkx.ld_name == self.tg_phone.ld_name,
|
|||
|
|
WalletAddressOkx.project_name == "time"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
if self.wallet_okx.stast:
|
|||
|
|
logger.info(f"当前模拟器名字:{self.tg_phone.ld_name},钱包已经绑定!!!")
|
|||
|
|
return
|
|||
|
|
|
|||
|
|
if self.tonkeeper_add():
|
|||
|
|
logger.info(f"当前模拟器名字:{self.tg_phone.ld_name},tonkeeper绑定成功!!!")
|
|||
|
|
else:
|
|||
|
|
logger.info(f"当前模拟器名字:{self.tg_phone.ld_name},tonkeeper绑定失败!!!")
|
|||
|
|
return
|
|||
|
|
|
|||
|
|
self.d.open_url(url='https://t.me/TimeFarmCryptoBot?start=1ll25QcyYLilP5NQF')
|
|||
|
|
|
|||
|
|
# 链接打开后的tg检测检测
|
|||
|
|
if self.tg_testing():
|
|||
|
|
print("账号掉了!!!")
|
|||
|
|
return
|
|||
|
|
|
|||
|
|
type1, ele = get_element(d=self.d, type1='xpath', grammar='(//*[@text="Open App"])[last()]', timeout=10)
|
|||
|
|
if type1:
|
|||
|
|
ele.click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
type1, ele = get_element(d=self.d, type1='xpath', grammar='//*[@text="Start"]', timeout=5)
|
|||
|
|
if type1:
|
|||
|
|
ele.click()
|
|||
|
|
|
|||
|
|
type1, ele = get_element(d=self.d, type1="xpath", grammar='//*[@text="Next"]', timeout=25)
|
|||
|
|
if type1:
|
|||
|
|
ele.click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
x_Y = match_image(d=self.d, template_path="images/time_start.png", retry_times=5, threshold=0.8)
|
|||
|
|
if x_Y: self.d.click(x_Y[0][0], x_Y[0][1])
|
|||
|
|
|
|||
|
|
type1, ele = get_element(d=self.d, type1="xpath", grammar='//*[@text="Done"]', timeout=5)
|
|||
|
|
if type1:
|
|||
|
|
ele.click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
|
|||
|
|
self.d.xpath('//*[@text="Wallet"]').click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.xpath('//*[@text="ton Connect your TON wallet >"]').click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
x_Y = match_image(d=self.d, template_path="images/time_tonkeeper.png", retry_times=5, threshold=0.8)
|
|||
|
|
if x_Y: self.d.click(x_Y[0][0], x_Y[0][1])
|
|||
|
|
|
|||
|
|
time.sleep(5)
|
|||
|
|
type1, ele = get_element(d=self.d, type1="xpath", grammar='//*[@text="Tonkeeper"]', timeout=5)
|
|||
|
|
if type1:
|
|||
|
|
ele.click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
type1, ele = get_element(d=self.d, type1="xpath", grammar='//*[@text="始终"]', timeout=5)
|
|||
|
|
if type1:
|
|||
|
|
ele.click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
|
|||
|
|
# self.d.xpath('//*[@text="连接钱包"]').click()
|
|||
|
|
x_Y = match_image(d=self.d, template_path="images/tonkeeper__.png", retry_times=5, threshold=0.8)
|
|||
|
|
if x_Y: self.d.click(x_Y[0][0], x_Y[0][1])
|
|||
|
|
|
|||
|
|
try:
|
|||
|
|
time.sleep(5)
|
|||
|
|
for i in range(2):
|
|||
|
|
for i in range(4):
|
|||
|
|
self.d.xpath('//*[@text="1"]').click()
|
|||
|
|
time.sleep(1)
|
|||
|
|
except:
|
|||
|
|
pass
|
|||
|
|
|
|||
|
|
self.wallet_okx.stast = 1
|
|||
|
|
self.wallet_okx.save()
|
|||
|
|
time.sleep(20)
|
|||
|
|
|
|||
|
|
@decorator
|
|||
|
|
def alliance_wallet(self):
|
|||
|
|
|
|||
|
|
self.wallet_okx = WalletAddressOkx.get_or_none(
|
|||
|
|
WalletAddressOkx.tg_id == self.tg_phone.id,
|
|||
|
|
WalletAddressOkx.ld_name == self.tg_phone.ld_name,
|
|||
|
|
WalletAddressOkx.project_name == "alliance"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
if self.tonkeeper_add():
|
|||
|
|
logger.info(f"当前模拟器名字:{self.tg_phone.ld_name},tonkeeper绑定成功!!!")
|
|||
|
|
else:
|
|||
|
|
logger.info(f"当前模拟器名字:{self.tg_phone.ld_name},tonkeeper绑定失败!!!")
|
|||
|
|
return
|
|||
|
|
|
|||
|
|
self.open_project(url='https://t.me/AllianceMicroNodeBot/AMN?startapp=32HSHC')
|
|||
|
|
|
|||
|
|
# 链接打开后的tg检测检测
|
|||
|
|
if self.tg_testing():
|
|||
|
|
print("账号掉了!!!")
|
|||
|
|
return
|
|||
|
|
|
|||
|
|
self.d.xpath('//*[@text="Quest"]').click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.xpath('//*[@text="Mission"]').click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
swipe_up(d=self.d, start_y1=0.8, end_y1=0.2)
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.xpath('//*[@text="Bind Ton Wallet"]').click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
x_Y = match_image(d=self.d, template_path="images/capybara_tonkeeper.png", retry_times=5, threshold=0.8)
|
|||
|
|
if x_Y: self.d.click(x_Y[0][0], x_Y[0][1])
|
|||
|
|
|
|||
|
|
time.sleep(5)
|
|||
|
|
# self.d.xpath('//*[@text="连接钱包"]').click()
|
|||
|
|
x_Y = match_image(d=self.d, template_path="images/tonkeeper__.png", retry_times=5, threshold=0.8)
|
|||
|
|
if x_Y: self.d.click(x_Y[0][0], x_Y[0][1])
|
|||
|
|
|
|||
|
|
try:
|
|||
|
|
time.sleep(5)
|
|||
|
|
for i in range(2):
|
|||
|
|
for i in range(4):
|
|||
|
|
self.d.xpath('//*[@text="1"]').click()
|
|||
|
|
time.sleep(1)
|
|||
|
|
except:
|
|||
|
|
pass
|
|||
|
|
|
|||
|
|
self.wallet_okx.stast = 1
|
|||
|
|
self.wallet_okx.save()
|
|||
|
|
time.sleep(20)
|
|||
|
|
|
|||
|
|
@decorator
|
|||
|
|
def capybara_wallet(self):
|
|||
|
|
|
|||
|
|
self.wallet_okx = WalletAddressOkx.get_or_none(
|
|||
|
|
WalletAddressOkx.tg_id == self.tg_phone.id,
|
|||
|
|
WalletAddressOkx.ld_name == self.tg_phone.ld_name,
|
|||
|
|
WalletAddressOkx.project_name == "capybara"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
if self.tonkeeper_add():
|
|||
|
|
logger.info(f"当前模拟器名字:{self.tg_phone.ld_name},tonkeeper绑定成功!!!")
|
|||
|
|
else:
|
|||
|
|
logger.info(f"当前模拟器名字:{self.tg_phone.ld_name},tonkeeper绑定失败!!!")
|
|||
|
|
return
|
|||
|
|
|
|||
|
|
self.open_project(url='https://t.me/the_capybara_meme_bot/start?startapp=477af0fa174bdccabb09662124ec5834')
|
|||
|
|
|
|||
|
|
# 链接打开后的tg检测检测
|
|||
|
|
if self.tg_testing():
|
|||
|
|
print("账号掉了!!!")
|
|||
|
|
return
|
|||
|
|
|
|||
|
|
# https://t.me/the_capybara_meme_bot/start?startapp=477af0fa174bdccabb09662124ec5834
|
|||
|
|
|
|||
|
|
self.d.xpath('//*[@text="Home"]').click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.xpath('//android.view.View/*[@text="Connect Wallet"]').click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.xpath('//*[@text="TON Wallet"]').click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
x_Y = match_image(d=self.d, template_path="images/capybara_tonkeeper.png", retry_times=5, threshold=0.8)
|
|||
|
|
if x_Y: self.d.click(x_Y[0][0], x_Y[0][1])
|
|||
|
|
|
|||
|
|
time.sleep(5)
|
|||
|
|
# self.d.xpath('//*[@text="连接钱包"]').click()
|
|||
|
|
x_Y = match_image(d=self.d, template_path="images/tonkeeper__.png", retry_times=5, threshold=0.8)
|
|||
|
|
if x_Y: self.d.click(x_Y[0][0], x_Y[0][1])
|
|||
|
|
|
|||
|
|
try:
|
|||
|
|
time.sleep(5)
|
|||
|
|
for i in range(2):
|
|||
|
|
for i in range(4):
|
|||
|
|
self.d.xpath('//*[@text="1"]').click()
|
|||
|
|
time.sleep(1)
|
|||
|
|
except:
|
|||
|
|
pass
|
|||
|
|
|
|||
|
|
self.wallet_okx.stast = 1
|
|||
|
|
self.wallet_okx.save()
|
|||
|
|
time.sleep(20)
|
|||
|
|
|
|||
|
|
@decorator
|
|||
|
|
def start_bot(self):
|
|||
|
|
|
|||
|
|
self.open_project(url="https://t.me/terminalgame_bot/terminalgame?startapp=B3GU504V&startApp=B3GU504V")
|
|||
|
|
|
|||
|
|
# 链接打开后的tg检测检测
|
|||
|
|
if self.tg_testing():
|
|||
|
|
print("账号掉了!!!")
|
|||
|
|
return
|
|||
|
|
|
|||
|
|
self.open_project(url="https://t.me/terminalgame_bot/terminalgame?startapp=B3GU504V&startApp=B3GU504V")
|
|||
|
|
time.sleep(10)
|
|||
|
|
|
|||
|
|
for i in range(10):
|
|||
|
|
self.d.click(441, 1466)
|
|||
|
|
time.sleep(5)
|
|||
|
|
|
|||
|
|
@decorator
|
|||
|
|
def paws_top(self):
|
|||
|
|
self.open_project(url="https://t.me/PAWSOG_bot/PAWS?startapp=7TeJz714")
|
|||
|
|
|
|||
|
|
# 链接打开后的tg检测检测
|
|||
|
|
if self.tg_testing():
|
|||
|
|
print("账号掉了!!!")
|
|||
|
|
return
|
|||
|
|
|
|||
|
|
self.open_project(url="https://t.me/PAWSOG_bot/PAWS?startapp=7TeJz714")
|
|||
|
|
time.sleep(5)
|
|||
|
|
|
|||
|
|
self.d.xpath('//*[@text="Earn"]').click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.click(433, 658)
|
|||
|
|
|
|||
|
|
import random
|
|||
|
|
|
|||
|
|
# 定义两个坐标
|
|||
|
|
x1, y1 = 735, 780
|
|||
|
|
x2, y2 = 812, 814
|
|||
|
|
|
|||
|
|
# 计算坐标差值
|
|||
|
|
dx = x2 - x1
|
|||
|
|
dy = y2 - y1
|
|||
|
|
|
|||
|
|
# 生成一个随机的权重,范围在 [0, 1]
|
|||
|
|
random_weight = random.random()
|
|||
|
|
|
|||
|
|
# 计算随机位置
|
|||
|
|
random_x = x1 + dx * random_weight
|
|||
|
|
random_y = y1 + dy * random_weight
|
|||
|
|
|
|||
|
|
# 将坐标转换为整数
|
|||
|
|
random_x = int(round(random_x))
|
|||
|
|
random_y = int(round(random_y))
|
|||
|
|
|
|||
|
|
time.sleep(25)
|
|||
|
|
self.d.click(random_x, random_y)
|
|||
|
|
time.sleep(25)
|
|||
|
|
|
|||
|
|
# 定义两个坐标
|
|||
|
|
x1, y1 = 742, 1200
|
|||
|
|
x2, y2 = 780, 1245
|
|||
|
|
|
|||
|
|
# 计算坐标差值
|
|||
|
|
dx = x2 - x1
|
|||
|
|
dy = y2 - y1
|
|||
|
|
|
|||
|
|
# 生成一个随机的权重,范围在 [0, 1]
|
|||
|
|
random_weight = random.random()
|
|||
|
|
|
|||
|
|
# 计算随机位置
|
|||
|
|
random_x = x1 + dx * random_weight
|
|||
|
|
random_y = y1 + dy * random_weight
|
|||
|
|
|
|||
|
|
# 将坐标转换为整数
|
|||
|
|
random_x = int(round(random_x))
|
|||
|
|
random_y = int(round(random_y))
|
|||
|
|
|
|||
|
|
self.d.click(random_x, random_y)
|
|||
|
|
time.sleep(25)
|
|||
|
|
|
|||
|
|
# self.open_project(url="https://t.me/PAWSOG_bot/PAWS?startapp=7TeJz714")
|
|||
|
|
#
|
|||
|
|
# # 链接打开后的tg检测检测
|
|||
|
|
# if self.tg_testing():
|
|||
|
|
# print("账号掉了!!!")
|
|||
|
|
# return
|
|||
|
|
#
|
|||
|
|
# self.d.xpath('//*[@text="Earn"]').click()
|
|||
|
|
# time.sleep(5)
|
|||
|
|
# for i in range(5):
|
|||
|
|
# self.open_project(url="https://t.me/PAWSOG_bot/PAWS?startapp=7TeJz714")
|
|||
|
|
#
|
|||
|
|
# if i == 0:
|
|||
|
|
# type1, ele = get_element(d=self.d, type1="xpath", grammar='//*[@text="Earn"]', timeout=50)
|
|||
|
|
# if type1:
|
|||
|
|
# time.sleep(10)
|
|||
|
|
# ele.click()
|
|||
|
|
# time.sleep(5)
|
|||
|
|
#
|
|||
|
|
# x_Y = match_image(d=self.d, template_path="images/paws_task_2.png", retry_times=5, threshold=0.8)
|
|||
|
|
# if x_Y: self.d.click(x_Y[0][0], x_Y[0][1])
|
|||
|
|
#
|
|||
|
|
# time.sleep(5)
|
|||
|
|
# x_Y = match_image(d=self.d, template_path="images/paws_start.png", retry_times=5, threshold=0.8)
|
|||
|
|
# if x_Y: self.d.click(x_Y[0][0], x_Y[0][1])
|
|||
|
|
# time.sleep(5)
|
|||
|
|
#
|
|||
|
|
# for i in range(5):
|
|||
|
|
# #
|
|||
|
|
# # # 模拟按返回键
|
|||
|
|
# # d.press("back")
|
|||
|
|
#
|
|||
|
|
# type1, ele = get_element(d=self.d, type1="xpath", grammar='//*[@text="Check"]', timeout=5)
|
|||
|
|
# if type1:
|
|||
|
|
# time.sleep(5)
|
|||
|
|
# ele.click()
|
|||
|
|
# type1, ele = get_element(d=self.d, type1="xpath", grammar='//*[@text="Claim"]', timeout=5)
|
|||
|
|
# if type1:
|
|||
|
|
# time.sleep(5)
|
|||
|
|
# ele.click()
|
|||
|
|
# time.sleep(5)
|
|||
|
|
|
|||
|
|
@decorator
|
|||
|
|
def sq(self):
|
|||
|
|
self.d.xpath('//*[@text="Telegram"]').click()
|
|||
|
|
|
|||
|
|
# 链接打开后的tg检测检测
|
|||
|
|
if self.tg_testing():
|
|||
|
|
print("账号掉了!!!")
|
|||
|
|
return True
|
|||
|
|
|
|||
|
|
self.d.xpath('//*[@content-desc="Search"]').set_text('telegram')
|
|||
|
|
|
|||
|
|
self.d.xpath('//*[@text="Telegram, Verified\n, support"]').click()
|
|||
|
|
|
|||
|
|
self.d.xpath('//*[@text="Confirm"]').click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
|
|||
|
|
@decorator
|
|||
|
|
def paws_satrt(self):
|
|||
|
|
|
|||
|
|
self.d.app_uninstall("com.okinc.okex.gp")
|
|||
|
|
|
|||
|
|
self.open_project(url="https://t.me/PAWSOG_bot/PAWS?startapp=7TeJz714")
|
|||
|
|
# 链接打开后的tg检测检测
|
|||
|
|
if self.tg_testing():
|
|||
|
|
print("账号掉了!!!")
|
|||
|
|
return True
|
|||
|
|
|
|||
|
|
logger.info(f"账号ID:{self.tg_phone.id},检测完成!!!")
|
|||
|
|
|
|||
|
|
type1, ele = get_element(d=self.d, type1="xpath", grammar='//*[@text="Earn"]', timeout=50)
|
|||
|
|
if type1:
|
|||
|
|
time.sleep(5)
|
|||
|
|
ele.click()
|
|||
|
|
|
|||
|
|
try:
|
|||
|
|
x_Y = match_image(d=self.d, template_path="images/paws_task_claim.png", retry_times=5, threshold=0.8)
|
|||
|
|
x_start = get_x_y(coordinate=x_Y[0][0], x=0, y=25)
|
|||
|
|
y_start = get_x_y(coordinate=x_Y[0][1], x=0, y=10)
|
|||
|
|
if x_Y: self.d.click(x_start, y_start)
|
|||
|
|
except:
|
|||
|
|
pass
|
|||
|
|
|
|||
|
|
try:
|
|||
|
|
x_Y = match_image(d=self.d, template_path="images/paws_task_start1.png", retry_times=5, threshold=0.8)
|
|||
|
|
x_start = get_x_y(coordinate=x_Y[0][0], x=0, y=25)
|
|||
|
|
y_start = get_x_y(coordinate=x_Y[0][1], x=0, y=10)
|
|||
|
|
if x_Y: self.d.click(x_start, y_start)
|
|||
|
|
|
|||
|
|
time.sleep(5)
|
|||
|
|
# self.d.xpath('//*[@content-desc="Web tabs PAWS"]').click()
|
|||
|
|
x_Y = match_image(d=self.d, template_path="images/paws_task_claim.png", retry_times=5, threshold=0.8)
|
|||
|
|
x_start = get_x_y(coordinate=x_Y[0][0], x=0, y=25)
|
|||
|
|
y_start = get_x_y(coordinate=x_Y[0][1], x=0, y=10)
|
|||
|
|
if x_Y: self.d.click(x_start, y_start)
|
|||
|
|
|
|||
|
|
except:
|
|||
|
|
pass
|
|||
|
|
|
|||
|
|
# try:
|
|||
|
|
# x_Y = match_image(d=self.d, template_path="images/paws_task_start.png", retry_times=5, threshold=0.8)
|
|||
|
|
# x_start = get_x_y(coordinate=x_Y[0][0], x=0, y=25)
|
|||
|
|
# y_start = get_x_y(coordinate=x_Y[0][1], x=0, y=10)
|
|||
|
|
# if x_Y: self.d.click(x_start, y_start)
|
|||
|
|
# except:
|
|||
|
|
# pass
|
|||
|
|
#
|
|||
|
|
# try:
|
|||
|
|
# x_Y = match_image(d=self.d, template_path="images/paws_task_claim.png", retry_times=5, threshold=0.8)
|
|||
|
|
# x_start = get_x_y(coordinate=x_Y[0][0], x=0, y=25)
|
|||
|
|
# y_start = get_x_y(coordinate=x_Y[0][1], x=0, y=10)
|
|||
|
|
# if x_Y: self.d.click(x_start, y_start)
|
|||
|
|
# except:
|
|||
|
|
# pass
|
|||
|
|
#
|
|||
|
|
# time.sleep(10)
|
|||
|
|
# x_Y = match_image(d=self.d, template_path="images/paws_task_partners.png", retry_times=5, threshold=0.8)
|
|||
|
|
# if x_Y: self.d.click(x_Y[0][0], x_Y[0][1])
|
|||
|
|
# x_Y = match_image(d=self.d, template_path="images/paws_task_start1.png", retry_times=5, threshold=0.8)
|
|||
|
|
# x_start = get_x_y(coordinate=x_Y[0][0], x=0, y=25)
|
|||
|
|
# y_start = get_x_y(coordinate=x_Y[0][1], x=0, y=10)
|
|||
|
|
# if x_Y: self.d.click(x_start, y_start)
|
|||
|
|
# time.sleep(5)
|
|||
|
|
# self.d.xpath('//*[@text="Start"]').click()
|
|||
|
|
# time.sleep(5)
|
|||
|
|
# try:
|
|||
|
|
# self.d.xpath('//*[@text="Continue"]').click()
|
|||
|
|
# self.d.xpath('//*[@text="Claim 50 crystal"]').click()
|
|||
|
|
# self.d.xpath('//*[@text="Get points"]').click()
|
|||
|
|
# self.d.xpath('//*[@text="Yes, continue"]').click()
|
|||
|
|
# except:
|
|||
|
|
# pass
|
|||
|
|
#
|
|||
|
|
# time.sleep(25)
|
|||
|
|
# self.d.xpath('//*[@content-desc="Go back"]').click()
|
|||
|
|
# x_Y = match_image(d=self.d, template_path="images/paws_task_check.png", retry_times=5, threshold=0.8)
|
|||
|
|
# x_start = get_x_y(coordinate=x_Y[0][0], x=0, y=25)
|
|||
|
|
# y_start = get_x_y(coordinate=x_Y[0][1], x=0, y=10)
|
|||
|
|
# if x_Y: self.d.click(x_start, y_start)
|
|||
|
|
# time.sleep(10)
|
|||
|
|
# x_Y = match_image(d=self.d, template_path="images/paws_task_claim.png", retry_times=5, threshold=0.8)
|
|||
|
|
# x_start = get_x_y(coordinate=x_Y[0][0], x=0, y=25)
|
|||
|
|
# y_start = get_x_y(coordinate=x_Y[0][1], x=0, y=10)
|
|||
|
|
# if x_Y: self.d.click(x_start, y_start)
|
|||
|
|
|
|||
|
|
time.sleep(25)
|
|||
|
|
|
|||
|
|
@decorator
|
|||
|
|
def zoo_wallet(self):
|
|||
|
|
|
|||
|
|
self.wallet_okx = WalletAddressOkx.get_or_none(
|
|||
|
|
# WalletAddressOkx.tg_id == self.tg_phone.id,
|
|||
|
|
WalletAddressOkx.ld_name == self.tg_phone.ld_name,
|
|||
|
|
WalletAddressOkx.project_name == "blum"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
if self.tonkeeper_add():
|
|||
|
|
logger.info(f"当前模拟器名字:{self.tg_phone.ld_name},tonkeeper绑定成功!!!")
|
|||
|
|
else:
|
|||
|
|
logger.info(f"当前模拟器名字:{self.tg_phone.ld_name},tonkeeper绑定失败!!!")
|
|||
|
|
return
|
|||
|
|
|
|||
|
|
self.open_project(url='https://t.me/zoo_story_bot/game?startapp=ref5660836163')
|
|||
|
|
|
|||
|
|
# 链接打开后的tg检测检测
|
|||
|
|
if self.tg_testing():
|
|||
|
|
print("账号掉了!!!")
|
|||
|
|
return
|
|||
|
|
|
|||
|
|
for i in range(15):
|
|||
|
|
# //*[@text="下一步"]
|
|||
|
|
type1, ele = get_element(d=self.d, type1="xpath", grammar='//*[@text="下一步"]', timeout=1)
|
|||
|
|
if type1:
|
|||
|
|
time.sleep(5)
|
|||
|
|
ele.click()
|
|||
|
|
|
|||
|
|
time.sleep(1)
|
|||
|
|
x_Y = match_image(d=self.d, template_path="images/zoo_1.png", retry_times=5, threshold=0.8)
|
|||
|
|
if x_Y: self.d.click(x_Y[0][0], x_Y[0][1])
|
|||
|
|
|
|||
|
|
time.sleep(1)
|
|||
|
|
x_Y = match_image(d=self.d, template_path="images/zoo_2.png", retry_times=5, threshold=0.8)
|
|||
|
|
if x_Y: self.d.click(x_Y[0][0], x_Y[0][1])
|
|||
|
|
|
|||
|
|
self.d.xpath('(//android.widget.Button)[last()]').click()
|
|||
|
|
self.d.xpath('//*[@text="Airdrop"]').click()
|
|||
|
|
|
|||
|
|
time.sleep(5)
|
|||
|
|
x_Y = match_image(d=self.d, template_path="images/zoo_wallet.png", retry_times=5, threshold=0.8)
|
|||
|
|
if x_Y: self.d.click(x_Y[0][0], x_Y[0][1])
|
|||
|
|
|
|||
|
|
x_Y = match_image(d=self.d, template_path="images/zoo_wallet_1.png", retry_times=5, threshold=0.8)
|
|||
|
|
if x_Y: self.d.click(x_Y[0][0], x_Y[0][1])
|
|||
|
|
|
|||
|
|
time.sleep(5)
|
|||
|
|
x_Y = match_image(d=self.d, template_path="images/zoo_tonkeeper.png", retry_times=5, threshold=0.8)
|
|||
|
|
if x_Y: self.d.click(x_Y[0][0], x_Y[0][1])
|
|||
|
|
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.xpath('//*[@text="连接钱包"]').click()
|
|||
|
|
|
|||
|
|
time.sleep(10)
|
|||
|
|
|
|||
|
|
self.tg_zoo_info = TgZoo.get_or_none(TgZoo.phone == self.tg_phone.ld_name)
|
|||
|
|
if self.tg_zoo_info:
|
|||
|
|
self.tg_zoo_info.wallet_id = self.wallet_okx.id
|
|||
|
|
self.tg_zoo_info.save(only=[TgZoo.wallet_id])
|
|||
|
|
|
|||
|
|
@decorator
|
|||
|
|
def tg_confirm(self):
|
|||
|
|
|
|||
|
|
try:
|
|||
|
|
self.d.xpath('//*[@text="Telegram"]').click()
|
|||
|
|
|
|||
|
|
# 链接打开后的tg检测检测
|
|||
|
|
if self.tg_testing():
|
|||
|
|
print("账号掉了!!!")
|
|||
|
|
return
|
|||
|
|
else:
|
|||
|
|
print("检查完成,账号正常!!!")
|
|||
|
|
|
|||
|
|
for i in range(10):
|
|||
|
|
type1, ele = get_element(d=self.d, type1="xpath", grammar='//*[@text="Continue"]', timeout=0.1)
|
|||
|
|
if type1:
|
|||
|
|
ele.click()
|
|||
|
|
|
|||
|
|
type1, ele = get_element(d=self.d, type1="xpath", grammar='//*[@text="允许"]', timeout=0.1)
|
|||
|
|
if type1:
|
|||
|
|
ele.click()
|
|||
|
|
|
|||
|
|
type1, ele = get_element(d=self.d, type1="xpath", grammar='//*[@text="允许"]', timeout=0.1)
|
|||
|
|
if type1:
|
|||
|
|
ele.click()
|
|||
|
|
|
|||
|
|
type1, ele = get_element(d=self.d, type1="xpath", grammar='//*[@text="OK"]', timeout=0.1)
|
|||
|
|
if type1:
|
|||
|
|
ele.click()
|
|||
|
|
|
|||
|
|
self.d.xpath('//*[@content-desc="Search"]').set_text('telegram')
|
|||
|
|
time.sleep(5)
|
|||
|
|
|
|||
|
|
try:
|
|||
|
|
self.d.xpath('//*[@text="Telegram, Verified\n, support"]').click()
|
|||
|
|
except Exception as e:
|
|||
|
|
self.d.xpath('//*[@text="Telegram Notifications, Verified\n, support"]').click()
|
|||
|
|
|
|||
|
|
for i in range(5):
|
|||
|
|
swipe_up(d=self.d, start_y1=0.8, end_y1=0.3, duration=0.1)
|
|||
|
|
time.sleep(5)
|
|||
|
|
|
|||
|
|
for i in range(5):
|
|||
|
|
type1, ele = get_element(d=self.d, type1="xpath", grammar='//*[@text="Confirm"]', timeout=0.1)
|
|||
|
|
if type1:
|
|||
|
|
ele.click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
|
|||
|
|
time.sleep(5)
|
|||
|
|
|
|||
|
|
return True
|
|||
|
|
except Exception as e:
|
|||
|
|
print(e)
|
|||
|
|
|
|||
|
|
return False
|
|||
|
|
|
|||
|
|
@decorator
|
|||
|
|
def sen_bot(self):
|
|||
|
|
|
|||
|
|
self.d.open_url(url="https://t.me/bandit_quest_verification_bot")
|
|||
|
|
|
|||
|
|
type1, ele = get_element(d=self.d, type1="xpath", grammar='//*[@text="开始"]', timeout=50)
|
|||
|
|
if type1: # 有就删除,再安装
|
|||
|
|
self.d.app_uninstall("com.okinc.okex.gp")
|
|||
|
|
|
|||
|
|
self.d.send_keys('/connect <YOUR_WALLET_ADDRESS>')
|
|||
|
|
self.d.xpath('//*[@content-desc="发送"]').click()
|
|||
|
|
|
|||
|
|
@decorator
|
|||
|
|
def blum_tx1(self, blum_type):
|
|||
|
|
|
|||
|
|
# if self.tonkeeper_add():
|
|||
|
|
# logger.info(f"当前模拟器名字:{self.tg_phone.ld_name},tonkeeper绑定成功!!!")
|
|||
|
|
# else:
|
|||
|
|
# logger.info(f"当前模拟器名字:{self.tg_phone.ld_name},tonkeeper绑定失败!!!")
|
|||
|
|
# return
|
|||
|
|
#
|
|||
|
|
# self.open_project(url='https://t.me/blum/app')
|
|||
|
|
#
|
|||
|
|
# # 链接打开后的tg检测检测
|
|||
|
|
# if self.tg_testing():
|
|||
|
|
# print("账号掉了!!!")
|
|||
|
|
# return
|
|||
|
|
#
|
|||
|
|
# self.d.xpath('//*[@text="Wallet"]').click()
|
|||
|
|
# self.d.xpath('//*[@text="Arrow down"]').click()
|
|||
|
|
# self.d.xpath('//*[@text="Disconnect"]').click()
|
|||
|
|
# self.d.xpath('//*[@text="Connect wallet"]').click()
|
|||
|
|
# self.d.xpath('//*[@text="Tonkeeper"]').click()
|
|||
|
|
#
|
|||
|
|
# time.sleep(5)
|
|||
|
|
# # self.d.xpath('//*[@text="连接钱包"]').click()
|
|||
|
|
# x_Y = match_image(d=self.d, template_path="images/tonkeeper__.png", retry_times=5, threshold=0.8)
|
|||
|
|
# if x_Y: self.d.click(x_Y[0][0], x_Y[0][1])
|
|||
|
|
#
|
|||
|
|
# try:
|
|||
|
|
# time.sleep(5)
|
|||
|
|
# for i in range(2):
|
|||
|
|
# for i in range(4):
|
|||
|
|
# self.d.xpath('//*[@text="1"]').click()
|
|||
|
|
# time.sleep(1)
|
|||
|
|
# except:
|
|||
|
|
# pass
|
|||
|
|
|
|||
|
|
self.d.open_url("https://t.me/BlumCryptoTradingBot")
|
|||
|
|
|
|||
|
|
time.sleep(30)
|
|||
|
|
type1, ele = get_element(self.d, type1="xpath", grammar='//*[@text="Remind me later"]', timeout=5)
|
|||
|
|
if type1:
|
|||
|
|
ele.click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
|
|||
|
|
if blum_type:
|
|||
|
|
|
|||
|
|
type1, ele = get_element(self.d, type1="xpath", grammar='//*[@text="START"]', timeout=5) # 等待tg打开
|
|||
|
|
if type1:
|
|||
|
|
ele.click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
|
|||
|
|
type1, ele = get_element(self.d, type1="xpath", grammar='(//*[@text="AGREE & CONTINUE"])[last()]',
|
|||
|
|
timeout=5) # 等待tg打开
|
|||
|
|
if type1:
|
|||
|
|
ele.click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
else:
|
|||
|
|
type1, ele = get_element(self.d, type1="xpath", grammar='(//*[@text="同意"])[last()]',
|
|||
|
|
timeout=1) # 等待tg打开
|
|||
|
|
if type1:
|
|||
|
|
ele.click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
|
|||
|
|
self.d.xpath('//*[@text="Message"]').set_text('/start')
|
|||
|
|
time.sleep(5)
|
|||
|
|
x_y = find_img(d=self.d, timeout=1, retry=10, template_path="images/tg_send.png")
|
|||
|
|
if x_y:
|
|||
|
|
self.d.click(x_y[0], x_y[1])
|
|||
|
|
|
|||
|
|
time.sleep(5)
|
|||
|
|
type1, ele = get_element(self.d, type1="xpath", grammar='//*[@text=".. BUY • .. SELL"]',
|
|||
|
|
timeout=5) # 等待tg打开
|
|||
|
|
if not type1:
|
|||
|
|
self.d.xpath('//*[@text="Settings"]').click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
|
|||
|
|
type1, ele = get_element(self.d, type1="xpath", grammar='(//*[@text=".. Language"])[last()]',
|
|||
|
|
timeout=1) # 等待tg打开
|
|||
|
|
if type1:
|
|||
|
|
ele.click()
|
|||
|
|
type1, ele = get_element(self.d, type1="xpath", grammar='(//*[@text=".. 语言"])[last()]',
|
|||
|
|
timeout=1) # 等待tg打开
|
|||
|
|
if type1:
|
|||
|
|
ele.click()
|
|||
|
|
type1, ele = get_element(self.d, type1="xpath", grammar='(//*[@text="语言"])[last()]',
|
|||
|
|
timeout=1) # 等待tg打开
|
|||
|
|
if type1:
|
|||
|
|
ele.click()
|
|||
|
|
type1, ele = get_element(self.d, type1="xpath", grammar='(//*[@text="Language"])[last()]',
|
|||
|
|
timeout=1) # 等待tg打开
|
|||
|
|
if type1:
|
|||
|
|
ele.click()
|
|||
|
|
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.xpath('//*[@text="English"]').click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.xpath('//*[@text="Message"]').set_text('/start')
|
|||
|
|
time.sleep(5)
|
|||
|
|
x_y = find_img(d=self.d, timeout=1, retry=10, template_path="images/tg_send.png")
|
|||
|
|
if x_y:
|
|||
|
|
self.d.click(x_y[0], x_y[1])
|
|||
|
|
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.xpath('//*[@text="Wallet"]').click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.xpath('//*[@text="TON wallet"]').click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.xpath('(//*[@text="Import wallet"])[last()]').click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.xpath('//*[@text="CONFIRM"]').click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.send_keys(self.blum_tx.text)
|
|||
|
|
time.sleep(5)
|
|||
|
|
x_y = find_img(d=self.d, timeout=1, retry=10, template_path="images/tg_send.png")
|
|||
|
|
if x_y:
|
|||
|
|
self.d.click(x_y[0], x_y[1])
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.xpath('//*[@text="V4R2"]').click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
|
|||
|
|
self.d.xpath('//*[@text="Message"]').set_text('/start')
|
|||
|
|
time.sleep(5)
|
|||
|
|
x_y = find_img(d=self.d, timeout=1, retry=10, template_path="images/tg_send.png")
|
|||
|
|
if x_y:
|
|||
|
|
self.d.click(x_y[0], x_y[1])
|
|||
|
|
time.sleep(5)
|
|||
|
|
|
|||
|
|
self.d.xpath('//*[@text=".. BUY • .. SELL"]').click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.xpath('//*[@text=".. Token lists"]').click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.xpath('//*[@text="❤️.. Blum hot"]').click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.xpath('//*[@text="1️⃣ FPIBANK"]').click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
|
|||
|
|
if "3%" not in self.d.xpath('//*[contains(@text, "Slippage")]').get_text():
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.xpath('//*[contains(@text, "Slippage")]').click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.xpath('//*[@text="Message"]').set_text('3')
|
|||
|
|
time.sleep(5)
|
|||
|
|
x_y = find_img(d=self.d, timeout=1, retry=10, template_path="images/tg_send.png")
|
|||
|
|
if x_y:
|
|||
|
|
self.d.click(x_y[0], x_y[1])
|
|||
|
|
|
|||
|
|
time.sleep(5)
|
|||
|
|
if "10 TON" not in self.d.xpath('//*[contains(@text, "Buy amount")]').get_text():
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.xpath('(//*[contains(@text, "Buy amount")])[last()]').click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
random_num = round(random.uniform(0.1, 0.2), 2)
|
|||
|
|
self.d.xpath('//*[@text="Message"]').set_text(str(random_num))
|
|||
|
|
time.sleep(5)
|
|||
|
|
x_y = find_img(d=self.d, timeout=1, retry=10, template_path="images/tg_send.png")
|
|||
|
|
if x_y:
|
|||
|
|
self.d.click(x_y[0], x_y[1])
|
|||
|
|
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.xpath('//*[@text="BUY"]').click()
|
|||
|
|
|
|||
|
|
for i in range(50):
|
|||
|
|
if self.process_item():
|
|||
|
|
time.sleep(5)
|
|||
|
|
break
|
|||
|
|
|
|||
|
|
time.sleep(5)
|
|||
|
|
|
|||
|
|
self.blum_sell()
|
|||
|
|
|
|||
|
|
if self.blum_tx.tx_num:
|
|||
|
|
self.blum_tx.tx_num += 1
|
|||
|
|
else:
|
|||
|
|
self.blum_tx.tx_num = 1
|
|||
|
|
|
|||
|
|
self.blum_tx.tx_start = 1
|
|||
|
|
self.blum_tx.save()
|
|||
|
|
|
|||
|
|
def process_item(self, ):
|
|||
|
|
data = get_jettons(address=self.blum_tx.address)
|
|||
|
|
|
|||
|
|
if not data:
|
|||
|
|
return
|
|||
|
|
|
|||
|
|
if data:
|
|||
|
|
data = [item for item in data if
|
|||
|
|
item.get("name") != "Locked TON" and item.get("name") != "TON Activity Reward"]
|
|||
|
|
|
|||
|
|
has_non_zero = any(item['balance'] != 0 for item in data)
|
|||
|
|
if has_non_zero:
|
|||
|
|
return True
|
|||
|
|
return False
|
|||
|
|
|
|||
|
|
def blum_sell(self):
|
|||
|
|
|
|||
|
|
# self.d.open_url("https://t.me/BlumCryptoTradingBot")
|
|||
|
|
#
|
|||
|
|
# time.sleep(25)
|
|||
|
|
# type1, ele = get_element(self.d, type1="xpath", grammar='//*[@text="Remind me later"]', timeout=5)
|
|||
|
|
# if type1: ele.click()
|
|||
|
|
# time.sleep(5)
|
|||
|
|
self.d.xpath('//*[@text="Message"]').set_text('/start')
|
|||
|
|
time.sleep(5)
|
|||
|
|
x_y = find_img(d=self.d, timeout=1, retry=10, template_path="images/tg_send.png")
|
|||
|
|
if x_y:
|
|||
|
|
self.d.click(x_y[0], x_y[1])
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.xpath('(//*[@text=".. Positions"])[last()]').click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.xpath('(//*[@text="FPIBANK"])[last()]').click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
|
|||
|
|
if "3%" not in self.d.xpath('//*[contains(@text, "Slippage")]').get_text():
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.xpath('(//*[contains(@text, "Slippage")])[last()]').click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
self.d.xpath('//*[@text="Message"]').set_text('3')
|
|||
|
|
time.sleep(5)
|
|||
|
|
x_y = find_img(d=self.d, timeout=1, retry=10, template_path="images/tg_send.png")
|
|||
|
|
if x_y:
|
|||
|
|
self.d.click(x_y[0], x_y[1])
|
|||
|
|
time.sleep(5)
|
|||
|
|
|
|||
|
|
self.d.xpath('(//*[@text="SELL"])[last()]').click()
|
|||
|
|
|
|||
|
|
time.sleep(25)
|
|||
|
|
|
|||
|
|
def blum_action(self):
|
|||
|
|
|
|||
|
|
self.blum_tx = BlumTx.get_or_none(
|
|||
|
|
BlumTx.phone == self.tg_phone.ld_name,
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
logger.info(f'电话号码:{self.tg_phone.ld_name},开始查询地址是否有代币!!!')
|
|||
|
|
if self.process_item():
|
|||
|
|
logger.info(f'电话号码:{self.tg_phone.ld_name},地址有代币!!!')
|
|||
|
|
self.blum_tx1(blum_type=0)
|
|||
|
|
else:
|
|||
|
|
logger.info(f'电话号码:{self.tg_phone.ld_name},地址没有代币!!!')
|
|||
|
|
|
|||
|
|
self.blum_tx1(blum_type=1)
|
|||
|
|
|
|||
|
|
# if not self.blum_tx.tx_start:
|
|||
|
|
# self.blum_tx1(blum_type=1)
|
|||
|
|
# else:
|
|||
|
|
# logger.info(f'电话号码:{self.tg_phone.ld_name},已做过交易跳过!!!')
|
|||
|
|
|
|||
|
|
return
|
|||
|
|
|
|||
|
|
@decorator
|
|||
|
|
def game_wallet(self):
|
|||
|
|
|
|||
|
|
self.wallet_okx = WalletAddressOkx.get_or_none(
|
|||
|
|
WalletAddressOkx.tg_id == self.tg_phone.id,
|
|||
|
|
WalletAddressOkx.ld_name == self.tg_phone.ld_name,
|
|||
|
|
WalletAddressOkx.project_name == "gameness"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
if self.tonkeeper_add():
|
|||
|
|
logger.info(f"当前模拟器名字:{self.tg_phone.ld_name},tonkeeper绑定成功!!!")
|
|||
|
|
else:
|
|||
|
|
logger.info(f"当前模拟器名字:{self.tg_phone.ld_name},tonkeeper绑定失败!!!")
|
|||
|
|
return
|
|||
|
|
|
|||
|
|
self.open_project(url='https://t.me/GamenessBot/app?startapp=ref_qBSlye')
|
|||
|
|
|
|||
|
|
# 链接打开后的tg检测检测
|
|||
|
|
if self.tg_testing():
|
|||
|
|
print("账号掉了!!!")
|
|||
|
|
return
|
|||
|
|
|
|||
|
|
for i in range(3):
|
|||
|
|
type1, ele = get_element(self.d, type1="xpath", grammar='//*[@text="Continue"]', timeout=3) # 等待tg打开
|
|||
|
|
if type1:
|
|||
|
|
ele.click()
|
|||
|
|
|
|||
|
|
time.sleep(3)
|
|||
|
|
self.d.xpath('//*[@text="Wallet"]').click()
|
|||
|
|
time.sleep(3)
|
|||
|
|
self.d.xpath('//*[@text="Connect Wallet"]').click()
|
|||
|
|
|
|||
|
|
x_Y = match_image(d=self.d, template_path="images/game_tonkeepper.png", retry_times=5, threshold=0.8)
|
|||
|
|
if x_Y: self.d.click(x_Y[0][0], x_Y[0][1])
|
|||
|
|
|
|||
|
|
time.sleep(5)
|
|||
|
|
type1, ele = get_element(d=self.d, type1="xpath", grammar='//*[@text="Tonkeeper"]', timeout=5)
|
|||
|
|
if type1:
|
|||
|
|
ele.click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
type1, ele = get_element(d=self.d, type1="xpath", grammar='//*[@text="始终"]', timeout=5)
|
|||
|
|
if type1:
|
|||
|
|
ele.click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
|
|||
|
|
time.sleep(5)
|
|||
|
|
# self.d.xpath('//*[@text="连接钱包"]').click()
|
|||
|
|
x_Y = match_image(d=self.d, template_path="images/tonkeeper__.png", retry_times=5, threshold=0.8)
|
|||
|
|
if x_Y: self.d.click(x_Y[0][0], x_Y[0][1])
|
|||
|
|
|
|||
|
|
try:
|
|||
|
|
time.sleep(5)
|
|||
|
|
for i in range(2):
|
|||
|
|
for i in range(4):
|
|||
|
|
self.d.xpath('//*[@text="1"]').click()
|
|||
|
|
time.sleep(1)
|
|||
|
|
except:
|
|||
|
|
pass
|
|||
|
|
|
|||
|
|
self.wallet_okx.stast = 1
|
|||
|
|
self.wallet_okx.save()
|
|||
|
|
time.sleep(20)
|
|||
|
|
|
|||
|
|
@decorator
|
|||
|
|
def goat_wallet(self):
|
|||
|
|
|
|||
|
|
self.wallet_okx = WalletAddressOkx.get_or_none(
|
|||
|
|
WalletAddressOkx.tg_id == self.tg_phone.id,
|
|||
|
|
WalletAddressOkx.ld_name == self.tg_phone.ld_name,
|
|||
|
|
WalletAddressOkx.project_name == "goatgamingbot"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
if self.tonkeeper_add():
|
|||
|
|
logger.info(f"当前模拟器名字:{self.tg_phone.ld_name},tonkeeper绑定成功!!!")
|
|||
|
|
else:
|
|||
|
|
logger.info(f"当前模拟器名字:{self.tg_phone.ld_name},tonkeeper绑定失败!!!")
|
|||
|
|
return
|
|||
|
|
|
|||
|
|
self.open_project(url='https://t.me/goatgamingbot/goatgaming?startapp=ref_R3LBGZCSF')
|
|||
|
|
|
|||
|
|
# 链接打开后的tg检测检测
|
|||
|
|
if self.tg_testing():
|
|||
|
|
print("账号掉了!!!")
|
|||
|
|
return
|
|||
|
|
|
|||
|
|
time.sleep(60)
|
|||
|
|
x_Y = match_image(d=self.d, template_path="images/goat_task1.png", retry_times=5, threshold=0.8)
|
|||
|
|
if x_Y: self.d.click(x_Y[0][0], x_Y[0][1])
|
|||
|
|
|
|||
|
|
time.sleep(5)
|
|||
|
|
|
|||
|
|
x_Y = match_image(d=self.d, template_path="images/goat_x.png", retry_times=5, threshold=0.8)
|
|||
|
|
if x_Y: self.d.click(x_Y[0][0], x_Y[0][1])
|
|||
|
|
|
|||
|
|
type1, ele = get_element(self.d, type1="xpath", grammar='//*[@text="S3 SNAPSHOT SOON"]', timeout=5)
|
|||
|
|
if type1: # 点开过+
|
|||
|
|
self.d.xpath('(//android.widget.Button)[5]').click()
|
|||
|
|
|
|||
|
|
type1, ele = get_element(self.d, type1="xpath", grammar='//*[@text="WIN US$1,000+ ON JACKPOTS!"]', timeout=5)
|
|||
|
|
if type1: # 点开过+
|
|||
|
|
self.d.xpath('(//android.widget.Button)[5]').click()
|
|||
|
|
|
|||
|
|
type1, ele = get_element(self.d, type1="xpath", grammar='//*[@text="CHECK OUT REFERRALS"]', timeout=5)
|
|||
|
|
if type1: # 点开过+
|
|||
|
|
self.d.xpath('(//android.widget.Button)[5]').click()
|
|||
|
|
type1, ele = get_element(self.d, type1="xpath", grammar='//*[@text="BOOST $GG TGE ALLOCATION"]', timeout=5)
|
|||
|
|
if type1: # 点开过+
|
|||
|
|
self.d.xpath('(//android.widget.Button)[5]').click()
|
|||
|
|
type1, ele = get_element(self.d, type1="xpath", grammar='//*[@text="BOOST YOUR XP GAIN"]', timeout=5)
|
|||
|
|
if type1: # 点开过+
|
|||
|
|
self.d.xpath('(//android.widget.Button)[5]').click()
|
|||
|
|
|
|||
|
|
time.sleep(10)
|
|||
|
|
self.d.click(843, 196)
|
|||
|
|
|
|||
|
|
time.sleep(5)
|
|||
|
|
x_Y = match_image(d=self.d, template_path="images/goat_connect_ton.png", retry_times=5, threshold=0.8)
|
|||
|
|
if x_Y: self.d.click(x_Y[0][0], x_Y[0][1])
|
|||
|
|
|
|||
|
|
time.sleep(5)
|
|||
|
|
x_Y = match_image(d=self.d, template_path="images/goat_ton.png", retry_times=5, threshold=0.8)
|
|||
|
|
if x_Y: self.d.click(x_Y[0][0], x_Y[0][1])
|
|||
|
|
|
|||
|
|
time.sleep(5)
|
|||
|
|
type1, ele = get_element(d=self.d, type1="xpath", grammar='//*[@text="Tonkeeper"]', timeout=5)
|
|||
|
|
if type1:
|
|||
|
|
ele.click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
type1, ele = get_element(d=self.d, type1="xpath", grammar='//*[@text="始终"]', timeout=5)
|
|||
|
|
if type1:
|
|||
|
|
ele.click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
|
|||
|
|
time.sleep(5)
|
|||
|
|
# self.d.xpath('//*[@text="连接钱包"]').click()
|
|||
|
|
x_Y = match_image(d=self.d, template_path="images/tonkeeper__.png", retry_times=5, threshold=0.8)
|
|||
|
|
if x_Y:
|
|||
|
|
self.d.click(x_Y[0][0], x_Y[0][1])
|
|||
|
|
|
|||
|
|
try:
|
|||
|
|
time.sleep(5)
|
|||
|
|
for i in range(2):
|
|||
|
|
for i in range(4):
|
|||
|
|
self.d.xpath('//*[@text="1"]').click()
|
|||
|
|
time.sleep(1)
|
|||
|
|
except:
|
|||
|
|
pass
|
|||
|
|
|
|||
|
|
self.wallet_okx.stast = 1
|
|||
|
|
self.wallet_okx.save()
|
|||
|
|
time.sleep(20)
|
|||
|
|
|
|||
|
|
@decorator
|
|||
|
|
def ducks_wallet(self):
|
|||
|
|
self.wallet_okx = WalletAddressOkx.get_or_none(
|
|||
|
|
# WalletAddressOkx.tg_id == self.tg_phone.id,
|
|||
|
|
WalletAddressOkx.ld_name == self.tg_phone.ld_name,
|
|||
|
|
WalletAddressOkx.project_name == "ducks"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
if self.tonkeeper_add():
|
|||
|
|
logger.info(f"当前模拟器名字:{self.tg_phone.ld_name},tonkeeper绑定成功!!!")
|
|||
|
|
else:
|
|||
|
|
logger.info(f"当前模拟器名字:{self.tg_phone.ld_name},tonkeeper绑定失败!!!")
|
|||
|
|
return
|
|||
|
|
|
|||
|
|
self.open_project(url='https://t.me/duckscoop_bot/app?startapp=HowrUJpa40')
|
|||
|
|
|
|||
|
|
# 链接打开后的tg检测检测
|
|||
|
|
if self.tg_testing():
|
|||
|
|
print("账号掉了!!!")
|
|||
|
|
return
|
|||
|
|
|
|||
|
|
# time.sleep(30)
|
|||
|
|
self.d.xpath('//*[@text="Connect TON Wallet"]').click()
|
|||
|
|
|
|||
|
|
time.sleep(5)
|
|||
|
|
x_Y = match_image(d=self.d, template_path="images/goat_ton.png", retry_times=5, threshold=0.8)
|
|||
|
|
if x_Y: self.d.click(x_Y[0][0], x_Y[0][1])
|
|||
|
|
|
|||
|
|
time.sleep(5)
|
|||
|
|
type1, ele = get_element(d=self.d, type1="xpath", grammar='//*[@text="Tonkeeper"]', timeout=5)
|
|||
|
|
if type1:
|
|||
|
|
ele.click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
type1, ele = get_element(d=self.d, type1="xpath", grammar='//*[@text="始终"]', timeout=5)
|
|||
|
|
if type1:
|
|||
|
|
ele.click()
|
|||
|
|
time.sleep(5)
|
|||
|
|
|
|||
|
|
time.sleep(5)
|
|||
|
|
# self.d.xpath('//*[@text="连接钱包"]').click()
|
|||
|
|
x_Y = match_image(d=self.d, template_path="images/tonkeeper__.png", retry_times=5, threshold=0.8)
|
|||
|
|
if x_Y:
|
|||
|
|
self.d.click(x_Y[0][0], x_Y[0][1])
|
|||
|
|
|
|||
|
|
try:
|
|||
|
|
time.sleep(5)
|
|||
|
|
for i in range(2):
|
|||
|
|
for i in range(4):
|
|||
|
|
self.d.xpath('//*[@text="1"]').click()
|
|||
|
|
time.sleep(1)
|
|||
|
|
except:
|
|||
|
|
pass
|
|||
|
|
|
|||
|
|
self.wallet_okx.stast = 1
|
|||
|
|
self.wallet_okx.save()
|
|||
|
|
time.sleep(20)
|
|||
|
|
|
|||
|
|
@decorator
|
|||
|
|
def xpin_okx_wallet(self):
|
|||
|
|
self.open_project(url='https://t.me/XPIN_Offical_Bot/XPIN?startapp=stl175_1947911285261996032')
|
|||
|
|
|
|||
|
|
# 链接打开后的tg检测检测
|
|||
|
|
if self.tg_testing():
|
|||
|
|
print("账号掉了!!!")
|
|||
|
|
return
|
|||
|
|
|
|||
|
|
self.d.xpath('//*[@text="Connect"]').click()
|
|||
|
|
|
|||
|
|
x_Y = match_image(d=self.d, template_path="images/xpin_okx.png", retry_times=5, threshold=0.8)
|
|||
|
|
if x_Y: self.d.click(x_Y[0][0], x_Y[0][1])
|
|||
|
|
time.sleep(5)
|
|||
|
|
|
|||
|
|
x_Y = match_image(d=self.d, template_path="images/xpin_okx1.png", retry_times=5, threshold=0.8)
|
|||
|
|
if x_Y: self.d.click(x_Y[0][0], x_Y[0][1])
|
|||
|
|
time.sleep(5)
|
|||
|
|
|
|||
|
|
x_Y = match_image(d=self.d, template_path="images/xpin_okx2.png", retry_times=500, threshold=0.8)
|
|||
|
|
if x_Y:
|
|||
|
|
self.d.click(x_Y[0][0], x_Y[0][1])
|
|||
|
|
|
|||
|
|
self.xpin_info = TgXpin.get_or_none(
|
|||
|
|
TgXpin.phone == self.tg_phone.ld_name,
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
self.xpin_info.wallet_start = 1
|
|||
|
|
self.xpin_info.save()
|
|||
|
|
|
|||
|
|
|
|||
|
|
if __name__ == '__main__':
|
|||
|
|
|
|||
|
|
# 启动类型 0:id,1:名字, 登录账号的时候:3
|
|||
|
|
action_type = 1
|
|||
|
|
|
|||
|
|
tg_phone_datas = TelegramAccount().select().where(
|
|||
|
|
TelegramAccount.server_id == get_host_ip(),
|
|||
|
|
TelegramAccount.is_logged_in_telegram == 1,
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
# 同时运行
|
|||
|
|
max_threads = 1
|
|||
|
|
delay_between_start = 15 # 每次启动线程之间的延迟时间(秒)
|
|||
|
|
|
|||
|
|
with ThreadPoolExecutor(max_workers=max_threads) as executor:
|
|||
|
|
|
|||
|
|
while True:
|
|||
|
|
futures = []
|
|||
|
|
for i in tg_phone_datas:
|
|||
|
|
|
|||
|
|
# wallet_okx = WalletAddressOkx.get_or_none(
|
|||
|
|
# # WalletAddressOkx.tg_id == i.id,
|
|||
|
|
# WalletAddressOkx.ld_name == i.ld_name,
|
|||
|
|
# WalletAddressOkx.project_name == "ducks"
|
|||
|
|
# )
|
|||
|
|
#
|
|||
|
|
# if wallet_okx.stast:
|
|||
|
|
# continue
|
|||
|
|
|
|||
|
|
try:
|
|||
|
|
tg = TG(type1=action_type, tg_phone=i)
|
|||
|
|
except:
|
|||
|
|
continue
|
|||
|
|
|
|||
|
|
# 提交线程任务到线程池
|
|||
|
|
future = executor.submit(tg.xpin_okx_wallet)
|
|||
|
|
futures.append(future)
|
|||
|
|
|
|||
|
|
# 线程启动间隔
|
|||
|
|
time.sleep(delay_between_start)
|
|||
|
|
|
|||
|
|
# 等待所有提交的任务完成
|
|||
|
|
done = False
|
|||
|
|
while not done:
|
|||
|
|
done = True
|
|||
|
|
for future in futures:
|
|||
|
|
if not future.done():
|
|||
|
|
done = False
|
|||
|
|
time.sleep(60) # 可以根据需要调整休眠时间
|
|||
|
|
break
|
|||
|
|
|
|||
|
|
time.sleep(300)
|
|||
|
|
|
|||
|
|
# # session登录
|
|||
|
|
#
|
|||
|
|
# # 启动类型 0:id,1:名字, 登录账号的时候:3
|
|||
|
|
# action_type = 3
|
|||
|
|
#
|
|||
|
|
# # 同时运行
|
|||
|
|
# max_threads = 10
|
|||
|
|
# delay_between_start = 15 # 每次启动线程之间的延迟时间(秒)
|
|||
|
|
#
|
|||
|
|
# with ThreadPoolExecutor(max_workers=max_threads) as executor:
|
|||
|
|
#
|
|||
|
|
# futures = []
|
|||
|
|
#
|
|||
|
|
# for tg_phone_info in TgPhoneDevices.select().where(
|
|||
|
|
# (TgPhoneDevices.is_valid_session == 1) &
|
|||
|
|
# ((TgPhoneDevices.code == "jiedata123123") |
|
|||
|
|
# (TgPhoneDevices.code == "jiedata123"))
|
|||
|
|
# ):
|
|||
|
|
# print(tg_phone_info.phone)
|
|||
|
|
# tg_info = TelegramAccount.get_or_none(
|
|||
|
|
# TelegramAccount.ld_name == tg_phone_info.phone
|
|||
|
|
# )
|
|||
|
|
#
|
|||
|
|
# # if tg_info.server_id:
|
|||
|
|
# # logger.info(f"账号:{tg_phone_info.phone},已登录过,跳过!!!")
|
|||
|
|
# # continue
|
|||
|
|
#
|
|||
|
|
# # 查询或创建,电话号码
|
|||
|
|
# tg_phone, tyoe1 = TelegramAccount.get_or_create(
|
|||
|
|
# one_phone_number=tg_phone_info.area_code,
|
|||
|
|
# telephone=tg_phone_info.phone_number,
|
|||
|
|
# ld_name=tg_phone_info.phone,
|
|||
|
|
# server_id=get_host_ip()
|
|||
|
|
# )
|
|||
|
|
#
|
|||
|
|
# if tg_phone.phone_type:
|
|||
|
|
# logger.info(f"账号:{tg_phone.ld_name},登录成功!!!")
|
|||
|
|
#
|
|||
|
|
# continue
|
|||
|
|
#
|
|||
|
|
# try:
|
|||
|
|
# tg = TG(type1=action_type, tg_phone=tg_phone, dev_info=tg_phone_info)
|
|||
|
|
# # 提交线程任务到线程池
|
|||
|
|
# future = executor.submit(tg.log_tg)
|
|||
|
|
# futures.append(future)
|
|||
|
|
#
|
|||
|
|
# # 线程启动间隔
|
|||
|
|
# time.sleep(delay_between_start)
|
|||
|
|
# except Exception as e:
|
|||
|
|
# continue
|