微信视频号从抓包到下载视频

发布时间 2023-11-09 09:43:42作者: 祺琪
先安装HTTP Debugger Pro v9.11.msi
双击运行HTTP Debugger Pro KeyGen By DSiDERS.exe点击Activate激活
然后将HTTPDebuggerUI_zh.exe放入安装目录,然后用他启动HTTP Debugger

接下来,使用Python编写一个下载工具 点击微信找到视频号
打开HTTP Debug工具进行抓包,找到以"finder"开头的网址,GET请求方式,并且资源类型为MP4。然后,将这个网址URL复制下来。
video.py
import tkinter as tk from tkinter import ttk, filedialog from urllib.parse import urlparse, parse_qs, urlencode, urlunparse from datetime import datetime import warnings import requests warnings.filterwarnings("ignore") def remove_parameters(url, params_to_keep): parsed_url = urlparse(url) query_params = parse_qs(parsed_url.query) query_params = {param: query_params[param] for param in params_to_keep if param in query_params} encoded_query = urlencode(query_params, doseq=True) new_url = urlunparse(( parsed_url.scheme, parsed_url.netloc, parsed_url.path, parsed_url.params, encoded_query, parsed_url.fragment )) return new_url def download_file(url, save_path): try: with requests.get(url, stream=True, verify=False) as response: response.raise_for_status() with open(save_path, 'wb') as file: for chunk in response.iter_content(chunk_size=8192): file.write(chunk) return True except requests.exceptions.RequestException as e: print(f"下载视频时发生错误:{str(e)}") return False def process_url(quality): url = entry.get().replace('20302', '20304') if quality == 'hd': video_type = '(高清)' else: video_type = '(标清)' current_datetime = datetime.now() current_date = current_datetime.strftime("%Y.%m.%d") current_time = current_datetime.strftime("%H%M%S") filename = f'{current_date}-{current_time}-{quality}{video_type}.mp4' save_path = save_path_var.get() + '/' + filename print(f"下载链接:{url}") print(f"保存路径:{save_path}") if download_file(url, save_path): success_dialog = AutoClosingDialog(window, text=f"{quality.upper()} 视频已成功下载到:{save_path}", title="成功") else: error_dialog = AutoClosingDialog(window, text=f"下载{quality.upper()}视频时发生错误", title="错误") class AutoClosingDialog(tk.Toplevel): def __init__(self, parent, text='', title=None, timeout=2000): super().__init__(parent) if title: self.title(title) self.timeout = timeout tk.Label(self, text=text).pack() self.after(self.timeout, self.destroy) window = tk.Tk() window.title("微信视频号下载-微信公众号:蓝胖子之家") window_width = 700 window_height = 300 screen_width = window.winfo_screenwidth() screen_height = window.winfo_screenheight() position_top = int(screen_height / 2 - window_height / 2) position_right = int(screen_width / 2 - window_width / 2) window.geometry(f'{window_width}x{window_height}+{position_right}+{position_top}') style = ttk.Style() # 设置主题为"ThemeClam"(Windows 11风格) style.theme_use("clam") # 设置一些额外的外观选项,可根据需要进行调整 style.configure("TButton", font=("Segoe UI", 12), relief="flat", borderwidth=0, foreground="#ffffff", background="#0078d7", activebackground="#005da3", activeforeground="#ffffff", padding=10) style.map("TButton", foreground=[('pressed', '#ffffff'), ('active', '#ffffff')], background=[('pressed', '!disabled', '#005da3'), ('active', '#0078d7')]) label = ttk.Label(window, text="请输入微信视频号链接", font=("Segoe UI", 16)) label.pack() entry = ttk.Entry(window, font=("Segoe UI", 12), width=50) entry.pack() save_path_var = tk.StringVar() save_path_var.set("C:/Users/Administrator/Desktop") def process_hd_url(): download_button.config(state='disabled') download_hd_button.config(state='disabled') process_url('hd') download_button.config(state='normal') download_hd_button.config(state='normal') def process_normal_url(): download_button.config(state='disabled') download_hd_button.config(state='disabled') process_url('normal') download_button.config(state='normal') download_hd_button.config(state='normal') def choose_save_path(): save_path = filedialog.askdirectory() if save_path: save_path_entry.delete(0, tk.END) save_path_entry.insert(0, save_path) save_path_button = ttk.Button(window, text="选择保存路径", command=choose_save_path) save_path_button.pack() save_path_entry = ttk.Entry(window, textvariable=save_path_var, font=("Segoe UI", 12), width=50) save_path_entry.pack() download_frame = ttk.Frame(window) download_frame.pack() download_button = ttk.Button(download_frame, text="下载普通质量", command=process_normal_url) download_button.pack(side=tk.LEFT, padx=10, pady=10) download_hd_button = ttk.Button(download_frame, text="下载高清质量", command=process_hd_url) download_hd_button.pack(side=tk.LEFT, padx=10, pady=10) window.mainloop() 导入所需的模块和库。程序使用了tkinter、ttk、filedialog、urllib.parse、warnings和requests等库,用于创建GUI窗口、文件对话框、URL解析、警告处理和网络请求等功能。 定义remove_parameters函数。该函数用于移除URL中指定的参数,保留指定的参数。它使用了urllib.parse库解析URL,并使用parse_qs函数解析URL查询参数。然后根据指定的参数列表,保留相应的参数,并重新构建URL。 定义download_file函数。该函数用于下载文件。它使用requests库发送GET请求,并使用stream=True参数以流的形式获取响应数据。然后将响应数据以二进制形式写入到指定路径的文件中。 定义process_url函数。该函数用于处理视频链接和执行下载操作。它接收一个参数quality,表示视频的质量(高清或标清)。首先,根据输入的链接构建下载链接(替换URL中的特定参数)。然后根据日期和时间生成文件名,并构建保存路径。接着,输出下载链接和保存路径。最后,调用download_file函数进行下载,并根据下载结果弹出相应的对话框。 定义AutoClosingDialog类。该类继承自tkinter中的Toplevel类,用于创建自动关闭的对话框。它接收一些参数,如文本内容、标题和超时时间,并在超时后自动关闭对话框。 创建主窗口(window)。设置窗口标题、大小和位置等属性。 设置ttk样式。配置按钮的外观和行为。 创建标签、输入框和保存路径选择按钮,用于接收用户输入。label用于显示提示信息,entry用于输入视频链接,save_path_var和save_path_entry用于选择和显示保存路径。 创建下载按钮的框架和按钮,并绑定按钮的点击事件处理函数。process_hd_url函数用于下载高清质量视频,process_normal_url函数用于下载标清质量视频。 启动主循环(mainloop),等待用户交互事件。用户可以在程序窗口中输入视频链接、选择保存路径,并点击按钮执行下载操作。