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

