rgfewfger

This commit is contained in:
27942
2025-12-11 11:45:17 +08:00
parent 069a9cee0b
commit 74161f8603
4 changed files with 179 additions and 79 deletions

Binary file not shown.

3
test2.py Normal file
View File

@@ -0,0 +1,3 @@
import time
print(time.time())

View File

@@ -1,15 +1,13 @@
import re
import hmac
import time
import base64
import hashlib
import datetime
import requests
from tqdm import *
from loguru import *
from DrissionPage import *
from bs4 import BeautifulSoup
from curl_cffi import requests
def is_bullish(c): # 阳线
@@ -45,43 +43,7 @@ class WeexTransaction:
self.pbar = None # 进度条对象
def get_signature(self, timestamp):
# 将时间戳和密钥拼接
string_to_sign = f'{timestamp}\n{self.secret}'
string_to_sign = string_to_sign.encode('utf-8')
# 使用 HMAC-SHA256 算法进行签名
hmac_code = hmac.new(self.secret.encode('utf-8'), string_to_sign, digestmod=hashlib.sha256).digest()
# 对签名结果进行 Base64 编码
sign = base64.b64encode(hmac_code).decode('utf-8')
return sign
# def send_dingtalk_message(self, message_content):
# # 获取当前时间戳(毫秒)
# timestamp = str(round(time.time() * 1000))
# # 生成签名
# sign = self.get_signature(timestamp, )
# # 拼接带有签名信息的完整 Webhook URL
# full_url = f"{self.webhook_url}&timestamp={timestamp}&sign={sign}"
#
# # 定义消息内容
# message = {
# "msgtype": "text",
# "text": {
# "content": message_content
# }
# }
#
# # 设置请求头
# headers = {
# "Content-Type": "application/json"
# }
#
# try:
# # 发送 POST 请求
# response = requests.post(full_url, headers=headers, data=json.dumps(message))
#
# except requests.RequestException as e:
# print(f"请求发生错误: {e}")
self.session = requests.Session() # 接口请求对象
def send_dingtalk_message(self, message_content):
@@ -159,31 +121,55 @@ class WeexTransaction:
def get_price(self):
headers = {
'accept': 'application/json, text/plain, */*',
'accept-language': 'zh-CN,zh;q=0.9',
'cache-control': 'no-cache',
'origin': 'https://derivatives.bitmart.com',
'pragma': 'no-cache',
'priority': 'u=1, i',
'referer': 'https://derivatives.bitmart.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',
'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',
}
params = {
'unit': '30',
'resolution': 'M',
'contractID': '2',
'offset': '340',
'endTime': str(int(time.time())),
}
datas = []
for i in range(3):
logger.info(f"获取最新数据:{i + 1}次。。。")
try:
logger.info(f"获取最新数据:{i + 1}次。。。")
self.mn_tab.get(url="https://derivatives.bitmart.com/zh-CN/futures/ETHUSDT")
res = self.mn_tab.listen.wait(timeout=25) # 等待并获取一个数据包
response = requests.get('https://contract-v2.bitmart.com/v1/ifcontract/quote/kline', params=params, headers=headers)
datas = []
if res:
for i in response.json()["data"]:
print(i)
for data in res.response.body["data"]:
insert_data = {
'id': int(data["timestamp"]) - 1,
'open': float(data["open"]),
'high': float(data["high"]),
'low': float(data["low"]),
'close': float(data["close"])
}
insert_data = {
'id': int(i["timestamp"]) - 1,
'open': float(i["open"]),
'high': float(i["high"]),
'low': float(i["low"]),
'close': float(i["close"])
}
datas.append(insert_data)
datas.append(insert_data)
return datas
break
except:
pass
time.sleep(1)
return False
return datas
def remove_tags_and_spaces(self, html):
# 创建 BeautifulSoup 对象
@@ -200,7 +186,14 @@ class WeexTransaction:
self.mn_tab.ele('x:(//button[normalize-space(text()) = "市价"])').click()
time.sleep(1)
self.mn_tab.ele('x://*[@id="size_0"]').input(float(self.get_num()) / 100)
num = self.get_num()
if num:
logger.info("获取可用余额成功!!!")
else:
logger.error("获取可用余额失败!!!")
return
self.mn_tab.ele('x://*[@id="size_0"]').input(float(num) / 100)
time.sleep(1)
if self.direction == "long" and not self.start:
@@ -285,22 +278,59 @@ class WeexTransaction:
def get_num(self):
num_tab = self.page.new_tab()
num_tab.listen.start("derivatives.bitmart.com/gw-api/contract-tiger/forward/v1/ifcontract/accounts")
params = {
'account_type': '3',
'isServerCal': '1',
}
for i in range(3):
try:
logger.info(f"获取最新数据:{i + 1}次。。。")
num_tab.get(url="https://derivatives.bitmart.com/zh-CN/futures/ETHUSDT")
res = num_tab.listen.wait(timeout=15) # 等待并获取一个数据包
response = self.session.get(
'https://derivatives.bitmart.com/gw-api/contract-tiger/forward/v1/ifcontract/accounts',
params=params,
)
if res:
num_tab.close()
return res.response.body["data"]["accounts"][0]["available_balance"]
return response.json()["data"]["accounts"][0]["available_balance"]
except:
pass
time.sleep(1)
num_tab.close()
return False
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")
tab.listen.listen.wait(timeout=15)
self.headers = tab.response.headers
self.cookies = tab.cookies()
self.session.cookies.update(self.cookies)
self.session.headers.update(self.headers)
def get_position_status(self):
params = {
'status': '1',
}
for i in range(3):
try:
response = self.session.get(
'https://derivatives.bitmart.com/gw-api/contract-tiger/forward/v1/ifcontract/userPositions',
params=params,
)
if response.json()["data"]["positions"][0]["position_type"] == 1:
self.start = 1
elif response.json()["data"]["positions"][0]["position_type"] == 2:
self.start = -1
else:
self.start = 0
return True
except:
time.sleep(1)
return False
@@ -325,10 +355,8 @@ class WeexTransaction:
logger.info('关闭多余标签页失败!!!')
self.mn_tab = self.page.new_tab()
self.mn_tab.listen.start("contract-v2.bitmart.com/v1/ifcontract/quote/kline")
logger.success("浏览器开启抓包模式。。。")
self.mn_tab.get(url="https://derivatives.bitmart.com/zh-CN/futures/ETHUSDT") # 打开网页
self.mn_tab = self.page.new_tab(url="https://derivatives.bitmart.com/zh-CN/futures/ETHUSDT") # 打开网页
self.pbar = tqdm(total=30, desc="等待时间中", ncols=80) # desc进度条说明ncols长度
@@ -363,14 +391,11 @@ class WeexTransaction:
if self.get_now_time() != self.kline_3["id"]:
continue
time.sleep(15)
if self.get_text(target_text="全仓做多100X永续持仓"):
self.start = 1
elif self.get_text(target_text="全仓做空100X永续持仓"):
self.start = -1
if self.get_position_status():
logger.info("获取仓位信息成功!!!")
else:
self.start = 0
logger.info("获取仓位信息失败!!!")
continue
if self.start == 1:
if is_bearish(self.kline_1) and is_bearish(self.kline_2):

