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

如何用Selenium获取推文作者的Twitter Handle

用Selenium获取推文作者Twitter Handle的代码修改方案

核心问题分析

你当前无法获取作者Handle,主要是定位Handle的元素路径不准确,且忽略了页面动态加载的等待机制。以下是针对性的修改建议:

关键修改点

  1. 使用相对XPATH定位:从单条推文元素内部查找Handle,避免定位到其他推文的内容
  2. 精准匹配Handle元素特征:Twitter的作者Handle以@开头,对应链接格式为/用户名,利用这两个特征提高定位准确性
  3. 添加显式等待与异常捕获:处理页面加载延迟和元素定位失败的情况,避免程序崩溃

修改后的完整代码

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

# 初始化浏览器(确保ChromeDriver与浏览器版本匹配)
driver = webdriver.Chrome()
# 替换为你的目标关键词搜索链接
search_url = "https://twitter.com/search?q=你的关键词&src=typed_query&f=live"
driver.get(search_url)

# 显式等待搜索结果加载完成
wait = WebDriverWait(driver, 15)
wait.until(EC.presence_of_element_located((By.XPATH, '//div[@data-testid="tweet"]')))

# 滚动页面获取至少10条推文
tweets = []
while len(tweets) < 10:
    # 获取当前可见的所有推文元素
    current_tweets = driver.find_elements(By.XPATH, '//div[@data-testid="tweet"]')
    # 去重添加到列表
    for tweet in current_tweets:
        if tweet not in tweets:
            tweets.append(tweet)
    # 滚动到底部加载更多
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    time.sleep(2)  # 给页面加载留时间,可根据网络调整

# 提取每条推文的信息(取前10条)
for idx, tweet in enumerate(tweets[:10], 1):
    # 提取推文文本
    try:
        tweet_text = tweet.find_element(By.XPATH, './/div[@data-testid="tweetText"]').text
    except:
        tweet_text = "[无法获取文本]"
    
    # 提取时间戳
    try:
        timestamp = tweet.find_element(By.XPATH, './/time').get_attribute('datetime')
    except:
        timestamp = "[无法获取时间戳]"
    
    # 提取作者Handle(核心修改部分)
    try:
        # 相对路径定位:从当前推文内找以@开头、链接为用户主页的元素
        handle = tweet.find_element(By.XPATH, './/a[starts-with(text(), "@") and contains(@href, "/")]').text
    except:
        handle = "[无法获取Handle]"
    
    print(f"推文{idx}:")
    print(f"作者Handle: {handle}")
    print(f"文本内容: {tweet_text}")
    print(f"发布时间: {timestamp}")
    print("-" * 60)

driver.quit()

额外注意事项

  • 页面结构变化:Twitter的前端元素结构可能会更新,如果XPATH失效,打开浏览器开发者工具(F12),手动定位Handle元素的最新路径
  • 反爬应对:不要频繁滚动或请求,适当调整time.sleep的时长,避免被限制访问
  • 浏览器驱动匹配:确保ChromeDriver的版本与你安装的Chrome浏览器版本一致,否则会出现启动失败的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 04:15:31