Python执行操作系统的命令
import os
# 使用 os.system 执行命令
os.system('ls') # 列出当前目录的文件
小于 1 分钟
import os
# 使用 os.system 执行命令
os.system('ls') # 列出当前目录的文件
from lxml import etree as ET
import subprocess
# 解析XML文件路径
xml_file_path = r"C:\Users\cf\window_dump.xml"
# 解析XML文件
tree = ET.parse(xml_file_path)
root = tree.getroot()
# 查找 text="我的" 的元素
target_text = "南明义军"
def get_bounds_center(bounds):
"""计算 bounds 的中心点坐标"""
bounds = bounds.replace('[', '').replace(']', ',').split(',')
x1, y1, x2, y2 = map(int, bounds[:4])
x_center = (x1 + x2) // 2
y_center = (y1 + y2) // 2
return x_center, y_center
def find_clickable_parent(node):
"""向上查找父节点,直到找到可点击的元素"""
parent = node
while parent is not None:
# 如果当前节点是可点击的,返回它的 bounds 和中心点
if parent.attrib.get('clickable') == 'true' and parent.attrib.get('bounds'):
return parent.attrib['bounds']
# 向上移动到父节点
parent = parent.getparent() # 使用 lxml 提供的 getparent() 方法
return None
# 遍历XML节点查找目标文本
for node in root.iter('node'):
if node.attrib['text'] == target_text:
# 检查元素是否有 clickable 属性和有效的 bounds
bounds = node.attrib.get('bounds', '[0,0][0,0]')
clickable = node.attrib.get('clickable', 'false')
# 如果元素不可点击,查找父节点是否可点击
if clickable == 'false' or bounds == '[0,0][0,0]':
print(f'Element "{target_text}" is not clickable, checking parent nodes...')
bounds = find_clickable_parent(node)
# 如果找到可点击的 bounds
if bounds and bounds != '[0,0][0,0]':
x_center, y_center = get_bounds_center(bounds)
print(f'Found clickable element at bounds: {bounds}, center: ({x_center}, {y_center})')
# 执行 ADB 命令进行点击
adb_command = ['adb', 'shell', 'input', 'tap', str(x_center), str(y_center)]
subprocess.run(adb_command)
print(f'Clicked at ({x_center}, {y_center})')
else:
print(f'No clickable element found for "{target_text}".')
break
else:
print(f'Element with text "{target_text}" not found.')
# import aircv as ac
# # 读取大图和小图
# large_image_path = r"C:\Users\cf\Pictures\Screenshots\photo_2024-10-10_11-22-22.jpg"
# small_image_path = r"C:\Users\cf\Pictures\Screenshots\photo_2024-10-10_11-00-05(1).png"
# large_image = ac.imread(large_image_path)
# small_image = ac.imread(small_image_path)
# # 进行模板匹配
# match_result = ac.find_template(large_image, small_image)
# # 输出匹配结果
# if match_result:
# print("匹配成功!坐标:", match_result['result'])
# print("相似度:", match_result['confidence'])
# else:
# print("没有找到匹配的图像。")
import aircv as ac
import cv2
# 读取大图和小图
large_image_path = r"C:\Users\xc\Pictures\Screenshots\photo_2024-10-10_11-22-22.jpg"
small_image_path = r"C:\Users\xc\Pictures\Screenshots\photo_2024-10-10_11-22-22(1).png"
large_image = ac.imread(large_image_path)
small_image = ac.imread(small_image_path)
# 进行模板匹配
match_result = ac.find_template(large_image, small_image)
# 检查是否匹配成功
if match_result:
print("匹配成功!坐标:", match_result['result'])
print("相似度:", match_result['confidence'])
# 获取匹配到的中心点坐标
center_x, center_y = match_result['result']
# 获取小图的宽高
small_h, small_w = small_image.shape[:2]
# 计算左上角和右下角坐标
top_left = (int(center_x - small_w / 2), int(center_y - small_h / 2))
bottom_right = (int(center_x + small_w / 2), int(center_y + small_h / 2))
# 打印矩形的左上角和右下角坐标
print("矩形框的左上角坐标:", top_left)
print("矩形框的右下角坐标:", bottom_right)
# 在大图上绘制红色矩形框
cv2.rectangle(large_image, top_left, bottom_right, (0, 0, 255), 2) # 红色 (BGR: 0, 0, 255)
# 显示带矩形框的结果
cv2.imshow("Matched Result", large_image)
cv2.waitKey(0) # 等待按键关闭窗口
cv2.destroyAllWindows() # 关闭所有窗口
else:
print("没有找到匹配的图像。")
# import aircv as ac
# import cv2
# # 读取大图
# large_image_path = r"C:\Users\cf\Pictures\Screenshots\photo_2024-10-10_11-22-22.jpg"
# large_image = ac.imread(large_image_path)
# # 第一组矩形框的顶点坐标
# top_left_1 = (40, 82) # 第一矩形框的左上角坐标
# bottom_right_1 = (68, 108) # 第一矩形框的右下角坐标
# # 第二组矩形框的顶点坐标
# top_left_2 = (101, 81) # 第二矩形框的左上角坐标
# bottom_right_2 = (128, 108) # 第二矩形框的右下角坐标
# # 绘制第一个红色矩形框
# cv2.rectangle(large_image, top_left_1, bottom_right_1, (0, 0, 255), 2) # 红色 (BGR: 0, 0, 255)
# # 绘制第二个红色矩形框
# cv2.rectangle(large_image, top_left_2, bottom_right_2, (0, 0, 255), 2) # 红色 (BGR: 0, 0, 255)
# # 显示带矩形框的结果
# cv2.imshow("Matched Result", large_image)
# cv2.waitKey(0) # 等待按键关闭窗口
# cv2.destroyAllWindows() # 关闭所有窗口
先下载工具:https://developer.android.com/tools/releases/platform-tools?hl=zh-cn
下载之后
在“系统变量”区域找到并选择“Path”变量,然后点击“编辑”。 点击“新建”,然后输入你刚刚记住的 Platform-Tools 文件夹的路径。 点击“确定”保存你的更改。
验证安装 adb version
验证是否连接 adb devices
唤醒屏幕:
adb shell input keyevent KEYCODE_WAKEUP
强制平仓和杠杆用人话说就是几倍杠杆就控制了多少资金,但是如果你的亏损超过了你的初始资金,平台就会强制平仓,之后这支股票就和你没有关系了。
当你使用杠杆时,实际上你只是以较少的保证金(初始资金)控制了更多的资产。当资产价格波动到某个极限值时,你的损失可能达到或超过初始资金,此时交易平台为了避免更大损失,会进行强制平仓。
在十倍杠杆的情况下,假设初始资金是 1000 元,你控制了 10000 元 的资产。市场价格下跌到一定程度后,你的亏损会接近或超过你投入的初始资金。在这个例子中,如果下跌超过 10%,你的损失将达到或超过 1000 元,也就是你的初始资金。此时平台会强制平仓,以防止亏损进一步扩大。
import cv2
import numpy as np
# 设置图片路径
img_path = r"C:\Users\cf\Pictures\Screenshots\photo_2024-10-10_11-22-22.jpg"
# 读取图片
img = cv2.imread(img_path)
if img is None:
print("图片未能成功加载,请检查图片路径。")
else:
# 初始化变量
drawing = False # 是否正在画矩形
ix, iy = -1, -1 # 矩形起点
img_copy = img.copy() # 用于显示的图像副本
# 鼠标回调函数
def draw_rectangle(event, x, y, flags, param):
global ix, iy, drawing, img, img_copy
if event == cv2.EVENT_LBUTTONDOWN: # 鼠标左键按下
drawing = True
ix, iy = x, y # 记录矩形起点
elif event == cv2.EVENT_MOUSEMOVE: # 鼠标移动
if drawing:
# 不断更新 img_copy,只在这张图上绘制矩形
img_copy = img.copy()
cv2.rectangle(img_copy, (ix, iy), (x, y), (255, 0, 0), 2)
elif event == cv2.EVENT_LBUTTONUP: # 鼠标左键抬起
drawing = False
# 在最终的图像上绘制最终的矩形并保留
cv2.rectangle(img, (ix, iy), (x, y), (255, 0, 0), 2)
img_copy = img.copy() # 更新显示图像
print(f"矩形坐标: 左上角 ({ix}, {iy}), 右下角 ({x}, {y})")
# 显示图片
cv2.namedWindow('image')
cv2.setMouseCallback('image', draw_rectangle)
while True:
# 显示 img_copy 图像
cv2.imshow('image', img_copy)
key = cv2.waitKey(20)
if key & 0xFF == 27: # 按下Esc键退出
break
elif cv2.getWindowProperty('image', cv2.WND_PROP_VISIBLE) < 1: # 检查窗口是否被关闭
break
cv2.destroyAllWindows()
import requests
from concurrent.futures import ThreadPoolExecutor
import time
def get_binance_price(symbol):
url = f"https://api.binance.com/api/v3/ticker/price?symbol={symbol}USDT"
response = requests.get(url)
data = response.json()
usdt_price = float(data['price'])
cny_price = usdt_price * 7.01
return f"{symbol}/USDT 实时价格: {usdt_price:.2f} USD, 人民币价格: {cny_price:.2f} CNY"
def send_telegram_message(message):
# 替换为你的API Token
API_TOKEN = ''
# 替换为你的Chat ID
CHAT_ID = ''
# 发送消息的URL
send_message_url = f'https://api.telegram.org/bot{API_TOKEN}/sendMessage'
# 设置请求参数
params = {
'chat_id': CHAT_ID,
'text': message
}
# 发送请求
response = requests.get(send_message_url, params=params)
# 检查请求是否成功
if response.status_code == 200:
print("消息发送成功")
else:
print(f"消息发送失败,状态码: {response.status_code}")
print(f"响应内容: {response.text}")
# 获取 ILV 和 HIGH 的实时价格
symbols = ["ILV", "HIGH"]
while True:
with ThreadPoolExecutor(max_workers=5) as executor:
results = list(executor.map(get_binance_price, symbols))
# 将所有结果合并成一条消息
combined_message = "\n".join(results)
# 发送合并后的消息到 Telegram
send_telegram_message(combined_message)
# 等待一段时间再进行下一次循环
time.sleep(60) # 每分钟执行一次