如何用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
相关产品推荐
相关产品推荐

