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

使用Selenium爬取Twitter推文遇漏爬及日期断层问题求助

解决推特批量加载推文的滚动问题

原代码的核心问题

  • 循环遍历推文时就执行滚动操作,DOM更新后原tweets列表直接失效,只能获取初始加载的少量内容
  • 直接滚动到页面底部会触发Twitter的批量加载机制,跳过中间时间段的推文,造成日期断层
  • 固定像素滚动容易因页面布局变化陷入重复加载旧内容的死循环

优化方案

改用滚动到当前最后一条推文位置的方式触发增量加载,同时跟踪已处理推文数量避免重复,结合等待逻辑确保内容加载完成:

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/MYACC")
wait = WebDriverWait(driver, 10)

# 等待初始推文加载完成
wait.until(EC.presence_of_all_elements_located((By.XPATH, "//article[@data-testid='tweet']")))

processed_tweets = 0
while True:
    # 获取当前所有已加载的推文
    tweets = driver.find_elements(By.XPATH, "//article[@data-testid='tweet']")
    current_count = len(tweets)
    
    # 处理未处理过的推文
    for tweet in tweets[processed_tweets:]:
        print(tweet.text)
    
    # 更新已处理数量
    processed_tweets = current_count
    
    # 滚动到最后一条推文的位置,触发加载更多
    if current_count > 0:
        last_tweet = tweets[-1]
        driver.execute_script("arguments[0].scrollIntoView({behavior: 'smooth', block: 'end'});", last_tweet)
    
    # 等待新内容加载,平衡加载速度和资源占用
    time.sleep(5)
    
    # 检查是否有新推文加载
    new_tweets = driver.find_elements(By.XPATH, "//article[@data-testid='tweet']")
    if len(new_tweets) == current_count:
        # 没有新内容,退出循环
        break

driver.quit()

关键优化点

  • 增量滚动:通过scrollIntoView滚动到最后一条推文,触发Twitter的渐进式加载,避免跳过中间时间段的内容
  • 跟踪已处理推文:用processed_tweets记录已处理的数量,避免重复打印旧内容
  • 平滑滚动:behavior: 'smooth'让滚动更符合Twitter的加载触发逻辑,减少加载异常
  • 初始等待:用WebDriverWait确保页面初始推文渲染完成,避免过早执行后续逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 04:20:27