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

使用Selenium爬取Twitter粉丝遇元素定位问题求助

解决Selenium批量获取Twitter粉丝用户名的问题

首先明确:Twitter(X)的粉丝列表是动态加载的,只爬取初始页面只能拿到少量用户,必须配合滚动加载才能批量获取。另外,直接用类名定位容易失效(Twitter经常改前端类名),建议用更稳定的属性定位。

核心步骤

  • 用WebDriverWait等待页面元素加载,避免因页面未渲染完成导致的定位失败
  • 循环滚动页面,触发动态加载更多粉丝
  • 精准定位用户名元素,批量提取并去重

代码示例

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

# 初始化浏览器(这里用Chrome,其他浏览器同理)
driver = webdriver.Chrome()
driver.get("https://twitter.com/目标用户名/followers")
driver.maximize_window()

# 假设你已经完成登录,这里直接处理粉丝页
wait = WebDriverWait(driver, 10)

# 存储已获取的用户名,避免重复
usernames = set()

# 循环滚动加载,这里设置滚动次数,可根据需求调整
scroll_count = 10
for _ in range(scroll_count):
    # 等待粉丝列表元素加载
    follower_items = wait.until(EC.presence_of_all_elements_located(
        (By.XPATH, '//div[@data-testid="cellInnerDiv"]//span[contains(text(), "@")]')
    ))
    
    # 提取用户名
    for item in follower_items:
        username = item.text.strip()
        if username.startswith("@"):
            usernames.add(username)
    
    # 滚动到页面底部,触发加载
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    time.sleep(2)  # 等待加载,时间可根据网络调整

# 输出结果
print("获取的粉丝用户名:")
for name in usernames:
    print(name)

driver.quit()

关键说明

  1. 定位方式选择:用data-testid属性定位粉丝条目(//div[@data-testid="cellInnerDiv"]),再嵌套找里面带@的span,比直接找@更精准,避免抓取到非用户名的@内容。
  2. 滚动加载处理:每次滚动后等待2秒让页面加载,滚动次数可根据需要爬取的粉丝数量调整。
  3. 去重处理:用集合set存储用户名,自动去重重复加载的内容。
  4. 异常排查:如果运行中出现元素超时,可适当延长WebDriverWait的等待时间,或调整滚动后的等待时长;若出现人机验证,需手动处理或添加对应验证逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 00:42:03