You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Selenium将TikTok音频视频的div元素转为可操作列表?

解决TikTok音乐页视频元素列表化的Selenium方案

核心问题修正

你当前用find_element只会返回单个父容器元素,无法通过索引访问子视频。要获取所有视频元素列表,需改用**find_elements(复数形式)**直接定位容器下的子div。


1. 基础:获取视频元素列表

直接通过XPath定位data-e2e="music-item-list"下的所有子div,得到可遍历的WebElement列表:

from selenium import webdriver
from selenium.webdriver.common.by import By

url = 'https://www.tiktok.com/music/Sweater-Weather-Sped-Up-7086537183875599110'
driver = webdriver.Chrome()
driver.get(url)

# 获取所有视频元素的列表
posts = driver.find_elements(By.XPATH, '//div[@data-e2e="music-item-list"]/div')

# 访问第一个视频元素
if posts:
    post1 = posts[0]
    # 可对post1进行后续操作,比如提取数据

2. 处理动态加载(获取全部视频)

TikTok视频是滚动加载的,初始页面仅显示少量内容。需模拟滚动加载所有视频:

import time

last_height = driver.execute_script("return document.body.scrollHeight")
while True:
    # 滚动到页面底部
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    # 等待新内容加载
    time.sleep(2)
    # 检查页面高度是否变化
    new_height = driver.execute_script("return document.body.scrollHeight")
    if new_height == last_height:
        break  # 无新内容加载,退出循环
    last_height = new_height

# 重新获取完整的视频列表
posts = driver.find_elements(By.XPATH, '//div[@data-e2e="music-item-list"]/div')
print(f"共抓取到 {len(posts)} 个关联视频")

3. 提取视频互动数据

每个视频内的播放量、点赞数等可通过对应的data-e2e属性定位提取:

for post in posts:
    # 提取播放量
    views = post.find_element(By.XPATH, './/span[@data-e2e="video-views"]').text
    # 提取点赞数
    likes = post.find_element(By.XPATH, './/span[@data-e2e="like-count"]').text
    # 提取评论数
    comments = post.find_element(By.XPATH, './/span[@data-e2e="comment-count"]').text
    # 提取分享数
    shares = post.find_element(By.XPATH, './/span[@data-e2e="share-count"]').text
    
    print(f"播放量: {views} | 点赞: {likes} | 评论: {comments} | 分享: {shares}")

4. 稳定性优化建议

  • 用显式等待替代time.sleep,提升代码稳定性:
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    # 等待视频列表加载完成(最长等待10秒)
    WebDriverWait(driver, 10).until(
        EC.presence_of_all_elements_located((By.XPATH, '//div[@data-e2e="music-item-list"]/div'))
    )
    
  • 配置浏览器参数规避TikTok反爬:
    options = webdriver.ChromeOptions()
    # 设置真实用户代理
    options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36")
    # 禁用自动化检测
    options.add_argument("--disable-blink-features=AutomationControlled")
    driver = webdriver.Chrome(options=options)
    

内容的提问来源于stack exchange,提问作者schradernm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 00:55:15