

import pywinauto
from pywinauto.keyboard import send_keys
import pyperclip
import time
import os
# 简化版文件夹上传 - 直接操作地址栏
def upload_folder_simple(folder_path, dialog_title=None, wait_timeout=15, button_name=None):
try:
if not os.path.exists(folder_path):
raise Exception(f"路径不存在: {folder_path}")
# 1. 等待对话框出现
app = pywinauto.Desktop()
start_time = time.time()
dlg = None
while time.time() - start_time < wait_timeout:
try:
dlg = app.window(title=dialog_title)
if dlg.exists(timeout=0.5):
print("找到对话框")
break
except:
time.sleep(0.5)
if dlg is None:
raise Exception(f"对话框未在{wait_timeout}秒内出现")
# 2. 确保对话框获得焦点
dlg.set_focus()
time.sleep(0.5)
# 3. 激活地址栏
print("清空并输入路径...")
try:
send_keys("^l") # Ctrl+L 激活地址栏
time.sleep(0.3)
print("已激活地址栏")
except:
try:
address_bar = dlg.child_window(class_name="ToolbarWindow32")
address_bar.click_input()
time.sleep(0.3)
except:
pass
# 4. 清空地址栏内容
print("清空地址栏...")
send_keys("^a") # 全选
time.sleep(0.2)
send_keys("{DELETE}") # 删除
time.sleep(0.3)
# 5. 输入文件夹路径
print(f"输入路径: {folder_path}")
pyperclip.copy(folder_path)
time.sleep(0.2)
send_keys("^v") # 粘贴
time.sleep(0.5)
# 6. 按回车确认路径
send_keys("{VK_RETURN}")
time.sleep(0.5)
#首先尝试指定的按钮名称
if button_name:
try:
button = dlg[button_name]
if button.exists(timeout=0.5):
button.click()
button_clicked = True
except Exception as e:
print(f"按钮点击失败: {e}")
# 清空剪贴板
pyperclip.copy("")
return True
except Exception as e:
print(f"操作失败: {str(e)}")
pyperclip.copy("")
return False
# 主函数
def main(folder_path, dialog_title,button_name):
return upload_folder_simple(folder_path, dialog_title=dialog_title,button_name=button_name)

folder_path:文件夹地址
dialod_title:上传文件对话框的标题(左上角:“请选择要添加的文件”)
button_name:确认上传的按钮(右下角“选择问价夹”)