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

如何为YouTube视频下载器Python程序构建前端界面?

搭建带UI的YouTube视频下载工具

要把你的YouTube下载脚本改成带美观UI的Web应用,我们可以用Flask做后端衔接Python下载逻辑,搭配简单的HTML/CSS前端实现交互。以下是完整方案:

1. 后端实现(app.py)

将原有的下载逻辑封装成Flask接口,处理用户提交的链接并返回下载状态:

from flask import Flask, render_template, request, jsonify
from pytube import YouTube

app = Flask(__name__)

def download_video(link):
    try:
        youtubeObject = YouTube(link)
        youtubeObject = youtubeObject.streams.get_highest_resolution()
        youtubeObject.download()
        return "This download has completed! Yahooooo!"
    except Exception as e:
        return f"There has been an error in downloading your youtube video: {str(e)}"

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/download', methods=['POST'])
def handle_download():
    data = request.get_json()
    link = data.get('link')
    if not link:
        return jsonify({"status": "error", "message": "Please provide a YouTube link"})
    result = download_video(link)
    return jsonify({"status": "success" if "completed" in result else "error", "message": result})

if __name__ == '__main__':
    app.run(debug=True)

2. 前端界面(templates/index.html)

创建简洁美观的交互页面,包含输入框、下载按钮和状态显示区,模拟命令行的反馈效果:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>YouTube Video Downloader</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            max-width: 600px;
            margin: 2rem auto;
            padding: 0 1rem;
            background-color: #f5f5f5;
        }
        .container {
            background: white;
            padding: 2rem;
            border-radius: 8px;
            box-shadow: 0 2px 4px rgba(0,0,0,0.1);
        }
        h1 {
            text-align: center;
            color: #2c3e50;
        }
        .input-group {
            margin: 1.5rem 0;
        }
        input[type="text"] {
            width: 100%;
            padding: 0.8rem;
            border: 1px solid #ddd;
            border-radius: 4px;
            font-size: 1rem;
        }
        button {
            width: 100%;
            padding: 0.8rem;
            background-color: #3498db;
            color: white;
            border: none;
            border-radius: 4px;
            font-size: 1rem;
            cursor: pointer;
            transition: background-color 0.3s;
        }
        button:hover {
            background-color: #2980b9;
        }
        .status-box {
            margin-top: 1.5rem;
            padding: 1rem;
            border-radius: 4px;
            font-family: monospace;
            font-size: 0.95rem;
            display: none;
        }
        .status-success {
            background-color: #d4edda;
            color: #155724;
            border: 1px solid #c3e6cb;
        }
        .status-error {
            background-color: #f8d7da;
            color: #721c24;
            border: 1px solid #f5c6cb;
        }
    </style>
</head>
<body>
    <div class="container">
        <h1>YouTube Video Downloader</h1>
        <div class="input-group">
            <input type="text" id="youtubeLink" placeholder="Put your youtube link here!! URL:">
        </div>
        <button id="downloadBtn">Download Video</button>
        <div id="status" class="status-box"></div>
    </div>

    <script>
        const downloadBtn = document.getElementById('downloadBtn');
        const youtubeLink = document.getElementById('youtubeLink');
        const statusBox = document.getElementById('status');

        downloadBtn.addEventListener('click', async () => {
            const link = youtubeLink.value.trim();
            if (!link) {
                showStatus("Please enter a valid YouTube link", "error");
                return;
            }

            showStatus("Downloading video... please wait...", "success");
            downloadBtn.disabled = true;

            try {
                const response = await fetch('/download', {
                    method: 'POST',
                    headers: {
                        'Content-Type': 'application/json',
                    },
                    body: JSON.stringify({ link: link }),
                });

                const data = await response.json();
                showStatus(data.message, data.status);
            } catch (error) {
                showStatus("Failed to connect to server", "error");
            } finally {
                downloadBtn.disabled = false;
            }
        });

        function showStatus(message, type) {
            statusBox.textContent = message;
            statusBox.className = `status-box status-${type}`;
            statusBox.style.display = 'block';
        }
    </script>
</body>
</html>

3. 运行步骤

  1. 安装所需依赖:
pip install flask pytube
  1. 创建文件结构:
your-app/
├── app.py
└── templates/
    └── index.html
  1. 运行Flask应用:
python app.py
  1. 打开浏览器访问 http://localhost:5000,输入YouTube链接即可下载视频,状态会实时显示在页面上。

注意事项

  • 下载的视频会保存在Flask应用的根目录下(和app.py同文件夹)
  • 若遇到pytube版本兼容问题,可尝试安装指定版本:pip install pytube==15.0.0
  • 生产环境部署时请关闭debug模式,并可考虑添加文件下载的前端反馈(比如提供下载链接)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 20:40:43