You need to enable JavaScript to run this app. C# Selenium开发Instagram自动关注机器人遇登录锁定及按钮定位问题
优惠活动
大模型
产品
解决方案
定价
更多

C# Selenium开发Instagram自动关注机器人遇登录锁定及按钮定位问题

Instagram自动关注机器人问题解决方案

一、账号被触发锁定的解决建议与测试方案

  • 屏蔽Selenium自动化特征:原生ChromeDriver存在大量可被检测的特征值,启动时添加对应配置即可隐藏大部分标记,有条件可以直接使用Undetected Chromedriver替代原生驱动,绕过反爬检测的效果更好。
  • 模拟真人操作节奏:
    1. 替换所有固定Thread.Sleep为随机间隔,范围在2000-8000毫秒,避免固定频率被检测
    2. 控制操作频率:新注册账号24小时内关注操作不要超过10个,后续每日关注量不要超过30个,每两次关注操作间隔至少1分钟
    3. 增加随机行为:登录后不要直接执行关注操作,随机刷2-3个首页帖子、停留几秒再进入关注页面,模拟普通用户的操作路径
  • IP与账号环境管控:
    1. 固定使用同一个IP段操作,不要频繁切换代理,同IP下不要同时登录多个Instagram账号执行批量操作
    2. 不要清理浏览器缓存,每次启动复用之前的用户数据目录,避免每次都是全新环境触发风控
  • 测试方案:
    1. 先用闲置小号测试完整流程,不要直接用工作账号测试,避免主号被限制
    2. 测试阶段先屏蔽实际关注点击的代码,只打印定位到的按钮信息,确认定位逻辑完全通顺、流程无报错后再开启实际点击
    3. 先低速测试1-2天,确认账号没有触发任何风控提示后再逐步提升操作频率

二、批量定位关注按钮的修复方案

你当前的问题有两个:一是全局用FindElement查找关注按钮只会返回第一个匹配的元素;二是页面滚动/翻页后DOM会更新,之前获取的元素会失效,触发StaleElementReferenceException报错。

修复逻辑:遍历每个用户卡片节点,在单个卡片内部查找对应关注按钮,每次翻页后重新获取元素列表,不要复用之前的缓存集合。

修改后代码如下:

using System;
using System.Collections.Generic;
using System.Threading;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Support.UI;

namespace InstagramFollower
{
    class Program
    {
        private static readonly string Pusername = "sorrycantshare";
        private static readonly string Ppassword = "sorrycantshare";
        private static int sayac = 1;
        // 新增Chrome启动参数隐藏自动化特征
        public static IWebDriver driver = new ChromeDriver(new ChromeOptions
        {
            ExcludedArguments = { "enable-automation" },
            AdditionalCapabilities = { { "useAutomationExtension", false } }
        }.AddArgument("--disable-blink-features=AutomationControlled")
         .AddArgument("--start-maximized"));
        // 随机数生成器,用于模拟随机等待
        private static Random rnd = new Random();

        static void Main()
        {
            WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(100));
            driver.Navigate().GoToUrl("https://www.instagram.com/");
            Console.WriteLine("网站打开成功");
            wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementIsVisible(By.Name("username")));          
            IWebElement username = driver.FindElement(By.Name("username"));
            IWebElement password = driver.FindElement(By.Name("password"));
            IWebElement loginbtn = driver.FindElement(By.CssSelector(".Igw0E.IwRSH.eGOV_._4EzTm"));           
            // 输入账号密码加随机停顿,模拟真人输入
            foreach (char c in Pusername)
            {
                username.SendKeys(c.ToString());
                Thread.Sleep(rnd.Next(100, 300));
            }
            foreach (char c in Ppassword)
            {
                password.SendKeys(c.ToString());
                Thread.Sleep(rnd.Next(100, 300));
            }
            Thread.Sleep(rnd.Next(1000, 2000));
            loginbtn.Click();
            Console.WriteLine("账号登录成功");
            ElementToClickableCssSelector(".sqdOP.L3NKy.y3zKF");
            Thread.Sleep(rnd.Next(2000, 4000));
            driver.Navigate().GoToUrl($"https://www.instagram.com");
            Console.WriteLine("跳转至首页");
            ElementToClickableCssSelector(".aOOlW.HoLwm");
            IWebElement notNow = driver.FindElement(By.CssSelector(".aOOlW.HoLwm"));
            notNow.Click();
            Thread.Sleep(rnd.Next(2000, 4000));
            
            // 调用批量关注方法
            BatchFollow();
        }

        public static void BatchFollow()
        {
            // 每次翻页后重新获取用户卡片列表
            while (sayac <= 50) // 可自定义需要关注的总数
            {
                IReadOnlyCollection<IWebElement> userCards = driver.FindElements(By.CssSelector("div._ab8w._ab94._ab97._ab9f._ab9k._ab9p._ab9-._aba8._abcm"));
                foreach (var card in userCards)
                {
                    try
                    {
                        // 在当前用户卡片内部查找关注按钮,避免全局定位错误
                        var followBtn = card.FindElement(By.CssSelector("button.sqdOP.L3NKy._4pI4F.y3zKF"));
                        if (followBtn.Text == "关注" || followBtn.Text == "Follow")
                        {
                            followBtn.Click();
                            Console.WriteLine($"第{sayac}个关注成功");
                            sayac++;
                            // 关注后随机等待1-3分钟,避免高频操作
                            Thread.Sleep(rnd.Next(60000, 180000));
                        }
                        // 已经关注的跳过
                        else
                        {
                            continue;
                        }
                        // 关注7个后点下一页
                        if (sayac %7 ==0)
                        {
                            var nextbtn = driver.FindElement(By.CssSelector(".Szr5J._6CZji"));
                            nextbtn.Click();
                            Thread.Sleep(rnd.Next(2000, 5000));
                            break; // 翻页后跳出循环重新获取卡片列表
                        }
                    }
                    catch (NoSuchElementException)
                    {
                        // 当前卡片没有关注按钮则跳过
                        continue;
                    }
                    catch (StaleElementReferenceException)
                    {
                        // 元素失效则跳过,重新获取列表
                        break;
                    }
                }
                // 滚动页面加载更多内容
                IJavaScriptExecutor js = (IJavaScriptExecutor)driver;
                js.ExecuteScript("window.scrollTo(0, document.body.scrollHeight);");
                Thread.Sleep(rnd.Next(2000, 4000));
            }
        }

        public static void ElementToClickableCssSelector(string target)
        {
            WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(100));
            wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementToBeClickable(By.CssSelector(target)));
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 04:21:00