Instagram自动滚动Reels功能失效,请求代码修复支持
Instagram Reels自动切换功能修复方案
问题分析
之前的尝试存在几个关键问题:
- 未导入
Keys模块,导致send_keys(Keys.ARROW_DOWN)无法执行 - 通过
page_source判断reelViewer存在的方式不可靠,页面动态渲染时容易出现误判 - 等待条件设置不合理,没有准确监听视频播放状态
- 未处理登录后可能出现的弹窗(如保存登录信息提示)
修复后的完整代码
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 from selenium.webdriver.common.keys import Keys # 新增导入Keys模块 import time chrome_options = webdriver.ChromeOptions() chrome_options.add_argument("--disable-notifications") chrome_options.add_argument("--disable-save-password-bubble") driver = webdriver.Chrome(options=chrome_options) driver.maximize_window() username = input("Nickname:") password = input("Password:") driver.get("https://www.instagram.com") # 等待用户名输入框加载并输入账号密码 WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.NAME, "username"))) username_element = driver.find_element(By.NAME, "username") password_element = driver.find_element(By.NAME, "password") username_element.send_keys(username) password_element.send_keys(password) # 点击登录按钮 login_element = driver.find_element(By.XPATH, "/html/body/div[2]/div/div/div[2]/div/div/div[1]/section/main/article/div[2]/div[1]/div[2]/form/div/div[3]") login_element.click() # 处理登录后的"保存登录信息"弹窗 try: WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.XPATH, "//div[text()='Not Now']"))) not_now_btn = driver.find_element(By.XPATH, "//div[text()='Not Now']") not_now_btn.click() except: pass # 如果没有弹窗则跳过 # 等待Reels入口加载并进入 WebDriverWait(driver, 30).until(EC.visibility_of_element_located((By.XPATH, "/html/body/div[2]/div/div/div[2]/div/div/div[1]/div[1]/div[1]/div/div/div/div/div[2]/div[4]/span/div/a"))) reelselement = driver.find_element(By.XPATH, "/html/body/div[2]/div/div/div[2]/div/div/div[1]/div[1]/div[1]/div/div/div/div/div[2]/div[4]/span/div/a") reelselement.click() # 自动切换Reels核心逻辑 try: while True: # 等待当前Reel视频元素加载完成 video_element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.TAG_NAME, "video"))) # 通过JavaScript获取视频总时长和当前播放进度 duration = driver.execute_script("return arguments[0].duration", video_element) current_time = driver.execute_script("return arguments[0].currentTime", video_element) # 等待视频播放到接近结束(剩余1秒内) while current_time < duration - 1: time.sleep(1) current_time = driver.execute_script("return arguments[0].currentTime", video_element) # 模拟按下向下箭头切换到下一个Reel driver.find_element(By.TAG_NAME, 'body').send_keys(Keys.ARROW_DOWN) # 等待下一个Reel加载完成 time.sleep(2) except KeyboardInterrupt: print("用户手动终止程序") except Exception as e: print(f"程序出错: {str(e)}") finally: driver.quit()
代码关键说明
- 导入Keys模块:解决之前无法发送键盘按键的问题
- 处理登录弹窗:自动跳过"保存登录信息"提示,避免后续操作受阻
- 视频状态监听:通过JavaScript获取视频的
duration和currentTime,准确判断视频是否播放完毕,替代不可靠的页面源码判断 - 稳定切换逻辑:视频播放接近结束时才执行向下滚动,确保切换时机准确,同时添加短暂等待保证下一个Reel加载完成
内容的提问来源于stack exchange,提问作者Yavuz
相关产品推荐
相关产品推荐

