上传文件夹(win)
评论
收藏

上传文件夹(win)

经验分享
violet’伊芙加登
2025-11-14 17:49·浏览量:440
violet’伊芙加登
影刀中级开发者
发布于 2025-11-14 17:49440浏览
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:确认上传的按钮(右下角“选择问价夹”)


收藏1
全部评论1
最新
发布评论
评论