Tarik daftar drama, sinopsis, episode, subtitle Indonesia, dan URL stream (m3u8/mp4) dari 25 platform WebDracin dalam satu file, tanpa install apa pun.
Mulai · Perintah · Hasil Test · Donasi
| Fitur | Keterangan |
|---|---|
| Zero dependency | fetch bawaan Node 18+. Tanpa cheerio, puppeteer, axios. |
| 25 platform | sitemap.xml memberi daftar semua landing /{platform}gratis. |
| Detail drama | Judul, sinopsis, cover, jumlah episode, daftar episode + ID. |
| Stream | /api/episode memberi videoUrl per episode, siap putar/unduh. |
| Subtitle | Setiap episode membawa track subtitle Indonesia kalau ada. |
| Output JSON | Cetak ke stdout atau tulis ke file lewat --out. |
Tiga fungsi bawaan Node mengerjakan semua:
fetch() // HTTP client, pengganti axios/got
RegExp + matchAll() // parsing HTML, pengganti cheerio
JSON.parse() // decode payload React Server Component Next.jswebdracin/
├── scrape.js
├── README.md
├── LICENSE
└── out/
├── list.json
├── watch.json
└── test_log.json
Butuh Node.js 18+:
node --versionTanpa npm install:
# 1. Daftar platform
node scrape.js platforms
# 2. Ambil 5 drama Dramabox
node scrape.js list --platform dramabox --limit 5
# 3. Detail + stream 1 drama
node scrape.js full pesona-kupu-kupu-malam-melolo-7382543104621939728 --eps 2 --out out/full.jsonnode scrape.js platforms["dramabox", "cashdrama", "shotshort", "dramabite", "dramapops", ...]node scrape.js list --platform <nama> --limit <N> --out <file>| Flag | Default | Keterangan |
|---|---|---|
--platform |
homepage | Nama platform (dramabox, melolo, reelshort, ...). Kosongkan untuk homepage. |
--limit |
50 |
Jumlah drama. |
--out |
— | Tulis JSON ke file. |
node scrape.js list --platform reelshort --limit 3 --out out/reelshort.json
node scrape.js list --limit 10 --out out/home.jsonnode scrape.js all --limitPerPlatform 5 --out out/semua.jsonHasilnya objek per platform:
{
"dramabox": [ { "slug": "...", "title": "..." } ],
"melolo": [ { "slug": "...", "title": "..." } ]
}node scrape.js search "cinta" --limit 20 --out out/cari.jsonnode scrape.js drama kembalinya-sang-ratu-perang-dramabox-42000026892{
"slug": "kembalinya-sang-ratu-perang-dramabox-42000026892",
"url": "https://webdracin.com/drama/kembalinya-sang-ratu-perang-dramabox-42000026892",
"title": "Kembalinya Sang Ratu Perang",
"synopsis": "Menyembunyikan statusnya sebagai Dewi Perang...",
"episodeCount": 46,
"watch_url": "https://webdracin.com/watch/kembalinya-sang-ratu-perang-dramabox-42000026892?ep=1"
}node scrape.js watch kembalinya-sang-ratu-perang-dramabox-42000026892 --out out/watch.jsonSetiap episode membawa id (eid) untuk ambil stream:
{
"dramaId": "dramabox:42000026892",
"title": "Kembalinya Sang Ratu Perang",
"episodeCount": 46,
"episodes": [
{ "id": "701581759", "number": 1, "label": "EP 1", "free": true, "videoUrl": null }
]
}videoUrl di sini selalu null (data awal server). Panggil episode untuk URL asli.
node scrape.js episode "dramabox:42000026892" 1 "701581759"{
"videoUrl": "https://dramabox.backengine.web.id/api/stream?bookId=42000026892&episode=1&lang=in&seg=video.mp4&k=...",
"subtitles": []
}Ambil URL-nya saja untuk mpv/VLC:
node scrape.js episode "dramabox:42000026892" 1 "701581759" | node -e "let s='';process.stdin.on('data',d=>s+=d).on('end',()=>console.log(JSON.parse(s).videoUrl))"node scrape.js full <slug> --eps 3 --out out/full.json| # | Platform | Landing | Stream |
|---|---|---|---|
| 1 | dramabox | /dramaboxgratis |
Yes |
| 2 | cashdrama | /cashdramagratis |
Yes |
| 3 | shotshort | /shotshortgratis |
Server null |
| 4 | dramabite | /dramabitegratis |
Yes |
| 5 | dramapops | /dramapopsgratis |
Yes |
| 6 | netshort | /netshortgratis |
Yes |
| 7 | playlet | /playletgratis |
Yes |
| 8 | flareflow | /flareflowgratis |
Yes |
| 9 | reelshort | /reelshortgratis |
Yes |
| 10 | dramadash | /dramadashgratis |
Server null |
| 11 | dramamax | /dramamaxgratis |
Server null |
| 12 | dramawave | /dramawavegratis |
Yes |
| 13 | vigloo | /vigloogratis |
Server null |
| 14 | velolo | /velologratis |
Server null |
| 15 | cubetv | /cubetvgratis |
Server null |
| 16 | minutedrama | /minutedramagratis |
Server null |
| 17 | rapidtv | /rapidtvgratis |
Server null |
| 18 | dramanova | /dramanovagratis |
Yes |
| 19 | freereels | /freereelsgratis |
Yes |
| 20 | melolo | /melologratis |
Yes |
| 21 | flextv | /flextvgratis |
Yes |
| 22 | dramarush | /dramarushgratis |
Yes |
| 23 | shortbox | /shortboxgratis |
Yes |
| 24 | radreels | /radreelsgratis |
Yes |
| 25 | flickreels | /flickreelsgratis |
Yes |
Yes = videoUrl aktif. Server null = server mengembalikan videoUrl: null, metadata dan subtitle tetap ada.
flowchart LR
A[sitemap.xml] --> B[25 landing /xxxgratis]
B --> C["list: kartu /drama/slug"]
C --> D["watch: RSC self.__next_f, objek drama + episode id"]
D --> E["episode: /api/episode?id&ep&eid, videoUrl + subtitles"]
- Homepage hanya render 1 platform (tab aktif). Tab lain load di client, jadi scraper baca tiap landing
/{platform}gratislangsung. - Halaman
/watchmenanam objekdramadi payload React Server Component (self.__next_f.push). Scraper decode dan potong JSON-nya tanpa browser. - HTML tidak memuat URL video. Player frontend fetch
/api/episode?id=<dramaId>&ep=<n>&eid=<id>, scraper memanggil endpoint yang sama.
Alur uji: list 2 drama, watch drama pertama, stream EP 1 + EP 2.
17 OK: dramabox, cashdrama, dramabite, dramapops, netshort, playlet, flareflow, reelshort, dramawave, dramanova, freereels, melolo, flextv, dramarush, shortbox, radreels, flickreels.
8 null dari server (subtitle Indo tetap ada di 5 platform): shotshort, dramadash, dramamax, vigloo, velolo, cubetv, minutedrama, rapidtv.
| Gejala | Penyebab | Solusi |
|---|---|---|
drama object not found in RSC |
Slug salah / halaman pindah | Ambil slug baru dari list |
api/episode HTTP 4xx/5xx |
Rate limit sesaat | Tunggu, ulangi |
videoUrl: null |
Upstream platform kosong | Coba episode / platform lain |
Cover x-expires basi |
URL proxy bertanda waktu | Pakai cover_real, refresh berkala |
Pakai untuk riset dan arsip pribadi. Patuhi syarat layanan webdracin.com dan hak pemegang konten. Jangan reupload karya berhak cipta.
Scraper ini membantumu? Traktir kopi: