Tab URL Extractor
Uma extensão Chrome (Manifest V3) para coletar URLs das abas, normalizar, deduplicar, agrupar por domínio e exportar em formatos amigáveis para automação.
Por que existe
Transforma “um monte de abas abertas” em um dataset exportável e previsível para pipelines, scripts e apps.
O que ele não faz
Não classifica conteúdo, não faz scraping, não sincroniza dados e não mantém histórico (estado é temporário).
Como usar
Analisar → revisar matrizes → exportar tudo ou por domínio (json/txt/txt-simple).
Pontos principais do código
Onde cada parte do fluxo mora: UI → orquestração → core → infra (downloads).
Overview
Overview
Visão GeralTab URL Extractor (TUE) é uma extensão Chrome (MV3) focada em uma tarefa: extrair URLs das abas abertas, aplicar um processamento técnico consistente (normalização + deduplicação) e entregar um export pronto para ser consumido por scripts e aplicações.
O que faz
Executa uma coleta de URLs, processa tecnicamente e entrega uma URL-Matriz por domínio pronta para export.
Segurança & Privacidade
Processamento local no navegador; sem envio para rede. Ações são iniciadas pelo usuário e validadas antes do export.
Arquitetura
Camadas claras: core (lógica), infrastructure (Chrome APIs), background (fluxo) e popup (UI).
Principais ações
Fluxo minimalista, com estado temporário entre análise e exportação.
- Analisar: coleta abas e monta URL-Matrizes.
- Exportar tudo: gera arquivo com todas as matrizes.
- Exportar por domínio: gera arquivo apenas do grupo escolhido.
- Nova análise: reinicia o estado e reprocessa as abas.
Como usar (30s)
Do objetivo ao arquivo gerado, em poucas etapas.
- Abra o popup da extensão.
- Clique em Analisar.
- Revise os domínios e contagens.
- Escolha o formato (
json/txt/txt-simple) e exporte.
Coletar
Busca abas via Chrome Tabs API e extrai URLs válidas.
Processar
Normaliza e valida URLs; remove duplicatas exatas.
Agrupar
Constrói URL-Matrizes por domínio para revisão e export seletivo.
Exportar
Gera payload e inicia download via chrome.downloads.
Quick Start
Quick Start
Instalação & UsoPrimeiros passos para rodar a extensão no navegador (modo desenvolvedor) e gerar seu primeiro export.
1) Instalar (modo desenvolvedor)
Carregue a pasta do projeto como uma extensão sem compactação.
- Abra
chrome://extensions(ouedge://extensions). - Ative Modo do desenvolvedor.
- Clique em Carregar sem compactação.
- Selecione a pasta raiz do projeto (onde está o
manifest.json).
2) Usar (primeiro export)
Analise as abas, revise os grupos e exporte no formato desejado.
- Abra o popup da extensão.
- Clique em Analisar para gerar as URL-Matrizes.
- Exporte tudo ou por domínio.
- Escolha
json,txtoutxt-simple.
Checklist rápido
Valide o fluxo ponta a ponta em 60s.
- Abra 10+ abas em domínios diferentes e confirme o agrupamento.
- Duplique uma URL e confirme a deduplicação após normalização.
- Gere export em
txt-simplee verifique “uma URL por linha”.
Funcionalidades
Funcionalidades
O que já existeGuia prático do que a extensão faz e como usar.
Coleta de URLs
Extrai URLs das abas abertas (janela atual ou todas), filtrando entradas inválidas/restritas.
Normalização + validação
Reduz ruído (ex.: parâmetros), aplica regras de consistência e valida antes de agrupar/exportar.
Deduplicação exata
Remove duplicatas idênticas após normalização, mantendo saída enxuta e previsível.
URL-Matriz
Agrupa por domínio e produz estrutura estável para UI e export (com contagens por grupo).
Exportação (json/txt/txt-simple)
Gera arquivos para inspeção humana e automação (uma URL por linha no txt-simple).
Download
Inicia o download via chrome.downloads com nome sugerido e MIME adequado ao formato.
Estado temporário em memória
Resultado da análise é mantido apenas durante a sessão (entre analisar e exportar).
Observabilidade (logs)
Logs estruturados ajudam a depurar validações, erros de export e respostas do Service Worker.
Seleção de janelas específicas
Permite escolher janelas específicas de um domínio para exportação seletiva, filtrando por windowId.
Requisitos
Requisitos Funcionais
Escopo AtualEspecificações funcionais implementadas, mapeadas para os módulos responsáveis.
Coleta de abas (Scan)
Coleta URLs de abas abertas (janela atual ou todas as janelas), ignorando URLs inacessíveis/restritas.
Normalização e validação
Normaliza URLs para consistência e valida entradas para reduzir erros no processamento e export.
Deduplicação exata
Remove duplicatas exatas após normalização, mantendo o conjunto final enxuto e previsível.
Agrupamento por domínio (URL-Matriz)
Constrói matrizes por domínio para permitir export total ou seletivo, com contagens por grupo.
Exportação (json / txt / txt-simple)
Gera arquivos em formatos pensados para automação e inspeção humana, com saída consistente.
Download do arquivo exportado
Dispara o download do conteúdo exportado via chrome.downloads com nome sugerido.
Seleção de janelas específicas
Permite escolher janelas específicas de um domínio para exportação seletiva, filtrando URLs por windowId.
Requisitos Não Funcionais
QualidadeRequisitos de qualidade, segurança, compatibilidade e manutenibilidade do projeto.
Compatibilidade (Manifest V3)
Arquitetura e execução compatíveis com MV3: Service Worker como módulo e mensagens runtime.
Privacidade por padrão
Não envia dados para rede/terceiros: processamento e export acontecem localmente no navegador.
Estado temporário e previsível
Mantém matrizes somente em memória entre “Analisar” e “Exportar” (sem persistência/histórico).
Manutenibilidade e separação de camadas
Core isolado de UI e APIs do Chrome, facilitando evolução e testes unitários.
Segurança e validações
Valida entradas e formatos de export para reduzir erros e evitar comportamentos inesperados.
Observabilidade (logs)
Logging estruturado para facilitar diagnóstico durante desenvolvimento e troubleshooting.
Futuros
Req. Funcionais Futuros
RoadmapItens planejados para versões futuras (prospectação). Mantém o foco: extrair e estruturar URLs, sem virar um gerenciador de abas.
Novas fontes de URLs
Adicionar coleta opcional via Bookmarks e Histórico para montar matrizes além das abas abertas.
Export mais flexível
CSV e opções de export (ordenar, incluir/excluir colunas, presets para automação).
Filtros e seleção na UI
Busca/filtros simples por domínio e seleção rápida (ex.: incluir/excluir domínios).
Critérios adicionais de agrupamento
Agrupar por TLD, prefixos de path e regras configuráveis (sem interpretação semântica).
Qualidade (tests + CI)
Testes automatizados do core (normalização/dedup/export) e pipeline de validação em CI.
Casos de Uso
Casos de Uso
CenáriosCenários que descrevem como o usuário executa tarefas, do objetivo ao resultado esperado.
Analisar abas (gerar matrizes)
Objetivo: transformar abas abertas em URL-Matrizes prontas para exportação.
Atores: Usuário
Pré-condições: extensão instalada e popup acessível.
Pós-condições: matrizes exibidas (ou estado vazio/erro com mensagem).
Exportar tudo
Objetivo: exportar todas as matrizes/URLs em um único arquivo.
Atores: Usuário
Pré-condições: análise concluída com matrizes em memória.
Pós-condições: download iniciado no formato escolhido.
Exportar por domínio
Objetivo: exportar apenas uma URL-Matriz específica (um domínio).
Atores: Usuário
Pré-condições: análise concluída e domínio disponível na lista.
Pós-condições: download iniciado contendo somente aquele grupo.
Nova análise (reset)
Objetivo: reiniciar o fluxo para refletir mudanças nas abas/janelas.
Atores: Usuário
Pré-condições: usuário está na tela de resultados ou com estado carregado.
Pós-condições: estado do popup é resetado e uma nova análise pode ser executada.
Exportar por janelas específicas
Objetivo: exportar URLs de um domínio filtradas por janelas específicas.
Atores: Usuário
Pré-condições: análise concluída e domínio com múltiplas janelas disponível.
Pós-condições: download iniciado contendo apenas URLs das janelas selecionadas.
Diagramas de Casos de Uso
FluxoFluxos em cards (sem imagens), no formato passo a passo.
Abrir popup
Usuário abre a extensão e visualiza o estado atual.
Iniciar análise
Usuário aciona “Analisar” para coletar URLs das abas.
Coletar + processar
Coleta abas, aplica validações, normaliza e deduplica URLs.
Agrupar + exibir
Constrói URL-Matrizes por domínio e renderiza o resultado no popup.
Pré-condições
Extensão instalada e permissões concedidas; popup acessível.
Pós-condições
Lista de matrizes exibida (ou estado vazio/erro com mensagem).
Fluxo alternativo
Sem URLs válidas: exibe estado vazio. Em falha: exibe erro e permite tentar novamente.
Escolher formato
Usuário seleciona o formato (json/txt/txt-simple).
Gerar payload
Core gera o conteúdo exportável de forma consistente.
Iniciar download
Infra dispara o download via chrome.downloads.
Confirmar resultado
Usuário recebe o arquivo; pode repetir com outro formato se desejar.
Pré-condições
Uma análise foi executada e há matrizes em memória para export.
Pós-condições
Download iniciado com nome sugerido e mime compatível com o formato.
Fluxo alternativo
Sem análise: UI solicita executar “Analisar” antes. Em erro de download: exibe mensagem e permite repetir.
Selecionar matriz
Usuário escolhe um domínio específico na lista.
Gerar subset
Export limita o payload ao grupo selecionado.
Iniciar download
Infra inicia o download do arquivo do grupo.
Repetir por grupos
Usuário pode exportar outros domínios sem refazer a análise.
Pré-condições
Análise concluída; domínio disponível na lista de matrizes.
Pós-condições
Arquivo exportado contém apenas as URLs do domínio selecionado.
Fluxo alternativo
Domínio vazio: export desabilitado/mostra aviso. Em erro: exibe mensagem e mantém a lista.
Abrir resultados
Usuário está na tela de resultados ou com estado carregado.
Acionar reset
Usuário clica em “Nova análise”.
Limpar estado UI
Popup volta ao estado inicial e limpa indicadores do resultado anterior.
Reanalisar
Usuário executa uma nova análise para refletir mudanças nas abas.
Pré-condições
Usuário tem a extensão aberta; deseja atualizar o dataset.
Pós-condições
Fluxo reiniciado; uma nova análise pode ser executada imediatamente.
Fluxo alternativo
Se o popup já está no estado inicial, o reset apenas mantém o estado e orienta a analisar.
Abrir seleção de janelas
Usuário clica no botão de seleção de janelas em um domínio.
Selecionar janelas
Usuário marca as janelas desejadas via checkboxes na lista.
Filtrar + gerar subset
Export filtra URLs pelo windowId das janelas selecionadas.
Iniciar download
Infra inicia o download do arquivo filtrado por janelas.
Pré-condições
Análise concluída; domínio com múltiplas janelas disponível.
Pós-condições
Arquivo exportado contém apenas URLs das janelas selecionadas.
Fluxo alternativo
Nenhuma janela selecionada: botão de export desabilitado. Em erro: exibe mensagem e permite tentar novamente.
Arquitetura
Arquitetura e Estrutura Completa
Clean Architecture v1.0Clean Architecture com dependências unidirecionais (camadas externas dependem das internas). Separação clara entre core (puro), orquestração (MV3) e integrações com Chrome APIs.
Core
Lógica de negócio pura (core/)
Browser
Integração com Chrome APIs (infrastructure/)
Orquestração
Coordenação de fluxos MV3 (background/)
UI
Interface do usuário (popup/)
chrome.downloads.Tecnologias
Tecnologias Utilizadas
StackStack do projeto e onde cada tecnologia aparece no código.
JavaScript (ES Modules)
JSUso no projeto: módulos independentes por responsabilidade (core/infra/background/popup).
Clean Architecture (camadas)
CAUso no projeto: core puro; infraestrutura isola APIs; service worker coordena fluxos; UI só apresenta.
Tipagem via JSDoc
TypesUso no projeto: estrutura de dados documentada para manter matrizes/export previsíveis.
Manifest V3
MV3Uso no projeto: define permissões, popup e Service Worker como módulo.
Chrome Tabs API
APIUso no projeto: coleta URLs de abas abertas para montar o dataset.
Chrome Downloads API
APIUso no projeto: dispara o download do conteúdo exportado (com nome/mime adequados).
HTML + CSS (Popup)
UIUso no projeto: interface enxuta com estados claros (carregando/resultado/erro).
Mensageria runtime
runtimeUso no projeto: UI manda comandos; Service Worker responde com resultados/erros.
Documentação
DOCUso no projeto: guias técnicos (dados, fluxos e formatos) + página consolidada (este HTML).
Desenvolvimento
Desenvolvimento
Como evoluirDecisões práticas para manter o projeto simples, seguro e evolutivo — sempre preservando a separação de camadas.
Visão Geral
A extensão é construída em JavaScript com ES Modules e Manifest V3, sem dependências externas no runtime. O core permanece independente das APIs do Chrome.
Segurança
Permissões mínimas e ações explícitas do usuário. Sem tráfego de rede: os dados ficam locais.
Desempenho
Coleta apenas dados essenciais e processa em memória; UI renderiza grupos de forma direta para evitar overhead.
Estrutura & Boas Práticas
Regras de evolução: mudanças de regra em core/; integrações em infrastructure/; coordenação no SW; UI só apresenta.
Testes & CI
O caminho natural é começar testando o core (normalização/dedup/export) e automatizar validações de regressão.
Contribuição
Para evoluir sem quebrar camadas: implemente regras no core, mantenha APIs em infrastructure e conecte tudo via mensagens no Service Worker.
background/ Service Worker (MV3)
core/ Lógica de processamento (browser-agnostic)
infrastructure/ Integrações com APIs do Chrome (tabs, downloads)
popup/ UI (HTML/CSS/JS)
utils/ Constantes, logger e validadores
types/ Tipos via JSDoc
docs/ Documentação
- Abrir 10–20 abas com domínios diferentes e confirmar agrupamento por domínio.
- Duplicar a mesma URL em abas diferentes e confirmar deduplicação após normalização.
- Exportar
json,txtetxt-simplee validar o arquivo gerado.