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

Selenium实现Instagram登录及粉丝列表获取无输出问题排查

问题分析与修复方案

你的代码没有输出主要是以下几个问题导致的:

1. 初始化方法参数不匹配

__init__方法的参数是name,但你赋值时用了self.username = username,这会导致变量引用错误,应该改成self.username = name。

2. CSS选择器语法错误

获取粉丝列表的CSS选择器缺少开头的.(类选择器必须以.开头),原代码里的"_ab8w._ab94._ab99._ab9h._ab9m._ab9o._abcm"应该改为"._ab8w._ab94._ab99._ab9h._ab9m._ab9o._abcm"。

3. 粉丝列表加载逻辑错误

直接访问粉丝页面不会弹出粉丝弹窗,正确流程是先进入个人主页,再点击粉丝按钮;而且粉丝列表是滚动加载的,只执行一次find_elements只能拿到当前可见的几个粉丝,需要滚动弹窗加载更多内容。

4. 元素定位不稳定且未处理登录后弹窗

原代码用固定XPATH定位元素,Ins页面结构更新后容易失效;另外登录后会出现"保存登录信息"弹窗,不关闭会影响后续操作。


修正后的完整代码

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

class Instagram:
    def __init__(self, username, password):
        self.browser = webdriver.Firefox()
        self.username = username
        self.password = password
        self.wait = WebDriverWait(self.browser, 10)  # 显式等待,替代time.sleep更稳定

    def signIn(self):
        self.browser.get("https://www.instagram.com")
        
        # 等待用户名输入框加载并输入
        username_input = self.wait.until(EC.presence_of_element_located((By.NAME, "username")))
        username_input.send_keys(self.username)
        
        # 等待密码输入框加载并输入
        password_input = self.wait.until(EC.presence_of_element_located((By.NAME, "password")))
        password_input.send_keys(self.password)
        
        # 点击登录按钮
        login_btn = self.wait.until(EC.element_to_be_clickable((By.XPATH, "//button[@type='submit']")))
        login_btn.click()
        
        # 处理"保存登录信息"弹窗
        try:
            not_now_btn = self.wait.until(EC.element_to_be_clickable((By.XPATH, "//button[text()='Not Now']")))
            not_now_btn.click()
        except:
            pass
        
        # 处理"通知"弹窗
        try:
            notif_not_now = self.wait.until(EC.element_to_be_clickable((By.XPATH, "//button[text()='Not Now']")))
            notif_not_now.click()
        except:
            pass

    def getFollowers(self):
        # 进入个人主页
        self.browser.get(f"https://www.instagram.com/{self.username}/")
        
        # 点击粉丝按钮
        followers_btn = self.wait.until(EC.element_to_be_clickable((By.XPATH, "//a[contains(@href, '/followers/')]")))
        followers_btn.click()
        
        # 等待粉丝弹窗加载
        followers_popup = self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "._aano")))
        
        # 滚动弹窗加载更多粉丝
        last_height = self.browser.execute_script("return arguments[0].scrollHeight", followers_popup)
        while True:
            self.browser.execute_script("arguments[0].scrollTop = arguments[0].scrollHeight", followers_popup)
            time.sleep(2)
            new_height = self.browser.execute_script("return arguments[0].scrollHeight", followers_popup)
            if new_height == last_height:
                break
            last_height = new_height
        
        # 获取所有粉丝元素
        followers = self.browser.find_elements(By.CSS_SELECTOR, "._ab8w._ab94._ab99._ab9h._ab9m._ab9o._abcm")
        
        # 提取粉丝链接并打印
        for user in followers:
            try:
                user_link = user.find_element(By.CSS_SELECTOR, "a").get_attribute("href")
                print(user_link)
            except:
                continue

# 替换成你的账号密码
username = "your_username"
password = "your_password"

instagram = Instagram(username, password)
instagram.signIn()
instagram.getFollowers()

额外说明

  • 用WebDriverWait显式等待替代time.sleep,能让代码更稳定,避免因页面加载慢导致的元素找不到问题。
  • 粉丝弹窗滚动逻辑会自动加载所有粉丝,直到滚动到底部。
  • 增加了异常处理,避免个别元素定位失败导致程序中断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 06:55:22