Here's a Python script that extracts and downloads your WeChat stickers on macOS. It converts WeChat's proprietary fav.archive file into a readable format, extracts sticker URLs, and downloads them automatically. Inspired by wibus-wee's node implementation. # wsd.py by mgx.me # inspired by @wibus-wee's DownloadWeChatStickers_macOS.js import os import re import shutil import time import uuid import subprocess from pathlib import Path import requests def sleep ( seconds ): time . sleep ( seconds ) def copy_fav_archive (): wechat_data_path = Path . home () / 'Library/Containers/com.tencent.xinWeChat/Data/Library/Application Support/com.tencent.xinWeChat/2.0b4.0.9' user_dirs = [ d for d in wechat_data_path . iterdir () if d . is_dir () and len ( d . name ) > 30 ] user_dirs = [ d for d in user_dirs if ( d / 'Stickers/fav.archive' ) . exists ()] if not user_dirs : print ( 'No user folder found' ) return None if len ( user_dirs ) > 1 : for index , dir_path in enumerate ( user_dirs , start = 1 ): print ( f " { index } . { dir_path } " ) choice = input ( "Please enter the user folder number: " ) try : user_dir = user_dirs [ int ( choice ) - 1 ] except ( IndexError , ValueError ): print ( "Invalid choice" ) return None else : user_dir = user_dirs [ 0 ] fav_archive_path = user_dir / 'Stickers/fav.archive' dest_path = Path . home () / 'Desktop/fav.archive.plist' shutil . copy ( fav_archive_path , dest_path ) print ( f "Copied fav.archive file to desktop: { dest_path } " ) return dest_path def convert_to_plist ( plist_path ): subprocess . run ([ 'plutil' , '-convert' , 'xml1' , str ( plist_path )], check = True ) def extract_urls ( plist_path ): with open ( plist_path , 'r' , encoding = 'utf-8' ) as file : content = file . read () link_regex = re . compile ( r '<string>(https?:\/\/.*?)<\/string>' ) links = [ match . replace ( '&amp;' , '&' ) for match in link_regex . findall ( content )] print ( f "Found { len ( links ) } sticker URLs" ) return links def download_stickers ( links , output_dir ): output_dir . mkdir ( parents = True , exist_ok = True ) user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36' for index , url in enumerate ( links , start = 1 ): filename = f " { uuid . uuid4 () } .gif" filepath = output_dir / filename print ( f "Downloading sticker { index } : { url } " ) headers = { 'User-Agent' : user_agent } try : response = requests . get ( url , headers = headers ) response . raise_for_status () with open ( filepath , 'wb' ) as f : f . write ( response . content ) print ( f "Download completed: { filename } " ) except requests . RequestException as e : print ( f "Failed to download: { url } Error: { e } " ) def main (): plist_path = copy_fav_archive () if not plist_path : return convert_to_plist ( plist_path ) links = extract_urls ( plist_path ) if links : output_dir = Path . home () / 'Desktop' / 'WX-Stickers' print ( 'Starting sticker download in 5 seconds...' ) sleep ( 5 ) download_stickers ( links , output_dir ) if __name__ == "__main__" : main ()