You need to enable JavaScript to run this app. 使用Python Selenium采集Instagram点赞用户时弹窗无法滚动加载
优惠活动
大模型
产品
解决方案
定价
更多

使用Python Selenium采集Instagram点赞用户时弹窗无法滚动加载

问题根因

所有之前尝试的滚动操作都触发主页面滚动,本质是从未定位到点赞弹窗的专属滚动容器。Instagram的点赞列表是独立浮层结构,浮层内部自带固定高度的可滚动区域,和主文档的滚动条完全隔离,任何针对主页面、弹窗外部元素的滚动指令,都无法驱动浮层内列表的懒加载逻辑,自然加载不出全部用户。

修正实现方案

  • 进入点赞弹窗后,第一步先通过固定类名定位弹窗内部的滚动容器:该容器的类选择器为.isgrP,是承载所有点赞用户条目、带溢出滚动属性的div元素,是所有滚动操作的唯一正确目标。
  • 去掉所有针对主页面、无关元素的scrollIntoView、按键发送滚动的逻辑,直接对.isgrP容器执行内部滚动操作,把容器的滚动位置拉到当前内容的最底部。
  • 采用循环判断的方式实现全量加载:每轮滚动后等待2秒让懒加载内容渲染,重新抓取当前所有已加载的用户名,当连续两次滚动后容器的总滚动高度没有变化时,就代表已经滑到列表最底部,所有点赞用户都加载完成了。

可直接替换的代码片段

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

# 等待点赞弹窗加载完成,获取内部滚动容器
scroll_container = WebDriverWait(browser, 10).until(
    EC.presence_of_element_located((By.CSS_SELECTOR, ".isgrP"))
)

collected_likers = set()
last_scroll_height = 0

while True:
    # 每轮重新抓取当前已渲染的所有点赞用户名,用集合去重
    liker_elements = browser.find_elements(By.CSS_SELECTOR, ".FPmhX.notranslate.MBL3Z")
    for elem in liker_elements:
        collected_likers.add(elem.get_attribute("title"))

    # 对弹窗内部容器执行滚动到底操作
    browser.execute_script("arguments[0].scrollTop = arguments[0].scrollHeight", scroll_container)
    # 等待网络请求和DOM渲染完成
    time.sleep(2)

    # 校验是否到达列表末尾
    current_scroll_height = browser.execute_script("return arguments[0].scrollHeight", scroll_container)
    if current_scroll_height == last_scroll_height:
        break
    last_scroll_height = current_scroll_height

# 循环结束后collected_likers即为全量点赞用户名集合
print(f"全量采集完成,共获取{len(collected_likers)}个点赞用户")

避坑提示

  • 原代码中定位包含“#”文本的元素并点击的逻辑和当前任务完全无关,会误触页面评论区的话题标签入口,打断弹窗操作,建议直接删除。
  • 单轮滚动后的等待时间不要短于1.5秒,过快的滚动请求会触发Instagram的反爬限流,导致列表停止加载。
  • 不要在弹窗刚打开时只抓取一次用户名,必须在每轮滚动后重新查询DOM元素,否则永远只能拿到初始加载的11个用户。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 01:36:06