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

Chrome控制台运行Instagram批量取关脚本报push读取错误修复方法

Instagram批量撤销已发送关注请求脚本报错修复

错误原因

抛出Uncaught TypeError: Cannot read properties of undefined (reading 'push')的核心原因是原脚本拆分两段执行时,Chrome控制台的临时上下文可能回收、覆盖link/proWindow变量,导致调用数组push方法时,目标变量不是数组类型、值为undefined。
原脚本还存在几个会导致运行失败的问题:

  • 全局环境直接使用await存在兼容性问题,部分Chrome版本会直接抛出语法错误
  • 新标签页未完成加载时就操作DOM,会找不到对应按钮
  • 未处理浏览器弹窗拦截逻辑,被拦截的窗口引用为null,后续操作会报错
  • 旧的DOM类名选择器可能随Instagram前端版本更新失效
  • 未提示用户提前加载完全部待处理关注列表(该页面为滚动加载,不滚动到底部无法获取全部待处理用户)

修复后完整代码

直接在Instagram已发送关注请求页面打开Chrome控制台,粘贴以下代码单次运行即可,不需要拆分执行:

(async () => {
  alert("请先允许本站弹窗权限,再点击确定运行脚本,运行前请滚动页面到底部加载完全部待处理请求");
  const userLinks = [];
  const openedWindows = [];
  // 适配当前页面的用户名选择器,如果选不到元素可以自行调整类名
  const userEntries = document.querySelectorAll(".-utLf, div._aacl._aaco._aacw._aacx._aad7._aade");
  if (userEntries.length === 0) {
    console.error("未获取到待处理用户,请滚动页面加载完列表后重试,或检查DOM选择器是否匹配当前页面元素");
    return;
  }
  // 收集用户主页链接并打开新标签
  for (let i = 0; i < userEntries.length; i++) {
    const username = userEntries[i].innerText.trim();
    const profileUrl = `https://www.instagram.com/${username}/`;
    userLinks.push(profileUrl);
    console.log(`打开用户主页:${profileUrl}`);
    const win = window.open(profileUrl);
    if (!win) {
      console.error(`弹窗被拦截,无法打开用户${username}的主页,请允许弹窗后重试`);
      continue;
    }
    openedWindows.push(win);
    // 加延迟避免触发风控、避免浏览器拦截批量弹窗
    await new Promise(resolve => setTimeout(resolve, 800));
  }
  // 等待所有标签页加载完成后执行取关操作
  console.log("等待页面加载完成,开始执行取关操作...");
  await new Promise(resolve => setTimeout(resolve, 3000));
  for (let i = 0; i < openedWindows.length; i++) {
    const win = openedWindows[i];
    try {
      // 查找关注/请求已发送按钮
      const followBtn = win.document.querySelector("button.sqdOP");
      if (!followBtn) {
        console.warn(`第${i+1}个页面未找到关注按钮,跳过`);
        win.close();
        continue;
      }
      followBtn.click();
      // 等待确认弹窗弹出
      await new Promise(resolve => setTimeout(resolve, 1000));
      // 查找确认取消关注按钮
      const confirmBtn = win.document.querySelector(".aOOlW.-Cab_");
      if (confirmBtn) {
        confirmBtn.click();
        console.log(`第${i+1}个用户取关完成`);
      }
      // 操作完成关闭标签页,避免占用内存
      await new Promise(resolve => setTimeout(resolve, 500));
      win.close();
    } catch (e) {
      console.error(`操作第${i+1}个用户时出错:`, e);
    }
  }
  console.log("全部操作执行完成");
})();

关键修改点

  • 所有逻辑包裹在异步立即执行函数中,统一变量作用域,避免变量被控制台回收/覆盖导致的push方法报错
  • 移除原代码中先初始化数组再强制清空length的冗余逻辑,直接初始化空数组
  • 增加弹窗拦截检测、空列表检测、页面加载等待逻辑,减少运行错误
  • 增加操作间隔延迟,降低被Instagram风控拦截的概率
  • 操作完成后自动关闭打开的用户主页标签,避免打开过多标签导致浏览器卡顿

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 05:57:17