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

Instagram评论机器人异常:读取TXT时崩溃且无评论输出

Instagram评论机器人崩溃问题的修复方案

问题说明

机器人可成功登录Instagram并访问目标帖子,但尝试读取txt文件提取评论内容时程序崩溃,无评论发布。经排查,实际报错为instaloader登录时触发Instagram的Checkpoint验证要求,并非评论模块本身的问题。

原代码

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from time import sleep
import instaloader
import random
import os.path

driver = webdriver.Chrome(r"C:\\Users\\Windows\\Downloads\\chromedriver.exe")

def sorteioInstagram():
    abrindo_instagram("inspiracaobiel", "biel123", "https://www.instagram.com/p/CoI52RJOqnT/")

    if os.path.isfile('seguidores.txt'):
        print("Arquivo de Seguidores já carregado...")
    else:
        pegar_seguidores('bielbibiel')
        
    comentandoPost()

def abrindo_instagram(username,password, url):
    print("Abrindo Instagram...")
    driver.get("https://www.instagram.com/")
    sleep(2)
    print("Fazendo Login no Instagram...")
    driver.find_element(By.XPATH,"//input[@name='username']").send_keys(username)
    driver.find_element(By.XPATH,"//input[@name='password']").send_keys(password)
    driver.find_element(By.XPATH,"//button[@type='submit']").click()

    sleep(10)
    print("Negando Solicitação de Segurança Instagram...")
    driver.find_element(By.XPATH,"//button[text()='Agora não']").click()
    sleep(5)
    driver.find_element(By.XPATH,"//button[text()='Agora não']").click()
    sleep(4)
    print("Acessando o Post do sorteio...")
    driver.get(url)

def pegar_seguidores(usuario):
    L = instaloader.Instaloader()
    L.login('inspiracaobiel', 'biel123')
    profile = instaloader.Profile.from_username(L.context, usuario)

    print(f"Salvando Seguidores de {usuario}...")
    #Salvando Seguidores em Arquivo .TXT
    file = open("seguidores.txt", "a+")
    for followee in profile.get_followers():
        username = "@" + followee.username
        file.write(username + "\n")
    
    file.close()

def comentandoPost():
    z = 0
    while 1 == 1:
        cmt = driver.find_element(By.XPATH,'//*[@id="react-root"]/section/main/div/div[1]/article/div[3]/section[3]/div/form/textarea')
        cmt.click()
        comment = lendo_arquivo()
        driver.find_element(By.XPATH,'//*[@id="react-root"]/section/main/div/div[1]/article/div[3]/section[3]/div/form/textarea').send_keys(comment)
        driver.find_element(By.XPATH,'//*[@id="react-root"]/section/main/div/div[1]/article/div[3]/section[3]/div/form/textarea').send_keys(' ')
        sleep(10)
        driver.find_element(By.XPATH,'//*[@id="react-root"]/section/main/div/div[1]/article/div[3]/section[3]/div/form/textarea').send_keys(Keys.ENTER)
        sleep(10)
        driver.find_element(By.XPATH,'//*\*[@id="react-root"]/section/main/div/div[1]/article/div[3]/section[3]/div/form/textarea').send_keys(Keys.ENTER)
        z += 1
        print(f"{z}")
        sleep(60)

def lendo_arquivo():
    with open("seguidores.txt", "r") as file:
        allText = file.read()
        words = list(map(str, allText.split()))
        return random.choice(words)

sorteioInstagram()

报错信息

