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:
- Coleta: o navegador percorre a tela de comentários e grava tudo num banco SQLite, um por conta.
- 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.
- 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