Automatização do Instagram com Instagrapi: Guia Completo

Mark Ponomarev

Mark Ponomarev

5 junho 2025

Automatização do Instagram com Instagrapi: Guia Completo

Automatizar tarefas no Instagram pode simplificar significativamente a forma como você gerencia sua presença online. instagrapi é uma biblioteca Python projetada para ajudá-lo a fazer exatamente isso. Ela interage diretamente com os próprios sistemas de backend do Instagram—os mesmos que o aplicativo móvel oficial usa. Essa comunicação direta torna o instagrapi rápido e eficiente, e ele não requer um navegador web para operar.

Este guia tem como objetivo fornecer um caminho claro para começar com o instagrapi. Abordaremos como instalá-lo, fazer login seguro em sua conta do Instagram, realizar ações comuns como interagir com posts e usuários, fazer upload de conteúdo e mencionar práticas essenciais para garantir que sua automação seja segura e eficaz.

💡
Quer uma ótima ferramenta de Teste de API que gera Documentação de API bonita?

Quer uma plataforma integrada e completa para sua Equipe de Desenvolvedores trabalhar em conjunto com máxima produtividade?

Apidog atende a todas as suas demandas e substitui o Postman por um preço muito mais acessível!
button

Instalando o Instagrapi em Seu Sistema

Antes de usar o instagrapi, você precisa instalá-lo. Primeiro, certifique-se de ter o Python instalado em seu computador; o instagrapi funciona melhor com a versão 3.9 ou mais recente do Python. Você pode verificar sua versão do Python abrindo um terminal (Prompt de Comando, PowerShell ou Terminal no macOS/Linux) e digitando python --version ou python3 --version.

Assim que o Python estiver pronto, instalar o instagrapi é simples usando o pip, o instalador de pacotes do Python. Em seu terminal, execute o seguinte comando:

pip install instagrapi

Se você usar python3 especificamente para sua instalação do Python 3, talvez precise de:

python3 -m pip install instagrapi

Este comando fará o download e instalará o instagrapi e quaisquer outras bibliotecas das quais ele dependa. Para um gerenciamento de projeto mais limpo, é frequentemente recomendado usar ambientes virtuais Python, que isolam as dependências do projeto. Você pode criar um com python3 -m venv your_project_name, ativá-lo e então executar o comando pip install instagrapi dentro dele.

Conectando-se à Sua Conta do Instagram

Para realizar ações no Instagram, seu script precisa fazer login. O instagrapi lida com esse processo. O primeiro passo em seu script Python será importar a classe Client e criar uma instância dela. Este objeto Client será sua ferramenta principal para todas as interações.

from instagrapi import Client
import os
import time
import random

cl = Client()

Agora, vamos fazer login. É altamente recomendável não codificar seu nome de usuário e senha diretamente em seu script. Usar variáveis de ambiente é um método mais seguro.

INSTAGRAM_USERNAME = os.getenv("INSTA_USERNAME", "your_insta_username")
INSTAGRAM_PASSWORD = os.getenv("INSTA_PASSWORD", "your_insta_password")

try:
    cl.login(INSTAGRAM_USERNAME, INSTAGRAM_PASSWORD)
    print(f"Login successful as @{INSTAGRAM_USERNAME}!")
except Exception as e:
    print(f"Login failed for @{INSTAGRAM_USERNAME}. Error: {e}")

Se sua conta tiver a Autenticação de Dois Fatores (2FA) habilitada, o que é ótimo para segurança, o método login exigirá um parâmetro adicional verification_code. Você normalmente obteria esse código de seu aplicativo autenticador ou de um SMS e o passaria durante a chamada de login: cl.login(INSTAGRAM_USERNAME, INSTAGRAM_PASSWORD, verification_code="YOUR_2FA_CODE").

Fazer login constantemente com nome de usuário e senha pode ser ineficiente e pode atrair atenção indesejada do Instagram. Uma abordagem mais inteligente é salvar sua sessão de login após a primeira autenticação bem-sucedida e, em seguida, recarregar essa sessão para futuras execuções do script.

Veja como você pode gerenciar sessões:

from instagrapi.exceptions import LoginRequired

SESSION_FILE_PATH = "my_active_session.json"

if os.path.exists(SESSION_FILE_PATH):
    cl.load_settings(SESSION_FILE_PATH)
    print(f"Loaded session from {SESSION_FILE_PATH}.")
    try:
        cl.login(INSTAGRAM_USERNAME, INSTAGRAM_PASSWORD)
        cl.get_timeline_feed()
        print("Session is valid and login successful using saved session.")
    except LoginRequired:
        print("Saved session was invalid. Need to perform a fresh login.")
        try:
            cl.login(INSTAGRAM_USERNAME, INSTAGRAM_PASSWORD)
            cl.dump_settings(SESSION_FILE_PATH)
            print("Fresh login successful, new session saved.")
        except Exception as e_relogin:
            print(f"Fresh login failed after invalid session: {e_relogin}")
    except Exception as e_session_use:
        print(f"Error while using saved session: {e_session_use}. Trying fresh login.")
        try:
            cl.login(INSTAGRAM_USERNAME, INSTAGRAM_PASSWORD)
            cl.dump_settings(SESSION_FILE_PATH)
            print("Fresh login successful after session error, new session saved.")
        except Exception as e_fresh_fallback:
            print(f"Fresh login fallback also failed: {e_fresh_fallback}")

