之前分享页面不给展示数据了,我今天发现又可以用了,然而之前的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代码。
成功获取