Files
tiktok/download_with_cookie.py

157 lines
5.2 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import requests
import re
import os
import json
import time
from urllib.parse import unquote
COOKIE_FILE = r"C:\Users\Administrator\Desktop\TikTokDownload-main\douyin_cookie.txt"
def get_or_load_cookie():
"""Get cookie from file or prompt user"""
if os.path.exists(COOKIE_FILE):
with open(COOKIE_FILE, 'r', encoding='utf-8') as f:
cookie = f.read().strip()
if cookie:
print(f"Loaded cookie from {COOKIE_FILE}")
return cookie
print("\n" + "="*60)
print("需要Cookie才能下载抖音视频")
print("="*60)
print("\n获取Cookie步骤:")
print("1. 打开Chrome/Edge浏览器访问 www.douyin.com 并登录")
print("2. 按F12打开开发者工具")
print("3. 点击'网络'(Network)标签")
print("4. 刷新页面")
print("5. 点击列表中的任意一个请求")
print("6. 在右侧'请求标头'(Request Headers)中找到Cookie")
print("7. 复制整个Cookie值很长的一串")
print("\n" + "="*60)
cookie = input("\n请粘贴Cookie (直接回车跳过): ").strip()
if cookie:
# Save cookie for future use
with open(COOKIE_FILE, 'w', encoding='utf-8') as f:
f.write(cookie)
print(f"Cookie已保存到 {COOKIE_FILE}")
return cookie
return None
def download_with_cookie(share_url, cookie, save_dir=r"C:\Users\Administrator\Desktop\TestDownload"):
"""Download using provided cookie"""
os.makedirs(save_dir, exist_ok=True)
session = requests.Session()
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
'Cookie': cookie,
'Referer': 'https://www.douyin.com/',
'Accept': 'application/json, text/plain, */*',
}
session.headers.update(headers)
# Get video ID
print(f"\n获取视频ID...")
resp = session.get(share_url, allow_redirects=True)
final_url = resp.url
print(f"URL: {final_url}")
match = re.search(r'/video/(\d+)', final_url)
if not match:
match = re.search(r'video[=/](\d{19})', final_url)
if not match:
print("无法提取视频ID")
return False
video_id = match.group(1)
print(f"视频ID: {video_id}")
# Try using f2 with the cookie
print(f"\n使用f2下载...")
import subprocess
cmd = [
r"C:\Program Files\Python311\python.exe",
"-m", "f2", "dy",
"-M", "one",
"-u", share_url,
"-p", save_dir,
"-k", cookie,
]
result = subprocess.run(cmd, capture_output=True, text=True, encoding='utf-8', errors='replace')
print(result.stdout)
if result.returncode == 0:
print("\n✓ 下载完成!")
return True
else:
print(f"\n错误: {result.stderr}")
# If f2 fails, try direct method
print("\n尝试直接下载...")
# Get video detail API
api_url = f"https://www.douyin.com/aweme/v1/web/aweme/detail/?aweme_id={video_id}&aid=6383&cookie_enabled=true"
resp = session.get(api_url)
print(f"API状态: {resp.status_code}")
if resp.status_code == 200 and resp.text:
try:
data = resp.json()
if 'aweme_detail' in data:
aweme = data['aweme_detail']
# Get video URL
video_info = aweme.get('video', {})
play_addr = video_info.get('play_addr', {})
url_list = play_addr.get('url_list', [])
if url_list:
video_url = url_list[0]
desc = aweme.get('desc', 'video')
desc = re.sub(r'[\\/:*?"<>|]', '_', desc)[:50]
print(f"\n下载视频...")
video_resp = session.get(video_url)
if video_resp.status_code == 200 and len(video_resp.content) > 50000:
filename = f"{desc}_{video_id}.mp4"
filepath = os.path.join(save_dir, filename)
with open(filepath, 'wb') as f:
f.write(video_resp.content)
print(f"\n✓ 下载成功!")
print(f" 文件: {filepath}")
print(f" 大小: {len(video_resp.content) / 1024 / 1024:.2f} MB")
return True
except Exception as e:
print(f"解析错误: {e}")
return False
def download_douyin_video(share_url, save_dir=r"C:\Users\Administrator\Desktop\TestDownload"):
"""Main download function"""
cookie = get_or_load_cookie()
if cookie:
return download_with_cookie(share_url, cookie, save_dir)
else:
print("\n未提供Cookie尝试无Cookie下载...")
print("(可能无法成功)\n")
# Try without cookie as last resort
return download_with_cookie(share_url, "", save_dir)
if __name__ == "__main__":
url = "https://v.douyin.com/R5doyi5_cTk/"
download_douyin_video(url)