0.前言
抖音为了对抗爬虫等非法访问行为,所有的网站均采用了JSVMP代码保护方案,以确保请求合法性及数据包完整有效性。所有的操作均在浏览器内部使用JS生成,若无法逆向X-Bogus及msToken算法,又或是自行补全参数生成环境将会耗费开发者大量时间。
虽然我们(一般开发者)无法还原其运行环境,那我们能否直接使用他生成好的环境?接下来将介绍使用Playwright实现轻松访问相关接口。
1. 实现
我不喜欢慢慢吞吞介绍,直接放出相关代码,每一行都有注释。
from playwright.sync_api import Page, TimeoutError, sync_playwright
import json
cookies = json.load(open('cookies.json', 'r')) # 可以使用Cookie Editer扩展导出
def get_user_info(page: Page): # 获取用户信息
resp = page.request.get(
url="https://creator.douyin.com/aweme/v1/creator/user/info/") # 直接使用浏览器发送请求,任何参数不用带,浏览器会自动补全
print(resp.json()) # 打印结果
with sync_playwright() as p:
browser = p.chromium.launch(headless=False, channel="msedge") # 指定使用msedge浏览器,需要用其他的自行切换
context = browser.new_context() # 新建上下文
context.add_cookies(cookies) # 添加登录账号的cookies,可以用在抖音登录也可以在创作者中心登录
page = context.new_page() # 新建页面
page_load = False
while page_load == False: # 等待5秒页面加载
try:
page.goto('https://creator.douyin.com/', timeout=5000) # 避免一直加载页面,自动刷新
if page.url == 'https://creator.douyin.com/creator-micro/home': # 判断是否进入了抖音创作者服务中心
page_load = True # 此处为真代表已经登录
page_load = True # 此处为真代表已经进入创作者登录页
except TimeoutError: # 如果超时证明cookie已经失效,需要手动重新登录
pass
login = False
while login == False: # 如果未登录
try:
page.wait_for_url(url="**/creator-micro/home",
wait_until='domcontentloaded',
timeout=10000) # 等待10s判断是否进入主页面
except TimeoutError:
print("等待10s..")
continue
login = True # 登录成功
get_user_info(page) # 获取用户信息
page.pause() #暂停页面,可以进行其他手动操作,如果不需要可以删除
以上代码实现了读取已有的cookie尝试保持登录态,如果cookie失效,也能等待用户重新登录。
登录成功后能够直接使用浏览器,发送请求获取当前登录的用户信息,无需像平常那样补一堆参数到最后啥也干不成。
playwright操控的浏览器是通过websocket进行通信,启动的是真正的浏览器,几乎无法检测出使用了傀儡浏览器(应该)。
以上。内容仅供学习,不得进行违规违法操作。
发表回复