rgfewfger

This commit is contained in:
27942
2025-12-11 16:23:40 +08:00
parent cb521329a9
commit d863e569ce
4 changed files with 78 additions and 182 deletions

View File

@@ -1,4 +1,4 @@
from telethon import TelegramClient, sync
from telethon import TelegramClient
from telethon.sessions import StringSession
# ========== 配置区 ==========
@@ -14,8 +14,9 @@ PROXY = {
'username': "SyNuejCtrQ",
'password': "MH8ioL7EXf"
}
# Haxi@123456@
client = TelegramClient(SESSION_FILE, API_ID, API_HASH,proxy=PROXY)
client = TelegramClient(SESSION_FILE, API_ID, API_HASH, proxy=PROXY)
async def main():
await client.start() # 登录,如果第一次会要求输入手机号和验证码
@@ -34,6 +35,8 @@ async def main():
bot = await client.get_entity("ergggreef")
await client.send_message(bot, "https://t.me/ergggreef")
if __name__ == "__main__":
import asyncio
asyncio.run(main())

View File

@@ -1,25 +0,0 @@
{
'language': 'zh-CN',
'sec-ch-ua-platform': '"Windows"',
'Cache-Control': 'no-cache',
'Referer': 'https://www.websea.com/',
'Pragma': 'no-cache',
'sec-ch-ua': '"Not;A=Brand";v="99", "Google Chrome";v="139", "Chromium";v="139"',
'sec-ch-ua-mobile': '?0',
'IMEI': '0b8193313e8c44ad5451918059be26c8',
'isNight': '1',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36',
'Accept': 'application/json, text/plain, */*',
'Content-Type': 'application/x-www-form-urlencoded',
'token': '00c8b5e76864736bd3c719cb8eu70355376',
'platform': 'pc',
'accept-encoding': 'gzip, deflate, br, zstd',
'accept-language': 'zh-TW,zh;q=0.9',
'content-length': '1601',
'cookie': 'EXUU=00c8b5e76864736bd3c719cb8eu70355376; shareToken=00c8b5e76864736bd3c719cb8eu70355376; __zlcmid=1UVo2zw0P69Xt8z; _ga=GA1.1.128879445.1762510705; _ga_8ZZTTHJR37=GS2.1.s1765437268$o11$g1$t1765439366$j56$l0$h0',
'origin': 'https://www.websea.com',
'priority': 'u=1, i',
'sec-fetch-dest': 'empty',
'sec-fetch-mode': 'cors',
'sec-fetch-site': 'same-site'
}

View File

