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

Selenium实现Instagram自动关注时关注按钮点击无响应问题求助

Selenium实现Instagram自动关注脚本点击失效修复

核心失效原因

  • 定位关注按钮使用的XPath依赖动态生成的哈希id:f25ff3bf4393664是Instagram前端每次渲染页面随机生成的临时id,页面刷新、重绘后就会变化,无法稳定匹配到目标元素
  • 使用的find_element_by_css_selector、find_element_by_xpath系列定位方法在Selenium 4.0+版本已完全废弃,运行时会抛出方法不存在的异常,未捕获日志时会表现为点击无响应
  • 关闭通知弹窗后未等待推荐关注模块渲染完成就执行元素查找,此时目标按钮还未加载到DOM树中
  • 点击目标是按钮内部嵌套的div子元素,而非可交互的button本身,点击事件无法正常触发关注逻辑
  • 每次点击后直接刷新页面的逻辑会重置页面状态,不仅效率极低,还极易触发Instagram的反爬风控机制

修复方案

  1. 替换所有废弃的定位语法,使用Selenium 4标准的find_element(By.定位方式, 表达式)写法
  2. 放弃动态id定位,通过按钮的稳定文本、角色属性组合定位关注按钮,适配中文/英文界面的Instagram
  3. 全流程使用显式等待替代固定time.sleep,等待元素处于可点击状态后再执行交互
  4. 调整循环逻辑,取消每次点击后刷新的操作,点击完当前可见的关注按钮后滚动页面加载更多推荐账号,降低操作异常概率
  5. 增加随机操作间隔,模拟真人操作行为,减少账号被风控的风险

修复后可运行代码

from selenium import webdriver
import time
import random
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

browser = webdriver.Chrome()
wait = WebDriverWait(browser, 15)

# 打开Instagram
browser.get("https://www.instagram.com")

# 登录流程
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "input[name='username']"))).send_keys("替换为你的账号")
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "input[name='password']"))).send_keys("替换为你的密码")
wait.until(EC.element_to_be_clickable((By.XPATH, "//button[@type='submit']"))).click()

# 关闭保存登录信息弹窗
wait.until(EC.element_to_be_clickable((By.XPATH, '//button[text()="Not now" or text()="以后再说"]'))).click()
# 关闭通知权限弹窗
wait.until(EC.element_to_be_clickable((By.XPATH, '//button[text()="Not Now" or text()="不允许"]'))).click()

# 等待推荐关注区域加载
time.sleep(3)
follow_count = 0
target_follow_num = 5

while follow_count < target_follow_num:
    # 定位所有可见的未关注状态的关注按钮,兼容中英文界面
    follow_buttons = browser.find_elements(
        By.XPATH,
        '//button[div[text()="Follow" or text()="关注"] and not(contains(@class, "_acan"))]'
    )
    for btn in follow_buttons:
        if follow_count >= target_follow_num:
            break
        try:
            # 滚动到按钮位置,模拟真人视角
            browser.execute_script("arguments[0].scrollIntoViewIfNeeded(true);", btn)
            time.sleep(random.uniform(0.5, 1.5))
            btn.click()
            follow_count += 1
            # 点击后随机等待,避免操作过快
            time.sleep(random.uniform(2, 4))
        except Exception as e:
            # 遇到不可点击的按钮直接跳过
            continue
    # 当前可见按钮点完后滚动页面加载更多
    browser.execute_script("window.scrollBy(0, 800);")
    time.sleep(2)

browser.quit()

注意事项

  • Instagram有严格的自动化行为检测机制,不要短时间内执行大量关注操作,建议单次关注数量不超过20,操作间隔不低于2秒,否则会触发账号功能限制甚至封禁
  • 如果页面语言不是中文/英文,需要把XPath里的按钮文本替换为对应语言的“关注”文本即可正常使用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 18:54:32