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

Python Selenium如何遍历选中多个同XPATH的推文元素

问题根因

当前代码的核心问题是find_element()方法永远只会返回DOM树中第一个匹配XPath规则的元素,循环过程中没有做元素索引偏移,也没有区分已采集、未采集的推文,因此每次都会重复拿到第一条推文。
同时原逻辑每次滚动都锚定第一条推文,页面不会持续向下加载新内容,进一步导致无法获取后续推文。

可行修复方案

方案1:增量遍历+滚动触发加载(推荐,稳定性最高)

核心逻辑是用find_elements()(注意是复数形式)拿到当前页面所有匹配的推文元素,每次只处理之前没采集过的新元素,滚动时锚定当前最后一条已采集的推文触发懒加载,同时做去重避免重复存储:

from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from time import sleep

count = 0
collected_flag = set()  # 存储已采集推文内容做去重
while count < tweets:
    sleep(1)
    # 获取当前页面所有已加载的推文元素
    tweet_items = self.twitterDriver.find_elements(By.XPATH, '//div[@data-testid="tweetText"]')
    for tweet in tweet_items:
        content = tweet.text.strip()
        # 跳过空内容、已采集内容
        if not content or content in collected_flag:
            continue
        # 存储新推文
        self.tweets.loc[len(self.tweets.index), "tweet"] = content
        collected_flag.add(content)
        count += 1
        if count >= tweets:
            break
    # 滚动到当前最后一条推文位置,触发下一批内容懒加载
    if tweet_items:
        ActionChains(self.twitterDriver).scroll_to_element(tweet_items[-1]).perform()

方案2:XPath索引逐一定位

如果需要严格按顺序逐个定位元素,可以在XPath中通过位置索引指定匹配序号,注意XPath的索引从1开始计数:

from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from time import sleep

count = 0
while count < tweets:
    sleep(1)
    # 拼接索引,取第count+1个匹配的推文元素
    target_xpath = f'//div[@data-testid="tweetText"][{count + 1}]'
    current_tweet = self.twitterDriver.find_element(By.XPATH, target_xpath)
    # 滚动到当前目标元素位置
    ActionChains(self.twitterDriver).scroll_to_element(current_tweet).perform()
    self.tweets.loc[len(self.tweets.index), "tweet"] = current_tweet.text
    count += 1
优化提示
  • 固定时长的sleep()硬等待稳定性差,建议替换为WebDriverWait显式等待,判断元素可交互后再执行操作,减少无效等待、降低元素定位失败概率
  • X(原推特)页面对视口外过远的DOM元素会做动态回收,方案2在采集量较大时容易出现元素不存在的报错,优先使用方案1的增量采集逻辑
  • 部分长推文会默认折叠,需要先点击展开按钮再获取文本,否则只能拿到截断后的内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 16:27:20