程序演示大家好,我是小明。这里开发了一个抖音视频下载器,打开效果如下:如果本地谷歌浏览器之前没有访问过抖音主页,点击开始下载按钮会有如下输出:此时,我们只需点击访问抖音主页,程序会使用本地谷歌浏览器访问抖音主页。再次点击下载按钮:可以看到视频是一个合集视频:那么程序只需要勾选第一个选项即可下载整个合集:这样就可以一次性下载整个合集了:开发过程先根据上篇文章:提取谷歌浏览器Cookies的五境读取谷歌浏览器安装位置和本地抖音相关cookies:"""小明代码CSDN主页:https://blog.csdn.net/as604049322"""__author__='Xiaoming'__time__='2022/1/23'importbase64importjsonimportosimportsqlite3importwinregimportwin32cryptfromcryptography.hazmat.primitives.ciphers.aeadimportAESGCMdefload_local_key(localStateFilePath):"在chrome中读取存储在json文件中的密钥,然后进行base64解码和DPAPI解密以获得真正的AESGCM密钥"withopen(localStateFilePath,encoding='u8')asf:encrypted_key=json.load(f)['os_crypt']['encrypted_key']encrypted_key_with_header=base64.b64decode(encrypted_key)encrypted_key=encrypted_key_with_header[5:]key=win32crypt.CryptoneenkeyUnprotected,Data(,0)[1]返回keydefdecrypt_value(key,data):"AESGCMdecrypt"nonce,cipherbytes=data[3:15],data[15:]aesgcm=AESGCM(key)plaintext=aesgcm.decrypt(nonce,cipherbytes,None).解码('u8')returnplaintextdeffetch_host_cookie(host):"获取指定域名下的所有cookies"userDataDir=os.environ['LOCALAPPDATA']+r'\Google\Chrome\UserData'localStateFilePath=userDataDir+r'\LocalState'cookiepath=userDataDir+r'\Default\Cookies'#97版已经将Cookies移动到网络目录下如果不是os.path。存在(cookiepath)或os.stat(cookiepath).st_size==0:cookiepath=userDataDir+r'\Default\Network\Cookies'#print(cookiepath)sql=f"selectname,encrypted_valuefromcookieswherehost_keylike'%.{host}'"cookies={}key=load_local_key(localStateFilePath)withsqlite3.connect(cookiepath)asconn:cu=conn.cursor()forname,encrypted_valueincu.execute(sql).fetchall():cookies[name]=decrypt_value(key,encrypted_value)returncookiesdefget_chrome_path():尝试:key=winreg.OpenKey(winreg.HKEY_CLASSES_ROOT,r"ChromeHTML\Application")path=winreg.QueryValueEx(key,"ApplicationIcon")[0]chrome_path=path[:path.rfind(",")]返回chrome_path除了FileNotFoundError作为e:returnif__name__=='__main__':print(fetch_host_cookie("douyin.com"))print(get_chrome_path())有了这个工具类,我们就不用再用selenium了。那么视频解析的核心代码如下:defget_video_url(url,cookies):headers={"User-Agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/87.0.4280.66Safari/537.36","referer":"https://www.douyin.com"}res=requests.get(url,headers=headers,cookies=cookies)ifres.status_code==200:RENDER_DATA,=re.findall(r'',res.text)data=json.loads(unquote(RENDER_DATA))key='8'ifurl.find("collection")!=-1else'34'try:detail=data[key]['aweme']['detail']title=detail['desc']除了Exceptionase:print(f"{url}isinvalid,theerrorkey:",e)returnifnottitle:title,=re.findall("
