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

使用Selenium获取Instagram粉丝时列表为空的问题求助

Instagram粉丝提取空列表的排查与解决

核心问题分析

你的代码能完成前置操作但提取不到粉丝,大概率是元素定位器失效或滚动加载逻辑未确保所有粉丝渲染完成,以下是针对性的排查和修复方案:


1. 替换脆弱的绝对XPath与动态Class

Instagram的页面元素Class名(如PZuss)会频繁更新,绝对XPath(/html/body/...)也极容易因页面结构变化失效,建议用更稳定的定位逻辑:

修复粉丝面板定位

# 替换原有的followers_panel定位,通过粉丝面板的aria-label属性定位(更稳定)
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

# 等待粉丝面板加载并定位
followers_panel = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.XPATH, "//div[contains(@aria-label, 'Followers')]/parent::div/parent::div"))
)

修复粉丝条目与用户名定位

# 提取粉丝条目:用dialog下的列表项结构定位,不依赖动态Class
followers = followers_panel.find_elements_by_xpath(".//ul//li")
list_of_followers = []

for follower in followers:
    # 滚动到当前粉丝项确保可见
    driver.execute_script("arguments[0].scrollIntoView();", follower)
    # 等待用户名元素可见后提取文本
    username_elem = WebDriverWait(follower, 5).until(
        EC.visibility_of_element_located((By.XPATH, ".//a/span"))
    )
    username = username_elem.text
    if username:
        list_of_followers.append(username)

2. 优化滚动加载逻辑

原逻辑仅判断scrollHeight是否变化,无法确保新粉丝已完成渲染。改用粉丝数量变化作为终止条件:

prev_follower_count = 0
while True:
    # 滚动粉丝面板到底部
    driver.execute_script("arguments[0].scrollTo(0, arguments[0].scrollHeight);", followers_panel)
    # 等待2秒让新粉丝加载
    time.sleep(2)
    # 获取当前已加载的粉丝数量
    current_follower_count = len(followers_panel.find_elements_by_xpath(".//ul//li"))
    # 如果数量不再增加,说明所有粉丝已加载
    if current_follower_count == prev_follower_count:
        break
    prev_follower_count = current_follower_count

3. 完整修复后的代码示例

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
import time

# 假设driver已完成登录和进入个人主页、打开粉丝面板的操作

# 定位粉丝面板
followers_panel = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.XPATH, "//div[contains(@aria-label, 'Followers')]/parent::div/parent::div"))
)

# 滚动加载所有粉丝
prev_follower_count = 0
while True:
    driver.execute_script("arguments[0].scrollTo(0, arguments[0].scrollHeight);", followers_panel)
    time.sleep(2)
    current_follower_count = len(followers_panel.find_elements_by_xpath(".//ul//li"))
    if current_follower_count == prev_follower_count:
        break
    prev_follower_count = current_follower_count

# 提取粉丝用户名
list_of_followers = []
followers = followers_panel.find_elements_by_xpath(".//ul//li")

for follower in followers:
    driver.execute_script("arguments[0].scrollIntoView();", follower)
    try:
        username_elem = WebDriverWait(follower, 5).until(
            EC.visibility_of_element_located((By.XPATH, ".//a/span"))
        )
        username = username_elem.text
        if username:
            list_of_followers.append(username)
    except Exception as e:
        print(f"提取用户名失败: {e}")
        continue

print(list_of_followers)

额外注意事项

  • Instagram有反爬机制,操作间隔不要过短,避免账号被限制;
  • 定期检查定位器,因为Instagram会频繁更新页面结构;
  • 如果仍出现空列表,可手动打开粉丝面板,用浏览器开发者工具(F12)查看当前元素的XPath,替换代码中的定位器。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 22:45:27