↓ Ir para o conteúdo principal

Ghost profile: limpando 14 anos de comentários do Instagram sem API

Tabela de conteúdos
Ghost profile - Este artigo faz parte de uma série de artigos.
Parte 1: Esse Artigo

Linhares, domingo, 11 de outubro de 2026 — 16h10 Por Douglas Buzatto Vago


Minha conta do Instagram é de 2012. Quatorze anos de comentários espalhados por posts de amigos, páginas que nem existem mais, discussões que eu não lembro de ter entrado e piadas que só faziam sentido naquela época.

Um dia bateu a vontade de higienizar o perfil. E aí veio a primeira descoberta: o Instagram não tem botão de “apagar todos os meus comentários”. Tem uma tela, Sua atividade → Interações → Comentários, onde você vai marcando de um em um.

Com milhares de comentários, isso não é tarefa, é castigo.

A ideia é velha, a execução é nova
#

A primeira vez que pensei nisso foi em dezembro de 2024. Achava que dava para achar meus comentários com busca avançada no Google e apagar uns 50 por dia. A ideia ficou na gaveta.

Em setembro de 2026 eu tirei da gaveta, com uma regra que não abri mão:

Só a interface oficial. Nada de API privada, nada de endpoint interno, nada de interceptar tráfego.

A API oficial da Meta só atende contas comerciais e não foi feita pra isso. O GraphQL interno e o mitmproxy até funcionariam, mas o risco de banimento é real, e eu não ia arriscar uma conta de 2012 por pressa. Então a ferramenta faz exatamente o que eu faria com o mouse, numa sessão de navegador já logada. Só que com paciência infinita.

Nasceu o ghost profile.

Coletar, curar, excluir
#

A arquitetura ficou em três etapas, e uma só libera quando a anterior termina:

  1. Coleta: o navegador percorre a tela de comentários e grava tudo num banco SQLite, um por conta.
  2. Curadoria: uma página HTML local, servida na minha própria máquina, mostra tudo o que foi coletado. Eu marco o que apagar e o que manter, filtrando por período.
  3. Exclusão: em lotes pequenos, com ritmo de gente.

A stack é simples de propósito: Python + Playwright com o Chromium gerenciado pelo próprio Playwright, SQLite, e o servidor HTTP da biblioteca padrão do Python para o painel. Nada sai da máquina: senha, cookie e dados da conta ficam no meu disco.

As pedras no caminho
#

O 2FA a cada execução
#

A primeira versão salvava a sessão em cookies. Toda vez que eu rodava, o Instagram desconfiava e pedia o código de novo. A solução foi usar um perfil persistente do Chromium (launch_persistent_context): o navegador guarda o perfil inteiro como se fosse o meu Chrome de sempre. Logou uma vez, ficou logado.

Botões que não querem ser clicados
#

A interface do Instagram é montada por um framework próprio, e muitos botões ficam com uma camada por cima que “rouba” o clique. O Playwright reclamava que outro elemento intercepts pointer events e a execução morria no meio.

A saída foi clicar via JavaScript, direto no elemento:

elemento.evaluate("el => el.click()")

Troquei todos os cliques por esse padrão e o problema sumiu.

Seletores que não quebram
#

Classes CSS do Instagram mudam o tempo todo, porque são geradas automaticamente. Então a ferramenta nunca usa classe: só role e aria-label, os atributos de acessibilidade. Eles existem para leitores de tela, e por isso mudam muito menos. Ficaram estáveis do começo ao fim.

Rolar até o fim do mundo
#

A primeira coleta era rolagem infinita: descer, descer, descer. Lento e frágil. A virada foi usar o filtro de data do próprio Instagram e varrer a conta em janelas trimestrais, de três em três meses. A coleta ficou muito mais rápida e previsível.

Datas que envelhecem
#

O Instagram mostra datas relativas: “3 sem”, “2 a”. Se eu guardasse isso, o mesmo comentário pareceria outro na coleta seguinte, porque “3 sem” vira “4 sem”. Duas decisões resolveram:

  • a chave de deduplicação usa autor, texto e miniatura do post, nunca a data;
  • a data estimada é calculada no momento da coleta (agora menos “3 sem”) e gravada fixa.

Onde está
#

No último registro, o banco tinha 2.589 comentários coletados, e as primeiras dezenas já foram apagadas. O ritmo é conservador de propósito: a Meta não publica limites para exclusão de comentários, e ação rápida demais em sequência pode render um bloqueio temporário. Entre os lotes, a ferramenta faz pausas aleatórias e agrupa os alvos por período para não rolar a lista inteira toda vez.

Ainda tem um bug sendo domado: a miniatura do post às vezes vem vazia de um lado e não do outro, e a exclusão não acha o alvo. A correção foi usar o texto como chave principal e a miniatura só como desempate.

Próximos passos
#

  • Curtidas e reposts: o mesmo esquema de coleta, curadoria e exclusão, como novos módulos do ghost profile.
  • Talvez um serviço: muita gente tem o mesmo problema que eu. Higienizar perfil antes de uma entrevista de emprego, de um concurso ou só para virar a página. Cobrar pelo volume ou pelo recorte (“só o último ano”, “só esses 100”) faz sentido.

Uma observação honesta: automatizar a interface de qualquer rede social é uma área cinzenta nos termos de uso. Por isso a ferramenta só mexe na minha própria conta, imita o ritmo de uma pessoa e não toca em nada que eu não pudesse fazer com o dedo.

O objetivo, no fim, é simples: decidir o que da minha história online fica de pé.

douglas@undersystem:~/projetos/instagram-cleanup$ python3 server.py
[ ghost profile ] painel em http://127.0.0.1:8777
[ coleta    ] 2589 comentários no banco
[ exclusão  ] modo fantasma: lento, paciente, invisível
Autor
Douglas Vago
Hacker autodidata do norte do Espírito Santo. Escrevo sobre o que monto, quebro e conserto no meu home lab.
Ghost profile - Este artigo faz parte de uma série de artigos.
Parte 1: Esse Artigo