npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

animes-scraper

v3.0.1

Published

Scraper completo para animesonlinecc.to — Search, Details, Episode, Download, Genres, VideoProxy, BloggerResolver. 100% compatível com Termux/Android.

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

npm version License: MIT Termux Node

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.js

Provedores 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-scraper

Termux

pkg install nodejs -y
npm install animes-scraper

# Setup automático (yt-dlp + Chromium)
node node_modules/animes-scraper/setup.js

Git

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-Z

Pesquisa

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ódios

Detalhes 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íveis

Download 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ário

Gê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(); // Todos

BloggerResolver (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:

  1. https nativo — Headers de navegador real + cookies
  2. VM Solver — Resolve challenges JS do Cloudflare via vm nativo do Node.js
  3. 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 SEMPRE

Chromium:

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 SEMPRE

ytdl-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

  1. O Cloudflare analisa o IP de origem da requisição
  2. IPs de datacenter (AWS, GCP, Azure, DigitalOcean, etc.) recebem 403 Forbidden
  3. IPs residenciais passam normalmente (ou recebem challenge que resolvemos)
  4. 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ção

Configuraçã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) ou pip 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.js

Se 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 YouTube Instagram GitHub Telegram

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