You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Python优化文件资源管理器视频文件自动选择方案问询

问题描述

我正在用PyAutoGUI实现从指定文件夹自动上传视频到网站的功能。点击网站的“选择文件”按钮后会弹出文件资源管理器,但目前的文件选择逻辑依赖方向键定位,稳定性很差,没法用于学校项目展示。

当前的简易代码如下:

pyautogui.hotkey('ctrl', 'f')
print("- selecting video number: {}".format(number), end='')

pyautogui.write("video{}".format(number))

pyautogui.hotkey('enter')

pyautogui.hotkey('down', 'down', 'up', 'left')

pyautogui.hotkey('enter')

我需要更健壮、进阶的方案,不管是否结合PyAutoGUI,只要能按文件名或从指定文件夹逐个可靠选择视频即可。


解决方案

方案1:用Selenium直接上传(彻底替代PyAutoGUI)

这是最可靠的方案,完全不需要操作文件资源管理器。通过Selenium直接定位网页的文件上传控件,直接传入文件路径即可:

from selenium import webdriver
from selenium.webdriver.common.by import By
import os

# 初始化浏览器驱动(这里以Chrome为例)
driver = webdriver.Chrome()
driver.get("你的上传页面URL")

# 定位网页中type为file的上传输入框
file_input = driver.find_element(By.XPATH, "//input[@type='file']")

# 指定视频文件夹路径,筛选符合命名规则的视频文件
video_folder = "C:/path/to/your/videos"
video_files = [
    f for f in os.listdir(video_folder) 
    if f.startswith("video") and f.endswith((".mp4", ".avi", ".mov"))
]

# 逐个上传视频
for video in video_files:
    full_file_path = os.path.abspath(os.path.join(video_folder, video))
    file_input.send_keys(full_file_path)
    # 可根据页面逻辑添加上传完成的等待(比如等待“上传成功”提示出现)
    # time.sleep(3) 或用WebDriverWait等待元素

方案2:PyAutoGUI结合绝对路径输入(轻量改进)

如果必须保留PyAutoGUI的工作流,可以跳过搜索和方向键操作,直接在文件资源管理器的地址栏输入文件绝对路径:

import pyautogui
import os
import time

video_folder = "C:/path/to/your/videos"
video_number = 1
video_file = f"video{video_number}.mp4"
full_path = os.path.abspath(os.path.join(video_folder, video_file))

# 点击“选择文件”按钮后,等待文件资源管理器弹出
time.sleep(1)

# 按Alt+D聚焦地址栏
pyautogui.hotkey('alt', 'd')
# 输入完整文件路径
pyautogui.write(full_path)
# 回车选中文件
pyautogui.press('enter')
# 再次回车确认选择
pyautogui.press('enter')

此方法完全依赖文件路径定位,不受界面布局影响,稳定性远高于方向键操作。

方案3:用pywin32操控文件资源管理器(Windows专属)

针对Windows平台,可以用pywin32调用系统API直接控制文件选择窗口,精准度最高:

import win32gui
import win32con
import os
import time

def activate_window(window_title):
    # 根据窗口标题找到并激活窗口
    hwnd = win32gui.FindWindow(None, window_title)
    if hwnd:
        win32gui.SetForegroundWindow(hwnd)
        return hwnd
    return None

def get_file_input_box(parent_hwnd):
    # 查找文件选择窗口中的文件名输入框
    controls = []
    def enum_child_callback(child_hwnd, extra):
        if win32gui.GetClassName(child_hwnd) == "Edit":
            extra.append(child_hwnd)
        return True
    win32gui.EnumChildWindows(parent_hwnd, enum_child_callback, controls)
    return controls[0] if controls else None

# 配置视频路径
video_folder = "C:/path/to/your/videos"
video_number = 1
video_file = f"video{video_number}.mp4"
full_path = os.path.abspath(os.path.join(video_folder, video_file))

# 点击“选择文件”后等待窗口弹出(窗口标题根据系统语言调整,中文为“打开”)
time.sleep(1)
dialog_hwnd = activate_window("打开")

if dialog_hwnd:
    input_box_hwnd = get_file_input_box(dialog_hwnd)
    if input_box_hwnd:
        # 向输入框写入文件路径
        win32gui.SendMessage(input_box_hwnd, win32con.WM_SETTEXT, 0, full_path)
        # 发送确认指令(模拟点击“打开”按钮)
        win32gui.SendMessage(dialog_hwnd, win32con.WM_COMMAND, win32con.IDOK, 0)

内容的提问来源于stack exchange,提问作者Lanko321

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 12:05:19