Traceback (most recent call last):
File "c:\Users\gabri\Downloads\Codigo Comentarios\venv\Scripts\main.py", line 76, in <module>
sorteioInstagram()
File "c:\Users\gabri\Downloads\Codigo Comentarios\venv\Scripts\main.py", line 17, in sorteioInstagram
pegar_seguidores('bielbibiel')
File "c:\Users\gabri\Downloads\Codigo Comentarios\venv\Scripts\main.py", line 41, in pegar_seguidores
L.login('inspiracaobiel', 'biel123')
File "C:\Users\gabri\AppData\Local\Programs\Python\Python311\Lib\site-packages\instaloader\instaloader.py", line 634, in login
self.context.login(user, passwd)
File "C:\Users\gabri\AppData\Local\Programs\Python\Python311\Lib\site-packages\instaloader\instaloadercontext.py", line 239, in login
raise ConnectionException("Login: Checkpoint required. Point your browser to "
instaloader.exceptions.ConnectionException: Login: Checkpoint required. Point your browser to https://www.instagram.com/challenge/action/AXG6u8rHRprRccgzcgLKpQNJzv0wH2s1vajDDBvJi2xj-ypRREOtDgZK3e5Ee8HekhTocA0/AfxgQISXQXjHI8kasJEBP020fZ1GKKqFXXJGeaFzdDei1KKj2Pc3OVuZl5K_J3Og2Mxa0Yx64gubOg/ffc_XxXKP7ukaNEpowIhzsecXIF8lbX5oShdPs03HikkaCikTbJ50ZWn38x98bzTC5ZI/ - follow the instructions, then retry.

修复步骤

1. 处理Instaloader的Checkpoint验证

  • 用已登录该Instagram账号的浏览器打开报错提示的验证链接,完成短信/邮箱等验证步骤,验证后重新运行程序。
  • 优化:使用会话文件避免重复验证,修改pegar_seguidores函数:
    def pegar_seguidores(usuario):
        L = instaloader.Instaloader()
        # 尝试加载已保存的会话
        try:
            L.load_session_from_file('inspiracaobiel')
        except FileNotFoundError:
            # 无会话文件则登录,验证后自动保存会话
            L.login('inspiracaobiel', 'biel123')
            L.save_session_to_file()
        profile = instaloader.Profile.from_username(L.context, usuario)
        
        print(f"Salvando Seguidores de {usuario}...")
        with open("seguidores.txt", "a+") as file:
            for followee in profile.get_followers():
                username = "@" + followee.username
                file.write(username + "\n")
    

2. 修复评论模块的潜在问题

  • 减少元素重复定位:缓存评论框元素,避免重复查找:
    def comentandoPost():
        z = 0
        while True:
            comment_box = driver.find_element(By.XPATH,'//*[@id="react-root"]/section/main/div/div[1]/article/div[3]/section[3]/div/form/textarea')
            comment_box.click()
            comment = lendo_arquivo()
            comment_box.send_keys(comment)
            comment_box.send_keys(' ')
            sleep(10)
            comment_box.send_keys(Keys.ENTER)
            sleep(10)
            # 修正原XPATH的多余*符号
            comment_box.send_keys(Keys.ENTER)
            z += 1
            print(f"已发布 {z} 条评论")
            sleep(60)
    
  • 优化文件读取逻辑:一次性读取粉丝列表并缓存,减少IO操作:
    # 全局缓存粉丝列表
    followers_list = []
    
    def lendo_arquivo():
        global followers_list
        if not followers_list:
            with open("seguidores.txt", "r") as file:
                # 过滤空行
                followers_list = [line.strip() for line in file if line.strip()]
        return random.choice(followers_list)
    

3. 避免重复登录触发安全机制

当前代码同时用Selenium和Instaloader登录同一账号,易触发风控。可通过Selenium获取会话Cookie传递给Instaloader,避免二次登录:

def abrindo_instagram(username,password, url):
    print("Abrindo Instagram...")
    driver.get("https://www.instagram.com/")
    sleep(2)
    print("Fazendo Login no Instagram...")
    driver.find_element(By.XPATH,"//input[@name='username']").send_keys(username)
    driver.find_element(By.XPATH,"//input[@name='password']").send_keys(password)
    driver.find_element(By.XPATH,"//button[@type='submit']").click()

    sleep(10)
    print("Negando Solicitação de Segurança Instagram...")
    driver.find_element(By.XPATH,"//button[text()='Agora não']").click()
    sleep(5)
    driver.find_element(By.XPATH,"//button[text()='Agora não']").click()
    sleep(4)
    print("Acessando o Post do sorteio...")
    driver.get(url)
    
    # 获取Cookie传递给Instaloader
    cookies = driver.get_cookies()
    global L
    L = instaloader.Instaloader()
    L.context.session.cookies.update({c['name']: c['value'] for c in cookies})

# 修改pegar_seguidores函数,不再重复登录
def pegar_seguidores(usuario):
    global L
    profile = instaloader.Profile.from_username(L.context, usuario)
    
    print(f"Salvando Seguidores de {usuario}...")
    with open("seguidores.txt", "a+") as file:
        for followee in profile.get_followers():
            username = "@" + followee.username
            file.write(username + "\n")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 07:05:24