else:
    print("No session file found. Performing fresh login...")
    try:
        cl.login(INSTAGRAM_USERNAME, INSTAGRAM_PASSWORD)
        cl.dump_settings(SESSION_FILE_PATH)
        print(f"Fresh login successful, session saved to {SESSION_FILE_PATH}.")
    except Exception as e_initial_login:
        print(f"Initial fresh login failed: {e_initial_login}")

if cl.user_id:
    print(f"Successfully authenticated. User ID: {cl.user_id}")
else:
    print("Authentication failed. Check credentials and previous error messages.")

Esta abordagem combinada tenta usar uma sessão salva primeiro e recorre a um novo login, se necessário, salvando a nova sessão para a próxima vez.

Interações Essenciais do Instagram com Instagrapi

Uma vez logado, você pode começar a interagir com o Instagram. Assuma que cl é seu objeto Client logado com sucesso para os exemplos abaixo.

Obtendo Informações do Usuário
Você pode buscar informações públicas sobre qualquer usuário do Instagram se souber o nome de usuário dele. Isso inclui seu ID de Usuário exclusivo (PK), nome completo, biografia, contagem de seguidores, etc.

target_user = "instagram"
try:
    user_id_num = cl.user_id_from_username(target_user)
    print(f"The unique User ID for @{target_user} is {user_id_num}.")

    user_details = cl.user_info_by_username(target_user)
    print(f"\nDetails for @{user_details.username}:")
    print(f"  Followers: {user_details.follower_count}")
    print(f"  Bio: {user_details.biography[:50]}...")
except Exception as e:
    print(f"Could not fetch info for @{target_user}. Error: {e}")

Interagindo com Posts (Mídia)
Os posts do Instagram são referidos como "mídia" no instagrapi. Para interagir com um post, você geralmente precisa de seu media_pk (um ID numérico exclusivo para o post). Você pode obter este media_pk a partir da URL do post. O exemplo a seguir mostra como obter detalhes do post. Interações como curtir ou comentar são muito sensíveis à automação; use tais recursos com moderação e sempre eticamente.

example_post_url = "https://www.instagram.com/p/C_q9Jg1NAn1/"

try:
    media_pk_val = cl.media_pk_from_url(example_post_url)
    print(f"The media_pk for the post is: {media_pk_val}")

    media_details = cl.media_info(media_pk_val)
    print(f"\nPost by @{media_details.user.username} has {media_details.like_count} likes.")
    print(f"Caption snippet: {media_details.caption_text[:60]}...")
    
    string_media_id_for_action = cl.media_id(media_pk_val)
    print(f"String media_id for actions (like liking/commenting): {string_media_id_for_action}")
    
except Exception as e:
    print(f"Error interacting with post {example_post_url}. Error: {e}")

Para curtir um post, você usaria cl.media_like(string_media_id_for_action). Para comentar, você usaria cl.media_comment(string_media_id_for_action, text="Seu comentário"). Sempre inclua atrasos (time.sleep()) após tais ações.

Fazendo Upload de Conteúdo
O instagrapi permite que você faça upload de fotos, vídeos, álbuns e stories.

Fazendo Upload de uma Foto:
Você precisará do caminho para um arquivo de imagem JPG. O exemplo abaixo descreve a estrutura; você precisará fornecer um caminho válido para uma imagem.

from pathlib import Path

image_path_to_upload = Path("your_image.jpg")
photo_caption = "My first photo upload with Instagrapi! #Python #Automation"

if image_path_to_upload.exists() and image_path_to_upload.suffix.lower() == ".jpg":
    try:
        uploaded_photo = cl.photo_upload(image_path_to_upload, photo_caption)
        print(f"Photo uploaded! View it at: https://www.instagram.com/p/{uploaded_photo.code}/")
    except Exception as e:
        print(f"Photo upload failed for {image_path_to_upload}. Error: {e}")
else:
    print(f"Replace 'your_image.jpg' with a valid path to a JPG file.")

Fazendo Upload de um Story:
Stories geralmente usam uma proporção de 9:16. Você pode fazer upload de fotos ou vídeos. O código para fazer upload de um story de foto é semelhante a um post de foto regular, mas usa photo_upload_to_story.

from instagrapi.types import StoryMention, StoryLink

story_image_path = Path("your_story_image.jpg")

if story_image_path.exists() and story_image_path.suffix.lower() == ".jpg":
    try:
        uploaded_story = cl.photo_upload_to_story(
            story_image_path,
            caption="My Instagrapi Story!"
        )
        print(f"Story uploaded successfully! PK: {uploaded_story.pk}")
    except Exception as e:
        print(f"Story upload failed for {story_image_path}. Error: {e}")
else:
    print(f"Replace 'your_story_image.jpg' with a valid path to a 9:16 JPG file for stories.")