@@ -2,6 +2,7 @@ import re
import time
import datetime
from telethon import TelegramClient
from tqdm import *
from loguru import *
from DrissionPage import *
@@ -28,11 +29,6 @@ class WeexTransaction:
"Content-Type": "application/json"
}
# 替换为你自己的钉钉机器人 Webhook 地址
self.webhook_url = "https://oapi.dingtalk.com/robot/send?access_token=e2fafb3f46866d50fe52cbb29650ba9ef1cbc97915dde238192f04c906fe4125"
# 替换为你自己的钉钉机器人秘钥
self.secret = "SEC5f320e72d7a4eaca540c66c3d09edff2f74936517390dee99ece6dd1b3611998"
self.page = None # 浏览器对象
self.start = 0 # 持仓状态 -1:做空0维持仓1做多
@@ -45,25 +41,29 @@ class WeexTransaction:
self.session = requests.Session() # 接口请求对象
def send_dingtalk_message(self, message_content):
async def send_dingtalk_message(self, message_content):
pass
# ========== 配置区 ==========
API_ID = 2040 # 替换成你的 API ID
API_HASH = "b18441a1ff607e10a989891a5462e627" # 替换成你的 API HASH
SESSION_FILE = "8619211027341" # 登录会话保存文件
# ============================
# url = "http://8.137.99.82:9005/api/send_click?token=fegergauiernguie&phone=8613661496481"
#
# res = requests.post(
# url=url,
# json={
# "phone": "8613661496481",
# "bot_name": "ergggreef",
# "datas": [
# {"send_message": [message_content], "click_button": [""], },
# ]
#
# }
# )
#
# print(res.json())
PROXY = {
'proxy_type': "socks5",
'addr': "202.155.144.102",
'port': 31102,
'username': "SyNuejCtrQ",
'password': "MH8ioL7EXf"
}
try:
client = TelegramClient(SESSION_FILE, API_ID, API_HASH, proxy=PROXY)
bot = await client.get_entity("ergggreef")
await client.send_message(bot, message_content)
return True
except:
return False
def openBrowser(self, ): # 直接指定ID打开窗口也可以使用 createBrowser 方法返回的ID
@@ -169,18 +169,7 @@ class WeexTransaction:
return datas
def remove_tags_and_spaces(self, html):
# 创建 BeautifulSoup 对象
soup = BeautifulSoup(html, 'html.parser')
# 获取去除标签后的文本
text = soup.get_text()
# 去除所有空格
text = text.replace(" ", "")
return text
def to_do_page(self):
# self.page.get("https://www.weeaxs.site/zh-CN/futures/demo-trading/ETH-SUSDT")
self.mn_tab.ele('x:(//button[normalize-space(text()) = "市价"])').click()
time.sleep(1)
@@ -196,20 +185,17 @@ class WeexTransaction:
if self.direction == "long" and not self.start:
logger.success(f"{datetime.datetime.now()},第一根信号:{self.kline_1}{self.kline_2},开多")
self.send_dingtalk_message(
message_content=f"{datetime.datetime.now()},第一根信号:{self.kline_1}{self.kline_2},开多")
self.mn_tab.ele('x://span[normalize-space(text()) = "买入/做多"]').click()
self.start = 1
elif self.direction == "short" and not self.start:
logger.success(f"{datetime.datetime.now()},第一根信号:{self.kline_1}{self.kline_2},开空")
self.send_dingtalk_message(
message_content=f"{datetime.datetime.now()},第一根信号:{self.kline_1}{self.kline_2},开空")
self.mn_tab.ele('x://span[normalize-space(text()) = "卖出/做空"]').click()
self.start = -1
elif self.direction == "long" and self.start == -1:
logger.success(f"{datetime.datetime.now()},第一根信号:{self.kline_1}{self.kline_2},反手平空做多")
self.send_dingtalk_message(
message_content=f"{datetime.datetime.now()},第一根信号:{self.kline_1}{self.kline_2},反手平空做多")
self.mn_tab.ele('x:(//span[normalize-space(text()) = "市价"])').scroll.to_see(center=True)
self.mn_tab.ele('x:(//span[normalize-space(text()) = "市价"])').click()
time.sleep(3)
@@ -217,31 +203,13 @@ class WeexTransaction:
self.start = 1
elif self.direction == "short" and self.start == 1:
logger.success(f"{datetime.datetime.now()},第一根信号:{self.kline_1}{self.kline_2},反手平多做空")
self.send_dingtalk_message(
message_content=f"{datetime.datetime.now()},第一根信号:{self.kline_1}{self.kline_2},反手平多做空")
self.mn_tab.ele('x:(//span[normalize-space(text()) = "市价"])').scroll.to_see(center=True)
self.mn_tab.ele('x:(//span[normalize-space(text()) = "市价"])').click()
time.sleep(3)
self.mn_tab.ele('x://span[normalize-space(text()) = "卖出/做空"]').click()
self.start = -1
def get_text(self, target_text):
# 去除目标文本中的空白字符
cleaned_target_text = re.sub(r'\s', '', target_text)
# 创建 BeautifulSoup 对象
soup = BeautifulSoup(self.mn_tab.html, 'html.parser')
# 遍历所有标签的文本内容
for tag in soup.find_all():
tag_text = tag.get_text()
# 去除标签文本中的空白字符
cleaned_tag_text = re.sub(r'\s', '', tag_text)
if cleaned_target_text in cleaned_tag_text:
return True
else:
return False
def get_now_time(self):
# 获取当前时间戳
current_timestamp = time.time()
@@ -297,23 +265,35 @@ class WeexTransaction:
def get_token(self):
tab = self.page.new_tab()
tab.listen.start("derivatives.bitmart.com/gw-api/contract-tiger/forward/v1/ifcontract/userPositions")
tab.get(url="https://derivatives.bitmart.com/zh-CN/futures/ETHUSDT")
res = tab.listen.wait()
self.headers = res.request.headers
self.cookies = {}
for i in res.request.cookies:
self.cookies[i["name"]] = i["value"]
for i in range(3):
tab.get(url="https://derivatives.bitmart.com/zh-CN/futures/ETHUSDT")
if self.cookies.get('accessKey'):
self.session.cookies.update(self.cookies)
self.session.headers.update(self.headers)
res = tab.listen.wait()
self.headers = res.request.headers
self.cookies = {}
try:
for i in res.request.cookies:
self.cookies[i["name"]] = i["value"]
tab.close()
return True
else:
tab.close()
return False
if self.cookies.get('accessKey'):
self.session.cookies.update(self.cookies)
self.session.headers.update(self.headers)
if self.cookies:
break
except:
time.sleep(1)
tab.close()
return True if self.cookies else False
def get_now_time(self):
timestamp = time.time()
local_time = time.localtime(timestamp)
formatted_time = time.strftime("%Y-%m-%d %H:%M:%S", local_time)
return formatted_time
def get_position_status(self):
params = {
@@ -330,9 +310,6 @@ class WeexTransaction:
try:
resp_data = response.json()
if not resp_data.get("success", False):
self.start = 0
return
positions = resp_data.get("data", {}).get("positions", [])
@@ -344,15 +321,12 @@ class WeexTransaction:
self.start = 1
elif pos_type == 2:
self.start = -1
else:
self.start = 0 # 或 raise/log 异常情况
return True
except (KeyError, IndexError, AttributeError, TypeError, ValueError) as e:
# JSON 解析失败或结构异常
print(f"持仓数据解析错误: {e}")
self.start = 0
return True
except:
time.sleep(1)
@@ -395,36 +369,45 @@ class WeexTransaction:
self.pbar.refresh()
if current_minute not in [0, 1, 2, 3, 4, 5, 30, 31, 32, 33, 34, ]: # 判断是否是 新的30分钟了
# if current_minute not in range(60): # 判断是否是 新的30分钟了
# if current_minute not in range(60): # 判断是否是 新的30分钟了
time.sleep(10)
continue
new_price_datas = self.get_price()
if new_price_datas:
logger.success("获取最新交易价格成功!!!")
else:
if not new_price_datas:
logger.info("获取最新价格有问题!!!")
self.send_dingtalk_message(message_content=f"weex{self.get_now_time()},获取最新价格有问题!!!")
continue
# 解析价格
new_price_datas1 = sorted(new_price_datas, key=lambda x: x["id"])
self.kline_1, self.kline_2, self.kline_3 = new_price_datas1[-3:]
# 判断抓取的数据是否正确
if self.get_now_time() != self.kline_3["id"]:
if self.get_now_time() == self.kline_3["id"]:
logger.success("获取最新交易价格成功!!!")
else:
continue
if self.get_token(): # 获取token
logger.info("获取token成功!!!")
else:
logger.info("获取token失败")
self.send_dingtalk_message(message_content=f"weex{self.get_now_time()}获取token失败")
continue
self.get_token()
if self.get_position_status():
logger.info("获取仓位信息成功!!!")
else:
logger.info("获取仓位信息失败!!!")
self.send_dingtalk_message(message_content=f"weex{self.get_now_time()},获取仓位信息失败!!!")
continue
if self.start == 1:
if is_bearish(self.kline_1) and is_bearish(self.kline_2):
logger.success(f"{datetime.datetime.now()},第一根信号:{self.kline_1}{self.kline_2},平多")
self.send_dingtalk_message(
message_content=f"{datetime.datetime.now()},第一根信号:{self.kline_1}{self.kline_2},平多")
self.mn_tab.ele('x:(//span[normalize-space(text()) = "市价"])').scroll.to_see(center=True)
self.mn_tab.ele('x:(//span[normalize-space(text()) = "市价"])').click()
@@ -432,21 +415,19 @@ class WeexTransaction:
elif self.start == -1:
if is_bullish(self.kline_1) and is_bullish(self.kline_2):
logger.success(f"{datetime.datetime.now()},第一根信号:{self.kline_1}{self.kline_2},平空")
self.send_dingtalk_message(
message_content=f"{datetime.datetime.now()},第一根信号:{self.kline_1}{self.kline_2},平空")
self.mn_tab.ele('x:(//span[normalize-space(text()) = "市价"])').scroll.to_see(center=True)
self.mn_tab.ele('x:(//span[normalize-space(text()) = "市价"])').click()
self.start = 0
self.direction, signal_key = self.check_signal(prev=self.kline_1, curr=self.kline_2) # 判断信号
self.direction, signal_key = self.check_signal(prev=self.kline_1, curr=self.kline_2) # 根据策略生成信号判断信号
if self.direction:
try:
self.to_do_page()
except Exception as e:
self.send_dingtalk_message(
message_content=f"{datetime.datetime.now()}{e}")
message_content=f"weex:{self.get_now_time()}购买操作失败,{e}")
self.pbar.reset() # 重置进度条
self.send_dingtalk_message(

View File

@@ -1,63 +0,0 @@
import requests
cookies = {
'EXUU': '00c8b5e76864736bd3c719cb8eu70355376',
'shareToken': '00c8b5e76864736bd3c719cb8eu70355376',
'__zlcmid': '1UVo2zw0P69Xt8z',
'_ga': 'GA1.1.128879445.1762510705',
'_ga_8ZZTTHJR37': 'GS2.1.s1765437268$o11$g1$t1765439532$j58$l0$h0',
}
headers = {
'accept': 'application/json, text/plain, */*',
'accept-language': 'zh-TW,zh;q=0.9',
'cache-control': 'no-cache',
'imei': '0b8193313e8c44ad5451918059be26c8',
'isnight': '1',
'language': 'zh-CN',
'origin': 'https://www.websea.com',
'platform': 'pc',
'pragma': 'no-cache',
'priority': 'u=1, i',
'referer': 'https://www.websea.com/',
'sec-ch-ua': '"Not;A=Brand";v="99", "Google Chrome";v="139", "Chromium";v="139"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Windows"',
'sec-fetch-dest': 'empty',
'sec-fetch-mode': 'cors',
'sec-fetch-site': 'same-site',
'token': '00c8b5e76864736bd3c719cb8eu70355376',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36',
# 'userid': '601313',
# 'cookie': 'EXUU=00c8b5e76864736bd3c719cb8eu70355376; shareToken=00c8b5e76864736bd3c719cb8eu70355376; __zlcmid=1UVo2zw0P69Xt8z; _ga=GA1.1.128879445.1762510705; _ga_8ZZTTHJR37=GS2.1.s1765437268$o11$g1$t1765439532$j58$l0$h0',
}
headers = {
'language': 'zh-CN',
'sec-ch-ua-platform': '"Windows"',
'Cache-Control': 'no-cache',
'Referer': 'https://www.websea.com/',
'Pragma': 'no-cache',
'sec-ch-ua': '"Not;A=Brand";v="99", "Google Chrome";v="139", "Chromium";v="139"',
# 'sec-ch-ua-mobile': '?0',/
# 'IMEI': '0b8193313e8c44ad5451918059be26c8',
'isNight': '1',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36',
'Accept': 'application/json, text/plain, */*',
'Content-Type': 'application/x-www-form-urlencoded',
'token': '00c8b5e76864736bd3c719cb8eu70355376',
'platform': 'pc',
'accept-encoding': 'gzip, deflate, br, zstd',
'accept-language': 'zh-TW,zh;q=0.9',
# 'content-length': '1601',
# 'cookie': 'EXUU=00c8b5e76864736bd3c719cb8eu70355376; shareToken=00c8b5e76864736bd3c719cb8eu70355376; __zlcmid=1UVo2zw0P69Xt8z; _ga=GA1.1.128879445.1762510705; _ga_8ZZTTHJR37=GS2.1.s1765437268$o11$g1$t1765439366$j56$l0$h0',
'origin': 'https://www.websea.com',
'priority': 'u=1, i',
'sec-fetch-dest': 'empty',
'sec-fetch-mode': 'cors',
'sec-fetch-site': 'same-site'
}
response = requests.get('https://capi.websea.com/webApi/entrust/holdPosition', cookies=cookies, headers=headers)
print(response.json())