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

如何用Selenium点击Twitter的“Copy link”提取每条推文链接?

解决Python Selenium提取Twitter推文链接的问题

需求说明

需要从Twitter搜索页面(示例:https://twitter.com/search?q=from%3A%40POTUS&src=typed_query&f=live)提取每条推文的直接链接,操作流程为:点击每条推文右下角的箭头按钮 → 选择弹出菜单中的「Copy link」→ 从剪贴板获取链接并收集所有结果。

现有代码问题分析

当前代码存在以下关键问题:

  • 用.//svg定位箭头按钮过于宽泛,页面中存在大量SVG元素,无法精准定位到目标按钮
  • 未处理Twitter的动态加载特性,初始页面仅显示少量推文,直接获取元素会遗漏内容
  • 点击箭头后未等待弹出菜单加载完成,后续操作会触发元素找不到的错误
  • click()方法返回None,无法直接将结果添加到links列表,也未实现从剪贴板提取链接的逻辑

完整解决方案代码

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
from selenium.common.exceptions import StaleElementReferenceException
import time
import pyperclip  # 需要提前安装:pip install pyperclip

# 初始化浏览器
driver = webdriver.Firefox()
driver.maximize_window()
driver.get("https://twitter.com/search?q=from%3A%40POTUS&src=typed_query&f=live")

# 等待页面加载完成
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//article[@data-testid="tweet"]')))

# 滚动加载所有推文(直到没有新内容加载)
last_height = driver.execute_script("return document.body.scrollHeight")
while True:
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    time.sleep(3)  # 等待加载时间,可根据网络情况调整
    new_height = driver.execute_script("return document.body.scrollHeight")
    if new_height == last_height:
        break
    last_height = new_height

links = []
# 获取所有推文元素
articles = driver.find_elements(By.XPATH, '//article[@data-testid="tweet"]')

for idx, article in enumerate(articles):
    try:
        # 精准定位推文右下角的箭头按钮
        more_btn = WebDriverWait(article, 5).until(
            EC.element_to_be_clickable((By.XPATH, './/button[@data-testid="caret"]'))
        )
        more_btn.click()
        
        # 等待「Copy link」按钮出现并点击
        copy_link_btn = WebDriverWait(driver, 5).until(
            EC.element_to_be_clickable((By.XPATH, '//div[@data-testid="Copy link"]'))
        )
        copy_link_btn.click()
        
        # 从剪贴板获取链接并添加到列表
        tweet_link = pyperclip.paste()
        links.append(tweet_link)
        
        # 点击空白处关闭弹出菜单,避免影响下一条推文操作
        driver.find_element(By.XPATH, '//body').click()
        
        print(f"已获取第{idx+1}条推文链接:{tweet_link}")
        
    except StaleElementReferenceException:
        print(f"第{idx+1}条推文元素过期,跳过")
        continue
    except Exception as e:
        print(f"处理第{idx+1}条推文时出错:{str(e)}")
        continue

# 输出所有收集到的链接
print("\n所有推文链接:")
for link in links:
    print(link)

# 关闭浏览器
driver.quit()

关键优化点说明

  • 精准元素定位:使用data-testid属性定位按钮,避免因页面结构微调导致定位失效
  • 动态加载处理:通过滚动页面并对比滚动高度,确保加载出所有推文内容
  • 显式等待:使用WebDriverWait等待元素可点击,避免因元素未加载完成导致的错误
  • 剪贴板操作:借助pyperclip库读取剪贴板内容,实现链接提取
  • 异常处理:捕获常见异常,提升代码运行稳定性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 08:28:21