抖音视频分享_signature (2021版)

之前分享页面不给展示数据了,我今天发现又可以用了,然而之前的signature值生成已经不适用于新版的sign。

本文简述生成方法,文末提供生成代码。方案仅以学习为目的,禁止滥用。

2021/8/17 今天发现分享页被新版的网页版取代了,不过接口还可以使用。


页面链接:鞠婧祎分享页面
在这里插入图片描述

通过控制台可以清晰的看到两条数据请求,分别是用户信息和用户视频。

用户信息还是和之前一样没有更新,用户视频的signature值变短了。

用户信息接口

用户视频接口


加密追踪

直接ctrl+F,搜索signature
在这里插入图片描述
找到 signature = (0,_bytedAcrawler.sign)(nonce); 并打上断点
在这里插入图片描述
刷新页面进行调试,可以发现 nonce是页面上的uid,4199772083203972。

_bytedAcrawler.sign 是 匿名函数中的sign方法。

在这里插入图片描述
组合起来就可以生成sign。
在这里插入图片描述

当然没这么简单,你需要往下还原方法。


生成思路

还原js,定义自启动方法,定义属性调用sign。

!function anonymous(){...}()(...)
Object.defineProperty(test, "__esModule", {
  value: true
});
var signature = (0 , test.sign)(nonce);

完整代码

使用时把两个文件放在同一目录下,运行python文件即可。

我把 js 和 python 代码分开了,没有写在一个里面,因为 js的字符串有混淆,windwos系统可能因为字符格式报错。

JS文件下载地址:

【温馨提示:此处隐藏内容需要付费订阅后才能查看!】

python代码:

# -*- coding: utf-8 -*-
import os,json,requests
from selenium import webdriver
PRO_DIR = os.path.dirname(os.path.abspath(__file__))
sign_js = os.path.join(PRO_DIR,'signature.js')
sign_html = os.path.join(PRO_DIR, 'douyin_sign.html')

# TODO 分享页面 UID 和 SEC_UID
douyinShareId = '4199772083203972' 
sec_uid = 'MS4wLjABAAAACV5Em110SiusElwKlIpUd-MRSi8rBYyg0NfpPrqZmykHY8wLPQ8O4pv3wPL6A-oz'

# TODO 修改 executable_path
executable_path = r'C:\Users\feiyi\Desktop\chromedriver.exe'
ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36'

headers = {"user-agent": ua}
s1 = """
    <!DOCTYPE html>
    <html style="font-size: 50px;"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  <title>signature</title>
    </head>
    <body></body>

    <script type="text/javascript">
    """
s2 = """
    </script>
    </html>
    """

def driver_sig():
    option = webdriver.ChromeOptions()
    option.add_argument('start-maximized')
    option.add_argument('--disable-dev-shm-usage')
    option.add_argument('--disable-extensions')
    option.add_argument('--disable-gpu')
    option.add_argument('--no-sandbox')
    option.add_argument('headless')
    option.add_argument('disable-infobars')
    option.add_argument('--user-agent={}'.format(ua))
    driver = webdriver.Chrome(chrome_options=option, executable_path=executable_path)
    driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
        "source": """
            Object.defineProperty(navigator, 'webdriver', {
              get: () => undefined
            })
        """})
    driver.get('file:///' + PRO_DIR + '/douyin_sign.html')
    sig = driver.title
    driver.quit()
    return sig

with open(sign_js,'r',encoding='utf-8') as f:
    s_doc = f.read()
s_doc = s_doc.replace('nonce : ""','nonce : "{}"'.format(douyinShareId))
s_doc = s_doc.replace("userAgent: ''","userAgent: '{}'".format(ua))
with open(sign_html, 'w', encoding='utf-8') as fw:
    fw.write(s1 + s_doc + s2)
sig = driver_sig()
print(sig)
detail_url = f'https://www.amemv.com/web/api/v2/aweme/post/?sec_uid={sec_uid}&count=21&max_cursor=0&aid=1128&_signature={sig}'
data = json.loads(requests.get(detail_url,headers=headers).text)
print(data)

运行示例

配置好环境,记得修改chromeDriver的path,然后运行python代码。

成功获取
在这里插入图片描述


点赞

发表回复