animes-scraper
v3.0.1
Published
Scraper completo para animesonlinecc.to — Search, Details, Episode, Download, Genres, VideoProxy, BloggerResolver. 100% compatível com Termux/Android.
Maintainers
Readme
🎬 Animes Scraper
Scraper completo para animesonlinecc.to
Search · Details · Episodes · Download · Genres · VideoProxy · BloggerResolver
100% compatível com Termux/Android · CommonJS · Zero compilação necessária
By @lucas_mod_domina
⚠️ Requisito Importante: IP Residencial ou Datacenter Brasileiro
O site animesonlinecc.to utiliza proteção Cloudflare que bloqueia IPs de datacenter internacionais com erro 403 Forbidden.
O que funciona:
| Ambiente | Funciona? | Detalhes | |----------|-----------|---------| | Termux (Android) | ✅ Sim | IP residencial do celular | | Casa/VPN residencial | ✅ Sim | IP residencial normal | | Datacenter brasileiro | ✅ Geralmente | Alguns DCs BR não são bloqueados | | VPS internacional | ❌ Bloqueado | Cloudflare detecta e bloqueia | | AWS/GCP/Azure | ❌ Bloqueado | IPs de cloud são bloqueados |
Como usar de servidor:
Configure um proxy residencial brasileiro antes de fazer requisições:
// Via código
const { http } = require('animes-scraper');
http.setProxy('http://user:pass@proxy-host:port');
// Via variável de ambiente
// ANIMES_PROXY=http://user:pass@proxy-host:port node seu-script.jsProvedores de proxy residencial recomendados:
- Bright Data — Proxies residenciais BR
- Smartproxy — Proxies residenciais com rotação
- Oxylabs — Datacenter proxies BR
- Qualquer proxy SOCKS5/HTTP com IP brasileiro
✨ Funcionalidades
| Módulo | Descrição | Método |
|--------|-----------|--------|
| Home | Página inicial (populares, últimos eps, recentes, categorias, letras) | obterDados() |
| Search | Pesquisa de animes por nome + paginação | pesquisar(nome, pagina) |
| AnimeDetails | Detalhes completos (thumbnail, tags, sinopse, temporadas, eps, comentários) | obterDetalhes(slug) |
| Episode | Detalhes + download de episódio (SD/HD, dublado/legendado, bypass 403) | obterDetalhes(slug) |
| Genres | Listagem de todos os gêneros e letras | obterGeneros() |
| AnimesByGenre | Animes por gênero, letra, dublados, legendados, todos | listarPorGenero() / listarPorLetra() / listarDublados() / listarLegendados() / listarTodos() |
| ListEpisodes | Lista de episódios recentes | listar(pagina) |
| Popular | Animes populares | obterPopulares() |
| BloggerResolver | Resolve URLs Blogger → MP4 direto (5 estratégias!) | resolve(bloggerUrl, tipo) |
| VideoProxy | Bypass 403 do googlevideo + proxy local + CDN temporário | downloadVideo() / startProxy() / uploadToCdn() |
| Environment | Detecção automática de ambiente + gerenciamento de paths | getEnvironmentInfo() / cleanupBinaries() |
📦 Instalação
npm (recomendado)
npm install animes-scraperTermux
pkg install nodejs -y
npm install animes-scraper
# Setup automático (yt-dlp + Chromium)
node node_modules/animes-scraper/setup.jsGit
git clone <repo>
cd animes-scraper
npm install
node setup.js🚀 Uso
Importação
const { Home, Search, AnimeDetails, Episode, Genres, AnimesByGenre, ListEpisodes, Popular, BloggerResolver, VideoProxy, Environment, http } = require('animes-scraper');Configurar Proxy (se necessário)
// Proxy residencial para bypass do Cloudflare
http.setProxy('http://user:pass@proxy-host:port');
// Verificar proxy configurado
console.log(http.getProxy());Página Inicial
const home = new Home();
const resultado = await home.obterDados();
// resultado.resultados.animesOnline → Animes em destaque
// resultado.resultados.ultimosEpisodios → Últimos episódios
// resultado.resultados.animesRecentes → Animes recentes
// resultado.resultados.populares → Populares
// resultado.resultados.categoriasPorAno → Categorias por ano
// resultado.resultados.letras → Letras A-ZPesquisa
const search = new Search();
const resultado = await search.pesquisar('Overflow');
const pagina2 = await search.pesquisar('Overflow', 2);Detalhes do Anime
const animeDetails = new AnimeDetails();
const resultado = await animeDetails.obterDetalhes('darling-in-the-franxx');
// resultado.resultados.temporadas[0].episodios → Lista de episódiosDetalhes do Episódio + Vídeo
const episode = new Episode();
const resultado = await episode.obterDetalhes('darling-in-the-franxx-episodio-1');
// resultado.resultados.videoLinks → Links do player (com resolução)
// resultado.resultados.downloadLinks → Links de download (SD/HD)
// resultado.resultados.linksAcesso → Comandos curl/wget com bypass 403
// resultado.resultados.opcoesDubLeg → Dublado/Legendado disponíveisDownload com Bypass 403
const proxy = new VideoProxy();
// Download direto (bypass automático)
const download = await proxy.downloadVideo('https://rr5---sn-xxx.googlevideo.com/videoplayback?...', '/sdcard/Download/anime.mp4');
// Proxy local (streaming no VLC)
await proxy.startProxy(3000);
// Abra no VLC: http://localhost:3000/proxy?url=ENCODED_GOOGLEVIDEO_URL
// Upload para CDN temporária
const cdn = await proxy.uploadToCdn(googlevideoUrl, 'file.io');
console.log(cdn.resultados.cdnUrl); // Link público temporárioGêneros e Listagens
const animesByGenre = new AnimesByGenre();
await animesByGenre.listarPorGenero('acao'); // Por gênero
await animesByGenre.listarPorLetra('A'); // Por letra
await animesByGenre.listarDublados(); // Dublados
await animesByGenre.listarLegendados(); // Legendados
await animesByGenre.listarTodos(); // TodosBloggerResolver (avançado)
const resolver = new BloggerResolver();
// Resolver URL do Blogger para MP4
const fontes = await resolver.resolve('https://www.blogger.com/video.g?token=AD6v5dz...', 'legendado');
// fontes → [{ url, qualidade, resolucao, tipo, direto, formatId, fonte }]
// Diagnosticar ambiente Chromium
const info = await resolver.getChromeInfo();Ambiente e Limpeza
// Informações do ambiente
const info = Environment.getEnvironmentInfo();
// Limpar binários temporários (libera espaço no Termux)
const cleanup = Environment.cleanupBinaries(true); // force=true
// Remove Chromium, yt-dlp, etc. (~300MB liberados)🛡️ Bypass do Cloudflare
O scraper usa 3 camadas de bypass para acessar o site:
- https nativo — Headers de navegador real + cookies
- VM Solver — Resolve challenges JS do Cloudflare via
vmnativo do Node.js - cloudscraper — Fallback robusto para challenges complexos
🎥 Resolução de Vídeo do Blogger
O Blogger mudou para o WIZ framework em 2025/2026 e não retorna mais VIDEO_CONFIG. O BloggerResolver usa 5 estratégias em cascata — se uma falha, tenta a próxima automaticamente:
| # | Estratégia | Precisa de binário? | Funciona no Termux? | Método de instalação |
|---|-----------|---------------------|---------------------|---------------------|
| 0 | Pure JS | ❌ Não | ✅ Sim | Nenhum — 100% JavaScript |
| 1 | ytdl-core | ❌ Não | ✅ Sim | npm install ytdl-core |
| 2 | VIDEO_CONFIG | ❌ Não | ✅ Sim | Nenhum — formato antigo |
| 3 | yt-dlp | ⚠️ Opcional | ✅ pip install | pip → npm → wget → curl → https |
| 4 | Headless Browser | ✅ Chromium | ⚠️ Precisa grun | puppeteer → pkg → wget → curl → https |
Instalação Multi-Fallback 🔁
O scraper nunca desiste! Se um método de instalação falha, tenta o próximo automaticamente:
yt-dlp:
1. PATH → Já está instalado no sistema
2. pip/pip3 → Python package manager
3. npm → youtube-dl-wrap (auto-download)
4. wget → Download direto do GitHub
5. curl → Fallback
6. https → Node.js nativo, funciona SEMPREChromium:
1. PATH → Já instalado no sistema
2. puppeteer → puppeteer.browsers.install()
3. pkg → Termux x11-repo
4. wget → Download do GitHub (headless-shell)
5. curl → Fallback
6. https → Node.js nativo, funciona SEMPREytdl-core é a melhor opção para Termux! É um pacote npm puro em JavaScript que resolve vídeos do YouTube sem precisar de nenhum binário — zero pip, zero grun, zero chromium.
Binários Temporários
No Termux, os binários (Chromium ~250MB, yt-dlp ~15MB) são armazenados em diretório temporário gravável ($PREFIX/tmp/) e removidos automaticamente após 4 horas de inatividade para economizar espaço.
// Limpeza manual
Environment.cleanupBinaries(true); // Remove tudo agora
// Marcar como em uso (impede limpeza automática)
Environment.markBinInUse();📋 Formato de Resposta
Todas as funções retornam:
{
"status": true,
"criador": "@lucas_mod_domina",
"resultados": { ... }
}Em caso de erro:
{
"status": false,
"criador": "@lucas_mod_domina",
"resultados": null,
"erro": "Descrição do erro"
}🔧 Estrutura do Projeto
animes-scraper/
├── package.json # npm-ready (v3.0.1)
├── README.md # Este arquivo
├── LICENSE # MIT
├── .npmignore # Exclui testes e samples do npm
├── setup.js # Setup automático
├── teste.js # Menu interativo (remover antes de publicar)
└── src/
├── index.js # Entry point
├── http.js # HTTP + Cloudflare bypass + proxy residencial
├── Environment.js # Detecção de ambiente + paths + cleanup
├── BloggerResolver.js # Resolve URLs Blogger → MP4
├── VideoProxy.js # Bypass 403 + proxy local + CDN
├── Home.js # Página inicial
├── Search.js # Pesquisa
├── AnimeDetails.js # Detalhes do anime
├── Episode.js # Detalhes do episódio
├── Genres.js # Listagem de gêneros
├── AnimesByGenre.js # Animes por gênero/letra
├── ListEpisodes.js # Lista de episódios
└── Popular.js # Animes populares🧪 Testes
# Menu interativo (20+ opções)
node teste.js
# Setup automático
node setup.js🔑 Proxy Residencial — Detalhes Técnicos
Como funciona o bloqueio do Cloudflare
- O Cloudflare analisa o IP de origem da requisição
- IPs de datacenter (AWS, GCP, Azure, DigitalOcean, etc.) recebem 403 Forbidden
- IPs residenciais passam normalmente (ou recebem challenge que resolvemos)
- Alguns datacenters brasileiros passam porque não estão na blacklist
Formatos de proxy aceitos
http://user:pass@host:port # HTTP com autenticação
http://host:port # HTTP sem autenticação
socks5://user:pass@host:port # SOCKS5 (via cloudscraper)
socks5://host:port # SOCKS5 sem autenticaçãoConfiguração
// Método 1: Via código
const { http } = require('animes-scraper');
http.setProxy('http://user:[email protected]:8080');
// Método 2: Via variável de ambiente
// ANIMES_PROXY=http://user:[email protected]:8080
// Método 3: Via opção por requisição
const { get } = require('animes-scraper/src/http');
const html = await get('/search/Overflow/', { proxy: 'http://user:pass@host:port' });
// Remover proxy
http.setProxy(null);📱 Termux — Notas Específicas
Armazenamento de binários
No Termux, se o projeto estiver em /storage/emulated/0/ (FAT32/exFAT), binários não executam porque FAT32 não suporta chmod +x. O scraper resolve isso automaticamente:
- Binários são movidos para
$PREFIX/tmp/animes-scraper/bin/(ext4, gravável) - Limpeza automática após 4 horas de inatividade
- Chromium funciona via
grun(glibc-runner) oupip install yt-dlp
Instalação completa no Termux
pkg install nodejs -y
npm install animes-scraper
# Setup automático (instala yt-dlp via pip + tenta Chromium)
node node_modules/animes-scraper/setup.js
# Teste
node node_modules/animes-scraper/teste.jsSe grun não estiver disponível
# Tente instalar manualmente
pkg install glibc-repo -y
pkg install glibc-runner -y
# Ou use yt-dlp via pip (não precisa de grun)
pip install yt-dlp🌐 Redes Sociais
Conecte-se com a gente!
WhatsApp: +55 94 99156-9380 · YouTube: @Otaku.mp4 · Instagram: @lucas_mod_domina · GitHub: Otakump4 · Telegram: LUCAS_MOD_DOMINA
📄 Licença
MIT — Livre para uso pessoal e comercial.
Feito com ❤️ por @lucas_mod_domina
