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

Selenium通过Class定位元素失败:获取推特回复用户名遇阻

问题解决:Selenium无法获取推特回复用户名

核心错误点

  • By.CLASS_NAME仅支持单个类名,你传入的是多个空格分隔的类名,Selenium会直接匹配失败,这是返回空列表的主要原因。
  • 推特的类名是动态生成的,随时可能变化,依赖多类名定位的稳定性极差。
  • 回复内容是动态加载的,仅靠隐式等待无法覆盖滚动加载的场景。

修复方案

1. 替换定位方式并处理动态加载

改用CSS选择器定位(支持多类名组合),同时模拟滚动加载所有回复,确保能获取完整的用户列表:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time

driver = webdriver.Chrome()
driver.get("https://twitter.com/JustYGami/status/1637949323651723264")

# 滚动加载所有回复
scroll_pause_time = 2
last_height = driver.execute_script("return document.body.scrollHeight")

while True:
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    time.sleep(scroll_pause_time)
    new_height = driver.execute_script("return document.body.scrollHeight")
    if new_height == last_height:
        break
    last_height = new_height

# 用稳定的CSS选择器定位回复中的用户链接
wait = WebDriverWait(driver, 15)
user_links = wait.until(EC.presence_of_all_elements_located(
    (By.CSS_SELECTOR, 'div[data-testid="tweet"] a[href^="/"][href*="/status/"]:not([href*="/retweets/"]):not([href*="/likes/"])')
))

# 提取并去重用户名
user_list = [link.get_attribute('href').split('/')[3] for link in user_links]
unique_users = list(set(user_list))

print(unique_users)
driver.quit()

2. 关键优化说明

  • 用WebDriverWait显式等待,比隐式等待更精准,确保元素完全加载后再定位。
  • 模拟滚动加载,解决推特回复分批加载的问题,避免只获取顶部少量内容。
  • 依赖data-testid="tweet"这个静态属性定位回复容器,比动态类名更稳定。
  • 对用户名去重,避免重复记录同一用户的多次回复。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 05:27:20