Você pode adicionar elementos interativos como mentions (menções) e links (links) preparando objetos StoryMention ou StoryLink e passando-os como parâmetros para photo_upload_to_story.

Considerações Chave para uma Automação Suave

Ao automatizar ações no Instagram, algumas práticas são cruciais para a confiabilidade e para evitar problemas com sua conta.

Introduza Atrasos: Usuários humanos não realizam ações instantaneamente uma após a outra. Seu script também não deveria. Use time.sleep(random.uniform(min_seconds, max_seconds)) entre as ações para imitar padrões de interação naturais. O próprio instagrapi tem uma configuração cl.delay_range = [min, max] que adiciona alguns atrasos automáticos para certas operações.

Considere Proxies para Uso Intensivo: Se seu script fizer um grande número de requisições, ou se você gerenciar várias contas a partir do mesmo endereço IP, o Instagram pode limitar sua atividade. Usar um servidor proxy (cl.set_proxy("sua_string_proxy")) pode ajudar a distribuir suas requisições e fazer parecer que elas vêm de locais diferentes.

Lide com Erros Potenciais: Problemas de rede podem ocorrer, a API do Instagram pode mudar, ou você pode atingir um limite de taxa (rate limit). Envolva suas chamadas instagrapi em blocos try...except para capturar esses erros de forma elegante. O instagrapi possui exceções específicas como RateLimitError, UserNotFound, MediaNotFound, etc., que você pode capturar para um tratamento de erro mais direcionado.

Use de Forma Responsável e Ética: A automação é poderosa. Evite spam, respeite a privacidade do usuário e não se envolva em atividades que violem os Termos de Serviço ou as Diretrizes da Comunidade do Instagram. O objetivo da automação deve ser aprimorar a interação genuína ou gerenciar sua presença de forma eficiente, não manipular ou incomodar.

Um Exemplo Simples de Automação: Curtindo Posts Recentes de uma Hashtag

Vamos criar um pequeno script que encontra posts recentes para uma hashtag específica e curte alguns deles. Isso demonstra a combinação de vários recursos do instagrapi. Use este exemplo com extrema cautela e apenas em hashtags e em quantidades que estejam alinhadas com o uso responsável. Este código é ilustrativo e o uso agressivo pode prejudicar sua conta.

target_hashtag_for_liking = "pythonprogramming"
number_of_posts_to_like = 1

try:
    print(f"Fetching recent media for #{target_hashtag_for_liking}...")
    recent_hashtag_media = cl.hashtag_medias_recent(target_hashtag_for_liking, amount=number_of_posts_to_like * 2)

    liked_count = 0
    if recent_hashtag_media:
        for media_item in recent_hashtag_media:
            if liked_count >= number_of_posts_to_like:
                break

            if not media_item.has_liked:
                print(f"  Attempting to like post PK {media_item.pk} by @{media_item.user.username}...")
                try:
                    media_id_str_to_like = cl.media_id(media_item.pk)
                    cl.media_like(media_id_str_to_like)
                    liked_count += 1
                    print(f"    Successfully liked. Liked {liked_count}/{number_of_posts_to_like} posts so far.")
                    time.sleep(random.uniform(15, 25))
                except Exception as e_like:
                    print(f"    Could not like post PK {media_item.pk}. Error: {e_like}")
            else:
                print(f"  Skipping already liked post PK {media_item.pk} by @{media_item.user.username}.")
        print(f"\nFinished liking script for #{target_hashtag_for_liking}. Total liked in this run: {liked_count}")
    else:
        print(f"No recent media found for #{target_hashtag_for_liking}.")

except Exception as e_hashtag_script:
    print(f"An error occurred in the hashtag liking script: {e_hashtag_script}")

Este exemplo é para demonstração. Automatizar curtidas, especialmente em grande número, pode ser facilmente sinalizado pelo Instagram. Sempre priorize o engajamento genuíno em vez de ações automatizadas em massa.

Avançando com Instagrapi

O instagrapi oferece um conjunto profundo de ferramentas para interagir com o Instagram. Este guia arranhou a superfície, mostrando como configurar, fazer login e realizar algumas das ações mais comuns.

Para realmente dominar o instagrapi, explore sua documentação oficial. O arquivo README.md no repositório Instagrapi no GitHub é o melhor ponto de partida, geralmente linkando para guias mais detalhados e referências de API dentro de sua pasta docs. Esses recursos cobrem muitos outros recursos, configurações avançadas e tipos específicos para vários objetos do Instagram.

Lembre-se que a plataforma do Instagram e sua API podem mudar, então o que funciona hoje pode precisar de ajustes amanhã. Manter-se atualizado com a biblioteca instagrapi e as discussões da comunidade pode ajudá-lo a se adaptar. Boa automação, e faça isso com responsabilidade!

💡
Quer uma ótima ferramenta de Teste de API que gera Documentação de API bonita?

Quer uma plataforma integrada e completa para sua Equipe de Desenvolvedores trabalhar em conjunto com máxima produtividade?

Apidog atende a todas as suas demandas e substitui o Postman por um preço muito mais acessível!
button

Pratique o design de API no Apidog

Descubra uma forma mais fácil de construir e usar APIs