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
相关产品推荐
相关产品推荐

