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

如何使用Selenium滚动Instagram的#book标签搜索结果以获取全部用户

解决Instagram #book标签用户滚动加载不全的问题

原代码的核心问题是仅通过document.body.scrollHeight判断是否加载完成,这不符合Instagram的动态加载逻辑——它的内容加载是渐进式的,有时高度变化不及时,或者加载未完成就停止判断,导致提前终止循环。

改进思路

  • 不要直接滚动到body底部,而是滚动到当前页面最后一个帖子元素的位置,触发懒加载
  • 等待页面底部的加载指示器消失(或新元素加载完成)再进行下一次滚动
  • 增加最大滚动次数限制,避免无限循环(对应你提到的2000页)

改进后的代码示例

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
import random

wd = webdriver.Chrome()
wd.get("https://www.instagram.com/explore/tags/book/")
# 等待页面初始内容加载完成
WebDriverWait(wd, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, "div._aabd._aa8k._aanf")))

max_pages = 2000  # 目标加载页数
current_page = 0

while current_page < max_pages:
    # 获取当前所有帖子元素
    posts = wd.find_elements(By.CSS_SELECTOR, "div._aabd._aa8k._aanf")
    # 滚动到最后一个帖子的位置,触发懒加载
    wd.execute_script("arguments[0].scrollIntoView(true);", posts[-1])
    
    # 随机延迟,避免触发反爬
    time.sleep(random.randint(4, 8))
    
    try:
        # 等待加载指示器出现后消失,确认新内容加载完成
        WebDriverWait(wd, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, "div._aamz")))
        WebDriverWait(wd, 10).until(EC.invisibility_of_element_located((By.CSS_SELECTOR, "div._aamz")))
        current_page += 1
        print(f"已加载第 {current_page} 页")
    except:
        # 超时说明无更多内容或加载失败,终止循环
        print("无法加载更多内容,退出循环")
        break

# 后续可添加提取用户信息的逻辑
wd.quit()

额外注意事项

  • Instagram反爬机制严格,未登录状态下限制较多,建议登录账号后爬取
  • 不要一次性爬满2000页,可分多批次进行,降低账号封禁风险
  • 若频繁触发限制,可延长随机延迟时间,或更换IP

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 22:16:03