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

自动化脚本报错:No such file or directory: '.DS_Store',求YouTube下载脚本修复

问题:YouTube视频下载脚本报错及优化需求

我编写了一个自动化脚本,需求如下:在CMD中输入YouTube URL,调用Vinteo.app获取最高画质视频(Pytube仅支持720p,无法获取1080p),并将视频保存到桌面的“Videos”文件夹。采用Selenium实现,步骤为:

  • 在CMD输入YouTube URL
  • 打开Vinteo.app网页
  • 在搜索框输入URL
  • 点击“Video”按钮下载(模态框默认选中1080p)
  • 将视频保存到“Videos”文件夹

运行时出现以下错误:

Traceback (most recent call last):
  File "/Users/ss/Desktop/Videos/import-videos.py", line 36, in <module>
    download_youtube_video(url)
  File "/Users/ss/Desktop/Videos/import-videos.py", line 30, in download_youtube_video
    os.rename(filename, destination)
FileNotFoundError: [Errno 2] No such file or directory: '.DS_Store' -> 'C:/Users/ss/Desktop/Videos/.DS_Store'

我的代码如下:

import os
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC

def download_youtube_video(url):
    driver = webdriver.Chrome()
    driver.get("https://vinteo.app")
    
    # Wait for search box to be present and input url
    search_box = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CSS_SELECTOR, "#search"))
    )
    search_box.send_keys(url)

    # Wait for download button to be clickable and click it  
    download_button = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.CSS_SELECTOR, "#download-video-default"))
    )
    download_button.click()

    # Wait for download to start
    time.sleep(5)
    
    # Move file to Videos folder
    filename = os.listdir(os.getcwd())[0]
    destination = os.path.join("C:/Users/ss/Desktop/Videos", filename)
    os.rename(filename, destination)
    
    driver.quit()

if __name__ == "__main__":
    url = input("Enter YouTube URL: ")
    download_youtube_video(url)

我需要优化元素定位确保下载触发,同时解决上述FileNotFoundError错误,实现视频成功下载。


解决方案

1. 修复FileNotFoundError错误

  • 问题根源:
    1. os.listdir(os.getcwd())[0]直接取当前目录第一个文件,Mac系统下默认存在.DS_Store隐藏文件,导致误操作该系统文件;
    2. 脚本运行在Mac环境(路径为/Users/ss/...),但目标路径写的是Windows格式C:/Users/ss/Desktop/Videos,跨系统路径导致目标目录不存在。
  • 修复代码:
    # 过滤系统隐藏文件,只保留非隐藏文件
    files = [f for f in os.listdir(os.getcwd()) if not f.startswith('.')]
    if not files:
        print("未找到下载文件")
        driver.quit()
        return
    filename = files[0]
    # 使用Mac系统的桌面路径格式,自动适配当前用户
    destination_dir = os.path.expanduser("~/Desktop/Videos")
    # 确保目标目录存在,不存在则创建
    os.makedirs(destination_dir, exist_ok=True)
    destination = os.path.join(destination_dir, filename)
    os.rename(filename, destination)
    

2. 优化元素定位与下载触发逻辑

  • 问题:当前等待下载按钮的逻辑依赖页面加载速度,输入URL后直接等待按钮可点击可能失效(需等待视频信息解析完成)。
  • 优化方案:
    # 输入URL后,点击搜索提交按钮(需根据页面实际元素调整选择器)
    search_box.send_keys(url)
    submit_btn = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.CSS_SELECTOR, "#search-button"))
    )
    submit_btn.click()
    
    # 等待视频选项面板加载完成,再点击下载按钮
    WebDriverWait(driver, 15).until(
        EC.presence_of_element_located((By.CSS_SELECTOR, ".video-download-options"))
    )
    download_button = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.CSS_SELECTOR, "#download-video-default"))
    )
    download_button.click()
    
  • 替换固定等待:去掉time.sleep(5),改为监听下载文件状态,比如等待文件后缀从.crdownload变为正常视频格式(如.mp4),确保下载完成后再操作。

3. 配置Chrome直接下载到目标文件夹

省去移动文件的步骤,直接设置Chrome的默认下载目录为桌面Videos文件夹:

from selenium.webdriver.chrome.options import Options

def download_youtube_video(url):
    chrome_options = Options()
    # 设置下载路径为桌面Videos文件夹
    download_dir = os.path.expanduser("~/Desktop/Videos")
    os.makedirs(download_dir, exist_ok=True)
    chrome_options.add_experimental_option("prefs", {
        "download.default_directory": download_dir,
        "download.prompt_for_download": False,
        "download.directory_upgrade": True
    })
    
    driver = webdriver.Chrome(options=chrome_options)
    driver.get("https://vinteo.app")
    
    # 后续输入URL、触发下载的逻辑不变...

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 22:47:45