72
交易/test.py Normal file
View File

@@ -0,0 +1,72 @@
import requests
cookies = {
'AF_SYNC': '1765258261595',
'tradeType': 'pro',
'_ym_d': '1765261165',
'_ym_uid': '1765261165802134230',
'__adroll_fpc': '23875168b001e1ea5b3c338cadd7fe49-1762510277666',
'_gcl_au': '1.1.1161787028.1762510265',
'afUserId': '1ac8dae1-3f99-4800-b10c-6a2f5b9128a2-p',
'sensorsdata2015jssdkcross': '%7B%22distinct_id%22%3A%2214768493%22%2C%22first_id%22%3A%2219a5dcc471d134b-052dcac363853b8-26011051-14540800-19a5dcc471ef33%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24latest_referrer%22%3A%22%22%7D%2C%22identities%22%3A%22eyIkaWRlbnRpdHlfY29va2llX2lkIjoiMTlhNWRjYzQ3MWQxMzRiLTA1MmRjYWMzNjM4NTNiOC0yNjAxMTA1MS0xNDU0MDgwMC0xOWE1ZGNjNDcxZWYzMyIsIiRpZGVudGl0eV9sb2dpbl9pZCI6IjE0NzY4NDkzIn0%3D%22%2C%22history_login_id%22%3A%7B%22name%22%3A%22%24identity_login_id%22%2C%22value%22%3A%2214768493%22%7D%2C%22%24device_id%22%3A%2219a5dcc471d134b-052dcac363853b8-26011051-14540800-19a5dcc471ef33%22%7D',
'currentCurrency': 'USD',
'_gid': 'GA1.2.727267646.1765355541',
'_cfuvid': 'LqxpAwUIaf4fiq72Py_dM.deEKsZlGr2mGFEQZMcGiA-1765397364323-0.0.1.1-604800000',
'golang': 'cn',
'accessKey': 'eyJoZWFkZXIiOnsidHlwIjoiQml0TWFydCIsImFsZyI6IkJNQVBJU0lYIn0sInBheWxvYWQiOnsiamlkIjoiYzQxYWUzOGFjMjY1NDY1YjgyNDJiMGFlNGMzYmZlOWUiLCJ2ZXJzaW9uIjoiMjAyNTEyMTEiLCJleHBpcmVzQXQiOjE3NjU1MTAzMDkyMjMsImJtIjoia1NkYzJOY0JuQnVTdEsvTk1OamFlQ0R6NVRIeS9wZXIxNmdYeDZPRFBWLytxaVh0UW5WcWoyNjNobHQwSWNaQmZDVWh0N0xDUGRDZlpYYVg4aFJJekN6aGpubWxSNC9Sa2prQWNPR3NKUFo5SUp5N0MrSjhCa3pPTHJObE5mVFk0K0JjQkVCeEZuNVkvNXJEN2dYUWRVRm5MWkZpZXJ2V0doaW95ZzY5dHFFQ2JlK0FRMmJKU25qNmxRMWtNM3dCaHM2dzBvNVVhSFB4RXdmY3V5MFlObXVEZkllc1V1MFRERFRZZXFJOHltT2RqNmNUd2RuKzZlMnpJampZM3ZuVkhYOG9sblBkNTFVQ0RQM1YzUUY1QVFTRGVGd1ptYkUyTXNFR0R3QTRRTzBvZTlhMWozZWhneDlDY0IxTW1UMy96b3VrRFpESk80Tm9XVmNPU01YZzVEbDNpaU1Zeml6UWlxL1MvS1IxZUh4a0Vsa3Z6dEo1UzZGU2FYaWY3Yms2In0sInNpZ25hdHVyZSI6ImpsYTF3SUFySGtSdml2Z29QY1JKdEJMd1Vxb2RRb2VjUWFNY2NqK05XNFNXUzFjOFV1UGIvUnREd3V0Q3lGMStVVnBUbTFVQkZCQm1HekFEdjZBQnRnPT0ifQ==',
'accessSalt': 'wxtMqnh06IDcwNWA2CJXVcWJgQEhONNngZu',
'tokenAt': '1765510309223',
'tokenSt': '1765423911627',
'__cf_bm': '0C1pnUOIxv6UEs41adhYfAK6xRZl4W8j5Vz1QJgiNJQ-1765424190-1.0.1.1-5hfWqfjxsvm3ebMH8k5InFTDa9.ASF9nnizvLopXaacWUKoOTCPj0AC42fjXnve7Q.oVOJHIz3x9Gn80uQOYUWBa8gMPMhZFqYk6OLlAIds',
'hasDelegation': 'false',
'delegationType': '0',
'delegationTypeList': '[]',
'_ga_R8QWWJS24Y': 'GS2.1.s1765422430$o5$g1$t1765424194$j58$l0$h0',
'_ga_7BWH3BJ925': 'GS2.1.s1765422430$o6$g1$t1765424194$j58$l0$h0',
'_ga_PJBF32MZ6E': 'GS2.1.s1765422430$o6$g1$t1765424194$j58$l0$h0',
'_ga_0V649X1YZB': 'GS2.1.s1765422430$o5$g1$t1765424194$j58$l0$h0',
'_ga': 'GA1.2.1461651029.1762510272',
}
headers = {
'accept': 'application/json, text/plain, */*',
'accept-language': 'zh-CN,zh;q=0.9',
'baggage': 'sentry-environment=production,sentry-release=e9b215a,sentry-public_key=42eada5febd1737fdcb9413516bdb44f,sentry-trace_id=dcfafebe185040448b9fa1864b4d65f0,sentry-sampled=false,sentry-sample_rand=0.7037873385703364,sentry-sample_rate=0.2',
'cache-control': 'no-cache',
'content-type': 'application/json;charset=UTF-8',
'expires': '0',
'pragma': 'no-cache',
'priority': 'u=1, i',
'referer': 'https://derivatives.bitmart.com/zh-CN/futures/ETHUSDT?theme=dark',
'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-origin',
'sentry-trace': 'dcfafebe185040448b9fa1864b4d65f0-8663a32b9bdfc923-0',
'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',
'x-bm-client': 'WEB',
'x-bm-contract': '2',
'x-bm-device': '4e796e2e0eab358305db106ff976ef2e',
'x-bm-tag': '',
'x-bm-timezone': 'Asia/Shanghai',
'x-bm-timezone-offset': '-480',
'x-bm-ua': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36',
'x-bm-version': 'e9b215a',
# 'cookie': 'AF_SYNC=1765258261595; tradeType=pro; _ym_d=1765261165; _ym_uid=1765261165802134230; __adroll_fpc=23875168b001e1ea5b3c338cadd7fe49-1762510277666; _gcl_au=1.1.1161787028.1762510265; afUserId=1ac8dae1-3f99-4800-b10c-6a2f5b9128a2-p; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2214768493%22%2C%22first_id%22%3A%2219a5dcc471d134b-052dcac363853b8-26011051-14540800-19a5dcc471ef33%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24latest_referrer%22%3A%22%22%7D%2C%22identities%22%3A%22eyIkaWRlbnRpdHlfY29va2llX2lkIjoiMTlhNWRjYzQ3MWQxMzRiLTA1MmRjYWMzNjM4NTNiOC0yNjAxMTA1MS0xNDU0MDgwMC0xOWE1ZGNjNDcxZWYzMyIsIiRpZGVudGl0eV9sb2dpbl9pZCI6IjE0NzY4NDkzIn0%3D%22%2C%22history_login_id%22%3A%7B%22name%22%3A%22%24identity_login_id%22%2C%22value%22%3A%2214768493%22%7D%2C%22%24device_id%22%3A%2219a5dcc471d134b-052dcac363853b8-26011051-14540800-19a5dcc471ef33%22%7D; currentCurrency=USD; _gid=GA1.2.727267646.1765355541; _cfuvid=LqxpAwUIaf4fiq72Py_dM.deEKsZlGr2mGFEQZMcGiA-1765397364323-0.0.1.1-604800000; golang=cn; accessKey=eyJoZWFkZXIiOnsidHlwIjoiQml0TWFydCIsImFsZyI6IkJNQVBJU0lYIn0sInBheWxvYWQiOnsiamlkIjoiYzQxYWUzOGFjMjY1NDY1YjgyNDJiMGFlNGMzYmZlOWUiLCJ2ZXJzaW9uIjoiMjAyNTEyMTEiLCJleHBpcmVzQXQiOjE3NjU1MTAzMDkyMjMsImJtIjoia1NkYzJOY0JuQnVTdEsvTk1OamFlQ0R6NVRIeS9wZXIxNmdYeDZPRFBWLytxaVh0UW5WcWoyNjNobHQwSWNaQmZDVWh0N0xDUGRDZlpYYVg4aFJJekN6aGpubWxSNC9Sa2prQWNPR3NKUFo5SUp5N0MrSjhCa3pPTHJObE5mVFk0K0JjQkVCeEZuNVkvNXJEN2dYUWRVRm5MWkZpZXJ2V0doaW95ZzY5dHFFQ2JlK0FRMmJKU25qNmxRMWtNM3dCaHM2dzBvNVVhSFB4RXdmY3V5MFlObXVEZkllc1V1MFRERFRZZXFJOHltT2RqNmNUd2RuKzZlMnpJampZM3ZuVkhYOG9sblBkNTFVQ0RQM1YzUUY1QVFTRGVGd1ptYkUyTXNFR0R3QTRRTzBvZTlhMWozZWhneDlDY0IxTW1UMy96b3VrRFpESk80Tm9XVmNPU01YZzVEbDNpaU1Zeml6UWlxL1MvS1IxZUh4a0Vsa3Z6dEo1UzZGU2FYaWY3Yms2In0sInNpZ25hdHVyZSI6ImpsYTF3SUFySGtSdml2Z29QY1JKdEJMd1Vxb2RRb2VjUWFNY2NqK05XNFNXUzFjOFV1UGIvUnREd3V0Q3lGMStVVnBUbTFVQkZCQm1HekFEdjZBQnRnPT0ifQ==; accessSalt=wxtMqnh06IDcwNWA2CJXVcWJgQEhONNngZu; tokenAt=1765510309223; tokenSt=1765423911627; __cf_bm=0C1pnUOIxv6UEs41adhYfAK6xRZl4W8j5Vz1QJgiNJQ-1765424190-1.0.1.1-5hfWqfjxsvm3ebMH8k5InFTDa9.ASF9nnizvLopXaacWUKoOTCPj0AC42fjXnve7Q.oVOJHIz3x9Gn80uQOYUWBa8gMPMhZFqYk6OLlAIds; hasDelegation=false; delegationType=0; delegationTypeList=[]; _ga_R8QWWJS24Y=GS2.1.s1765422430$o5$g1$t1765424194$j58$l0$h0; _ga_7BWH3BJ925=GS2.1.s1765422430$o6$g1$t1765424194$j58$l0$h0; _ga_PJBF32MZ6E=GS2.1.s1765422430$o6$g1$t1765424194$j58$l0$h0; _ga_0V649X1YZB=GS2.1.s1765422430$o5$g1$t1765424194$j58$l0$h0; _ga=GA1.2.1461651029.1762510272',
}
params = {
'account_type': '3',
'isServerCal': '1',
}
response = requests.get(
'https://derivatives.bitmart.com/gw-api/contract-tiger/forward/v1/ifcontract/accounts',
params=params,
cookies=cookies,
headers=headers,
)
print(response.json()["data"]["accounts"][0]["available_balance"])