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

如何用Python的Selenium获取Twitter推文?get_attribute失效求修复

修复Selenium获取马斯克推文的代码问题

核心问题分析

  1. find_elements()方法返回的是元素列表,不能直接调用get_attribute(),必须遍历列表中的每个元素操作
  2. Twitter的元素ID是动态生成的(比如id__z5kb0qs2bgp),刷新页面或重新加载后会失效,不能用固定ID定位
  3. 原代码逻辑是先滚动再获取推文,会漏掉初始页面加载的内容

修复后的代码

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

driver = webdriver.Chrome()
driver.get("https://twitter.com/elonmusk")
time.sleep(3)

SCROLL_PAUSE_TIME = 4
last_height = driver.execute_script("return document.body.scrollHeight")
# 用集合存储推文,避免重复
tweets = set()

while True:
    # 先获取当前页面的所有推文
    tweet_elements = driver.find_elements(By.XPATH, "//div[@data-testid='tweetText']")
    for elem in tweet_elements:
        tweet_content = elem.get_attribute("innerHTML").strip()
        if tweet_content:
            tweets.add(tweet_content)
    
    # 执行滚动加载
    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

# 输出结果
for idx, tweet in enumerate(tweets, 1):
    print(f"推文{idx}: {tweet}")

driver.quit()

关键修改说明

  • 定位方式替换:使用data-testid='tweetText'定位推文内容,这是Twitter官方提供的测试属性,比动态ID更稳定可靠
  • 元素列表处理:遍历find_elements()返回的所有推文元素,逐个提取内容
  • 逻辑顺序调整:先抓取当前页面内容再滚动,避免遗漏初始加载的推文
  • 去重处理:用集合存储推文内容,避免滚动加载时重复抓取已加载的内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 23:18:22