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

如何用Selenium统计Instagram Bot观看的故事数量及检测故事结束

检测Instagram故事结束状态并统计观看数量的解决方案

要实现自动检测故事结束、判断是否存在下一个故事并统计观看数量,我们可以通过监控Instagram故事的进度条和UI元素来替代硬编码的sleep()。以下是具体实现步骤和代码:

核心思路

  1. 监控进度条:Instagram故事顶部的进度条对应每一个故事,当前播放的进度条会逐渐填满至100%宽度,以此判断故事是否结束。
  2. 显式等待:使用Selenium的显式等待替代固定休眠,确保操作仅在元素就绪时执行,提升稳定性。
  3. 判断后续故事:每完成一个故事后,检查是否存在未播放的进度条,或是否出现关闭按钮(无后续故事时会显示)。
  4. 统计数量:每完成一个故事就递增计数,直到无后续故事时退出并返回总数。

修改后的完整代码

首先确保导入所需模块:

from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.by import By

然后更新你的函数:

def OpenStories(driver):
    storyButton = WebDriverWait(driver,5).until(EC.presence_of_element_located((By.CLASS_NAME, '_aarh')))
    ActionChains(driver).move_to_element(storyButton).click(storyButton).click(storyButton).perform()

def WatchStories(driver):
    OpenStories(driver)
    story_count = 0

    while True:
        try:
            # 等待当前故事进度条填满至100%
            active_progress = WebDriverWait(driver, 20).until(
                lambda d: d.find_element(By.CSS_SELECTOR, 'div._aa6a').get_attribute('style').split('width: ')[1].strip() == '100%'
            )
            story_count += 1

            # 检查是否存在下一个故事:判断未激活的进度条数量,或是否出现关闭按钮
            remaining_stories = len(driver.find_elements(By.CSS_SELECTOR, 'div._aa6b:not(.aa6a)'))
            close_button = driver.find_elements(By.CLASS_NAME, '_abl-')

            if remaining_stories == 0 or len(close_button) > 0:
                # 无后续故事,关闭播放器并退出循环
                close_button[0].click()
                break
            else:
                # 点击屏幕右侧切换到下一个故事
                screen_width = driver.execute_script('return window.innerWidth')
                screen_height = driver.execute_script('return window.innerHeight')
                ActionChains(driver).move_to_element_with_offset(
                    driver.find_element(By.TAG_NAME, 'body'),
                    screen_width // 2 + 10,
                    screen_height // 2
                ).click().perform()
                # 等待下一个故事的进度条加载
                WebDriverWait(driver, 5).until(EC.presence_of_element_located((By.CSS_SELECTOR, 'div._aa6a')))

        except TimeoutException:
            # 故事加载超时,退出循环
            break

    print(f"已观看故事总数:{story_count}")
    return story_count

注意事项

  • Instagram的类名(如_aa6a、_abl-)是动态生成的,可能会随平台更新而变化。如果代码失效,建议使用浏览器开发者工具重新定位元素的选择器。
  • 显式等待的超时时间可根据网络情况调整,避免因加载缓慢导致误判。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 15:10:29