Skip to content

Instantly share code, notes, and snippets.

@agusibrahim
Last active June 30, 2025 08:10
Show Gist options
  • Save agusibrahim/03a20d2ec1164d137c1460529fd5cec6 to your computer and use it in GitHub Desktop.
Save agusibrahim/03a20d2ec1164d137c1460529fd5cec6 to your computer and use it in GitHub Desktop.
get pelni ports
var token = document.querySelector("input[name='_token']").value;
var options = Array.from(document.querySelectorAll("select[name='ticket_org'] option")).filter(x => x.getAttribute("value") != "");
var results = [];
for (const option of options) {
var ids = option.getAttribute("value");
var b = option.innerText;
var dest=""
try {
var f = await fetch("https://pelni.co.id/getdes", {
"headers": {
"content-type": "application/x-www-form-urlencoded;",
},
"referrer": "https://pelni.co.id/",
"referrerPolicy": "strict-origin-when-cross-origin",
"body": "ticket_org=" + ids + "&_token=" + token,
"method": "POST",
"mode": "cors",
"credentials": "include"
});
var div = document.createElement('div');
div.innerHTML = await f.text();
var dest = Array.from(div.querySelectorAll("option")).filter(x => x.getAttribute("value") != "").map(x => x.getAttribute("value")).join(",");
await new Promise(resolve => setTimeout(resolve, 100));
} catch (e) {
}
var result = {
"name": b.split("|")[1].split("-")[1].trim(),
"code": b.split("|")[1].split("-")[0].trim(),
"city": b.split("|")[0].trim(),
"id": parseInt(ids),
"dest": dest
};
results.push(result);
}
document.body.outerText=JSON.stringify(results)
@agusibrahim
Copy link
Author

var token=document.querySelector("input[name='_token']").value;var options=Array.from(document.querySelectorAll("select[name='ticket_org'] option")).filter(x=>x.getAttribute("value")!="");var results=[];for(const option of options){var ids=option.getAttribute("value");var b=option.innerText;var dest=""
try{var f=await fetch("https://pelni.co.id/getdes",{"headers":{"content-type":"application/x-www-form-urlencoded;",},"referrer":"https://pelni.co.id/","referrerPolicy":"strict-origin-when-cross-origin","body":"ticket_org="+ids+"&_token="+token,"method":"POST","mode":"cors","credentials":"include"});var div=document.createElement('div');div.innerHTML=await f.text();var dest=Array.from(div.querySelectorAll("option")).filter(x=>x.getAttribute("value")!="").map(x=>x.getAttribute("value")).join(",");await new Promise(resolve=>setTimeout(resolve,100))}catch(e){}
var result={"name":b.split("|")[1].split("-")[1].trim(),"code":b.split("|")[1].split("-")[0].trim(),"city":b.split("|")[0].trim(),"id":parseInt(ids),"dest":dest};results.push(result)}
document.body.outerText=JSON.stringify(results)

@agusibrahim
Copy link
Author

agusibrahim commented Jun 30, 2025

update list of ports

[
  {
    "name": "MALAHAYATI",
    "code": "MLH",
    "city": "ACEH BESAR, ACEH",
    "id": 102,
    "dest": "256,431,266,144"
  },
  {
    "name": "KALABAHI",
    "code": "KBH",
    "city": "ALOR, NUSA TENGGARA TIMUR",
    "id": 694,
    "dest": "694,946,948,921,655,613,684,949,944,747,681,688,893,950,662,979,983,696,683,971,673,685,563,773,923"
  },
  {
    "name": "AMBON",
    "code": "AMQ",
    "city": "AMBON, MALUKU",
    "id": 946,
    "dest": "694,946,948,921,973,835,951,929,976,777,925,431,974,949,977,944,928,975,681,688,893,947,950,972,979,983,982,955,683,971,563,942,923,061"
  },
  {
    "name": "AGATS",
    "code": "AGS",
    "city": "ASMAT, PAPUA SELATAN",
    "id": 948,
    "dest": "694,946,948,921,835,976,949,977,944,681,688,950,979,983,683,971,942,889,923"
  },
  {
    "name": "SEMAYANG",
    "code": "BPN",
    "city": "BALIKPAPAN, KALIMANTAN TIMUR",
    "id": 803,
    "dest": "803,921,835,687,974,975,681,688,893,972,982,809,863,892,683,971,563,808,942"
  },
  {
    "name": "PANJANG",
    "code": "PNJ",
    "city": "BANDAR LAMPUNG, LAMPUNG",
    "id": 395,
    "dest": "395,431,433"
  },
  {
    "name": "LUWUK",
    "code": "LUW",
    "city": "BANGGAI, SULAWESI TENGAH",
    "id": 868,
    "dest": "868,921,655,835,613,841,922,106,651,893,662,924"
  },
  {
    "name": "BANGGAI",
    "code": "BGG",
    "city": "BANGGAI KEPULAUAN, SULAWESI TENGAH",
    "id": 908,
    "dest": "908,921,973,835,925,974,893,972,982,971,563,942"
  },
  {
    "name": "BELINYU",
    "code": "BLU",
    "city": "BANGKA, KEPULAUAN BANGKA BELITUNG",
    "id": 322,
    "dest": "322,431,269,252,725,255,246,714,563,251"
  },
  {
    "name": "SADAI",
    "code": "SDI",
    "city": "BANGKA SELATAN, KEPULAUAN BANGKA BELITUNG",
    "id": 338,
    "dest": ""
  },
  {
    "name": "KOTABARU",
    "code": "KTB",
    "city": "BARU, KALIMANTAN SELATAN",
    "id": 996,
    "dest": ""
  },
  {
    "name": "BATAM/BATU AMPAR",
    "code": "BUR",
    "city": "BATAM, KEPULAUAN RIAU",
    "id": 256,
    "dest": "256,431,266,144"
  },
  {
    "name": "BAU",
    "code": "BBM",
    "city": "BAU-BAU, SULAWESI TENGGARA",
    "id": 921,
    "dest": "694,946,948,803,868,908,921,973,655,835,951,613,976,687,841,777,925,431,974,949,977,922,944,975,681,688,651,106,893,947,950,662,972,979,983,924,982,809,863,892,683,971,685,563,251,808,942,923,061"
  },
  {
    "name": "TANJUNG PANDAN",
    "code": "TJQ",
    "city": "BELITUNG, KEPULAUAN BANGKA BELITUNG",
    "id": 336,
    "dest": "336,431,747,714,494,563,773"
  },
  {
    "name": "BIAK",
    "code": "BIK",
    "city": "BIAK NUMFOR, PAPUA",
    "id": 973,
    "dest": "946,908,921,973,835,925,431,974,893,972,982,971,563,942"
  },
  {
    "name": "BIMA",
    "code": "BMU",
    "city": "BIMA, NUSA TENGGARA BARAT",
    "id": 655,
    "dest": "694,868,921,655,835,898,613,684,841,922,747,681,106,651,891,893,662,924,892,696,673,685,563,773"
  },
  {
    "name": "BITUNG",
    "code": "BIT",
    "city": "BITUNG, SULAWESI UTARA",
    "id": 835,
    "dest": "946,948,803,868,908,921,973,655,835,951,613,976,841,777,925,431,974,949,977,922,944,928,975,106,651,893,947,662,972,979,983,924,982,863,955,971,563,942,889"
  },
  {
    "name": "LHOK TUAN",
    "code": "LTU",
    "city": "BONTANG, KALIMANTAN TIMUR",
    "id": 898,
    "dest": "655,898,613,684,681,651,891,893,662,892,685,563,773"
  },
  {
    "name": "NAMLEA",
    "code": "NAM",
    "city": "BURU, MALUKU",
    "id": 951,
    "dest": "946,921,835,951,976,777,925,431,974,928,893,947,972,982,955,971,563,942,061"
  },
  {
    "name": "NAMROLE",
    "code": "NRE",
    "city": "BURU SELATAN, MALUKU",
    "id": 929,
    "dest": "946,947,950"
  },
  {
    "name": "BENOA",
    "code": "BOA",
    "city": "DENPASAR, BALI",
    "id": 613,
    "dest": "694,946,868,921,655,835,898,613,684,841,922,747,681,688,106,651,891,893,662,924,892,696,683,971,685,563,923"
  },
  {
    "name": "ENDE",
    "code": "ENE",
    "city": "ENDE, NUSA TENGGARA TIMUR",
    "id": 684,
    "dest": "694,655,613,684,747,681,893,662,696,673,685,563,773"
  },
  {
    "name": "FAK",
    "code": "FKQ",
    "city": "FAKFAK, PAPUA BARAT",
    "id": 976,
    "dest": "946,948,921,835,951,976,925,431,949,977,944,928,893,947,979,983,955,971,563,942,889"
  },
  {
    "name": "LARANTUKA",
    "code": "LKA",
    "city": "FLORES TIMUR, NUSA TENGGARA TIMUR",
    "id": 687,
    "dest": "803,921,687,431,681,688,893,809,863,892,683,563,251,808"
  },
  {
    "name": "GORONTALO",
    "code": "GTO",
    "city": "GORONTALO, GORONTALO",
    "id": 841,
    "dest": "868,921,655,835,613,841,922,106,651,893,662,924"
  },
  {
    "name": "BAWEAN",
    "code": "BWN",
    "city": "GRESIK, JAWA TIMUR",
    "id": 590,
    "dest": ""
  },
  {
    "name": "GUNUNG SITOLI",
    "code": "GNS",
    "city": "GUNUNGSITOLI, SUMATERA UTARA",
    "id": 160,
    "dest": "336,431,191,714,159"
  },
  {
    "name": "JAILOLO",
    "code": "JIO",
    "city": "HALMAHERA BARAT, MALUKU UTARA",
    "id": 1466,
    "dest": ""
  },
  {
    "name": "JAILOLO",
    "code": "JIO",
    "city": "HALMAHERA BARAT, MALUKU UTARA",
    "id": 777,
    "dest": "946,921,835,951,777,431,893,563,942"
  },
  {
    "name": "BABANG",
    "code": "BBG",
    "city": "HALMAHERA SELATAN, MALUKU UTARA",
    "id": 925,
    "dest": "946,908,921,973,835,951,976,925,974,928,893,947,972,982,955,971,563,942"
  },
  {
    "name": "TOBELO",
    "code": "TBO",
    "city": "HALMAHERA UTARA, MALUKU UTARA",
    "id": 941,
    "dest": ""
  },
  {
    "name": "TANJUNG PRIOK",
    "code": "TPR",
    "city": "JAKARTA UTARA, DKI JAKARTA",
    "id": 431,
    "dest": "946,322,256,921,336,973,835,951,976,687,777,431,974,949,977,266,252,269,944,975,747,681,688,893,947,972,144,982,255,246,725,714,494,683,971,563,773,251,981,942"
  },
  {
    "name": "JAYAPURA",
    "code": "DJJ",
    "city": "JAYAPURA, PAPUA",
    "id": 974,
    "dest": "946,803,908,921,973,835,951,925,431,975,893,972,982,863,971,563,981,942,061"
  },
  {
    "name": "LEGON BAJAK, KARIMUN JAWA",
    "code": "LKK",
    "city": "JEPARA, JAWA TENGAH",
    "id": 496,
    "dest": "747,746,494,563"
  },
  {
    "name": "TUAL",
    "code": "TUA",
    "city": "KAB. TUAL, MALUKU",
    "id": 949,
    "dest": "694,946,948,921,835,976,431,949,977,944,681,688,893,947,950,979,983,683,971,563,942,889,923"
  },
  {
    "name": "KAIMANA",
    "code": "KNG",
    "city": "KAIMANA, PAPUA BARAT",
    "id": 977,
    "dest": "946,948,921,835,976,431,949,977,944,893,947,979,983,971,563,889"
  },
  {
    "name": "TANJUNG BALAI KARIMUN",
    "code": "TJB",
    "city": "KARIMUN, KEPULAUAN RIAU",
    "id": 266,
    "dest": "256,431,266,144"
  },
  {
    "name": "KENDARI",
    "code": "KDI",
    "city": "KENDARI, SULAWESI TENGGARA",
    "id": 922,
    "dest": "868,921,655,835,613,841,922,106,651,893,662,924,923"
  },
  {
    "name": "TAREMPA",
    "code": "TMP",
    "city": "KEPULAUAN ANAMBAS, KEPULAUAN RIAU",
    "id": 252,
    "dest": "322,431,269,252,725,255,246,714,563,251"
  },
  {
    "name": "LETUNG",
    "code": "LTG",
    "city": "KEPULAUAN ANAMBAS, KEPULAUAN RIAU",
    "id": 269,
    "dest": "322,431,269,252,725,255,246,714,563,251"
  },
  {
    "name": "DOBO",
    "code": "DOB",
    "city": "KEPULAUAN ARU, MALUKU",
    "id": 944,
    "dest": "694,946,948,921,835,976,431,949,977,944,681,688,893,947,950,979,983,683,971,563,942,923"
  },
  {
    "name": "KAHAKITANG",
    "code": "KKG",
    "city": "KEPULAUAN SANGIHE, SULAWESI UTARA",
    "id": 829,
    "dest": "946,835,951,841,829,836,928,845,846,844,840,942,839"
  },
  {
    "name": "TAHUNA",
    "code": "THA",
    "city": "KEPULAUAN SANGIHE, SULAWESI UTARA",
    "id": 836,
    "dest": "946,835,951,841,829,836,928,845,846,844,840,942,839"
  },
  {
    "name": "SANANA",
    "code": "SQN",
    "city": "KEPULAUAN SULA, MALUKU UTARA",
    "id": 928,
    "dest": "946,921,835,951,976,925,928,947,955,942"
  },
  {
    "name": "LIRUNG",
    "code": "LRG",
    "city": "KEPULAUAN TALAUD, SULAWESI UTARA",
    "id": 844,
    "dest": "946,835,951,841,829,836,928,845,846,844,840,942,839"
  },
  {
    "name": "KARATUNG",
    "code": "KTN",
    "city": "KEPULAUAN TALAUD, SULAWESI UTARA",
    "id": 845,
    "dest": "946,835,951,841,829,836,928,845,846,844,840,942,839"
  },
  {
    "name": "MIANGAS",
    "code": "MGS",
    "city": "KEPULAUAN TALAUD, SULAWESI UTARA",
    "id": 846,
    "dest": "946,835,951,841,829,836,928,844,845,840,942,839"
  },
  {
    "name": "SERUI",
    "code": "ZRI",
    "city": "KEPULAUAN YAPEN, PAPUA",
    "id": 975,
    "dest": "946,803,921,973,835,431,974,975,893,972,982,863,971,563,942"
  },
  {
    "name": "KENDAWANGAN",
    "code": "KDW",
    "city": "KETAPANG, KALIMANTAN BARAT",
    "id": 116,
    "dest": ""
  },
  {
    "name": "KUMAI",
    "code": "KUM",
    "city": "KOTAWARINGIN BARAT, KALIMANTAN TENGAH",
    "id": 747,
    "dest": "694,336,655,613,684,431,496,747,746,681,714,696,494,685,563,773"
  },
  {
    "name": "PANGKALAN BUN",
    "code": "PLB",
    "city": "KOTAWARINGIN BARAT, KALIMANTAN TENGAH",
    "id": 324,
    "dest": ""
  },
  {
    "name": "SAMPIT",
    "code": "SMQ",
    "city": "KOTAWARINGIN TIMUR, KALIMANTAN TENGAH",
    "id": 746,
    "dest": "496,747,746,494,563"
  },
  {
    "name": "KUPANG",
    "code": "TQP",
    "city": "KUPANG, NUSA TENGGARA TIMUR",
    "id": 681,
    "dest": "694,946,948,803,921,655,613,684,687,431,949,944,747,681,688,893,950,662,979,983,809,892,696,683,971,673,685,563,773,251,808,923"
  },
  {
    "name": "LEWOLEBA",
    "code": "LWE",
    "city": "LEMBATA, NUSA TENGGARA TIMUR",
    "id": 688,
    "dest": "694,946,948,803,921,613,687,431,949,944,681,688,893,950,979,983,809,892,683,971,685,563,251,808,923"
  },
  {
    "name": "LEMBAR",
    "code": "LMR",
    "city": "LOMBOK BARAT, NUSA TENGGARA BARAT",
    "id": 651,
    "dest": "868,921,655,835,898,613,841,922,651,893,662,924,892,685,563,773"
  },
  {
    "name": "AWERANGE/BARRU",
    "code": "AGU",
    "city": "LUWU TIMUR, SULAWESI SELATAN",
    "id": 891,
    "dest": "655,898,613,891,893,662,892,563"
  },
  {
    "name": "MAKASSAR",
    "code": "MAK",
    "city": "MAKASAR, SULAWESI SELATAN",
    "id": 893,
    "dest": "694,946,803,868,908,921,973,655,835,898,951,613,684,976,687,841,777,925,431,974,949,977,922,944,975,681,688,106,651,891,893,947,662,972,924,982,809,863,892,683,971,673,685,563,773,251,808,981,942,923,061"
  },
  {
    "name": "MOA",
    "code": "KWU",
    "city": "MALUKU BARAT DAYA, MALUKU",
    "id": 959,
    "dest": "946,959,956,958,947,950,955"
  },
  {
    "name": "KISAR",
    "code": "KXR",
    "city": "MALUKU BARAT DAYA, MALUKU",
    "id": 956,
    "dest": "946,958,959,947,950,955"
  },
  {
    "name": "TEPA",
    "code": "TPA",
    "city": "MALUKU BARAT DAYA, MALUKU",
    "id": 958,
    "dest": "946,959,956,958,947,950,955"
  },
  {
    "name": "BANDA NAIRA",
    "code": "NDA",
    "city": "MALUKU TENGAH, MALUKU",
    "id": 947,
    "dest": "946,921,835,951,929,976,925,431,949,977,944,928,893,947,950,955,563,942"
  },
  {
    "name": "AMAHAI",
    "code": "AHI",
    "city": "MALUKU TENGAH, MALUKU",
    "id": 952,
    "dest": ""
  },
  {
    "name": "SAUMLAKI",
    "code": "SXK",
    "city": "MALUKU TENGGARA BARAT, MALUKU",
    "id": 950,
    "dest": "694,946,948,921,949,944,681,688,947,950,979,983,683,971,923"
  },
  {
    "name": "LARAT",
    "code": "LRT",
    "city": "MALUKU TENGGARA BARAT, MALUKU",
    "id": 957,
    "dest": ""
  },
  {
    "name": "BELANG",
    "code": "BEL",
    "city": "MAMUJU, SULAWESI BARAT",
    "id": 894,
    "dest": ""
  },
  {
    "name": "REO",
    "code": "REO",
    "city": "MANGGARAI, NUSA TENGGARA TIMUR",
    "id": 672,
    "dest": "655,684,681,893,662,673,685,773"
  },
  {
    "name": "LABUAN BAJO",
    "code": "LBO",
    "city": "MANGGARAI BARAT, NUSA TENGGARA TIMUR",
    "id": 662,
    "dest": "694,868,921,655,835,898,613,684,841,922,681,651,106,891,893,662,924,892,673,685,563,773"
  },
  {
    "name": "MANOKWARI",
    "code": "MKW",
    "city": "MANOKWARI, PAPUA BARAT",
    "id": 972,
    "dest": "946,803,908,921,973,835,951,925,431,974,975,893,972,982,863,971,563,981,942,061"
  },
  {
    "name": "BELAWAN",
    "code": "BLW",
    "city": "MEDAN, SUMATERA UTARA",
    "id": 144,
    "dest": "256,431,266"
  },
  {
    "name": "MERAUKE",
    "code": "MKQ",
    "city": "MERAUKE, PAPUA SELATAN",
    "id": 979,
    "dest": "694,946,948,921,835,976,949,977,944,681,688,950,983,683,971,942,889,923"
  },
  {
    "name": "POMAKO",
    "code": "PMK",
    "city": "MIMIKA, PAPUA TENGAH",
    "id": 983,
    "dest": "694,946,948,921,835,976,949,977,944,681,688,950,979,983,683,971,942,889,923"
  },
  {
    "name": "AMURANG",
    "code": "AUG",
    "city": "MINAHASA SELATAN, SULAWESI UTARA",
    "id": 920,
    "dest": ""
  },
  {
    "name": "KOLONEDALE",
    "code": "KAN",
    "city": "MOROWALI, SULAWESI TENGAH",
    "id": 867,
    "dest": ""
  },
  {
    "name": "RAHA",
    "code": "RAQ",
    "city": "MUNA, SULAWESI TENGGARA",
    "id": 924,
    "dest": "868,921,655,835,613,841,922,106,651,893,662,924,923"
  },
  {
    "name": "NABIRE",
    "code": "NBX",
    "city": "NABIRE, PAPUA TENGAH",
    "id": 982,
    "dest": "946,803,908,921,973,835,951,925,431,974,975,893,972,982,863,971,563,981,942,061"
  },
  {
    "name": "MARAPOKOT",
    "code": "MOT",
    "city": "NAGEKO, NUSA TENGGARA TIMUR",
    "id": 663,
    "dest": ""
  },
  {
    "name": "MIDAI",
    "code": "MDA",
    "city": "NATUNA, KEPULAUAN RIAU",
    "id": 246,
    "dest": "322,431,269,252,725,255,246,714,563,251"
  },
  {
    "name": "SERASAN",
    "code": "SRS",
    "city": "NATUNA, KEPULAUAN RIAU",
    "id": 255,
    "dest": "322,431,269,252,725,255,246,714,563,251"
  },
  {
    "name": "NATUNA (SELAT LAMPA)",
    "code": "NTA",
    "city": "NATUNA, KEPULAUAN RIAU",
    "id": 725,
    "dest": "322,431,269,252,725,255,246,714,563,251"
  },
  {
    "name": "NUNUKAN / TUNON TAKA",
    "code": "TTK",
    "city": "NUNUKAN, KALIMANTAN TIMUR",
    "id": 809,
    "dest": "803,921,687,681,688,893,809,863,892,683,563,808"
  },
  {
    "name": "TELUK BAYUR",
    "code": "TBY",
    "city": "PADANG, SUMATERA BARAT",
    "id": 191,
    "dest": "336,160,431,191,714,159"
  },
  {
    "name": "PANTOLOAN",
    "code": "PTL",
    "city": "PALU, SULAWESI TENGAH",
    "id": 863,
    "dest": "803,921,835,687,974,975,893,972,982,809,863,892,683,971,563,808,942"
  },
  {
    "name": "PARE",
    "code": "ARE",
    "city": "PARE-PARE, SULAWESI SELATAN",
    "id": 892,
    "dest": "803,921,655,898,613,684,687,681,688,651,891,893,662,809,863,892,683,685,563,773,808"
  },
  {
    "name": "PONTIANAK",
    "code": "PNK",
    "city": "PONTIANAK, KALIMANTAN BARAT",
    "id": 714,
    "dest": "322,336,431,252,269,747,246,255,725,714,494,563,773,251"
  },
  {
    "name": "POSO",
    "code": "PSJ",
    "city": "POSO, SULAWESI TENGAH",
    "id": 840,
    "dest": "946,835,951,841,928,942,839"
  },
  {
    "name": "MERANTI/DORAK",
    "code": "MRT",
    "city": "PULAU MERANTI, RIAU",
    "id": 926,
    "dest": ""
  },
  {
    "name": "BAA, ROTE",
    "code": "BRO",
    "city": "ROTENDAO, NUSA TENGGARA TIMUR",
    "id": 696,
    "dest": "694,655,613,684,747,681,685,563"
  },
  {
    "name": "SEBA, SABU",
    "code": "ISA",
    "city": "SABU RAIJUA, NUSA TENGGARA TIMUR",
    "id": 697,
    "dest": "694,655,681,893,662,696,773"
  },
  {
    "name": "TANJUNG EMAS",
    "code": "SRG",
    "city": "SEMARANG, JAWA TENGAH",
    "id": 494,
    "dest": "336,431,496,747,746,714,494,563,773"
  },
  {
    "name": "GESER",
    "code": "GER",
    "city": "SERAM BAGIAN TIMUR, MALUKU",
    "id": 955,
    "dest": "946,921,835,951,976,925,928,947,955,942"
  },
  {
    "name": "SIBOLGA",
    "code": "SLG",
    "city": "SIBOLGA, SUMATERA UTARA",
    "id": 159,
    "dest": "336,160,431,191,714"
  },
  {
    "name": "MAUMERE /LAURENTIUS SAY",
    "code": "MOF",
    "city": "SIKA, NUSA TENGGARA TIMUR",
    "id": 683,
    "dest": "694,946,948,803,921,613,687,431,949,944,681,688,893,950,979,983,809,863,892,683,971,685,563,251,808,923"
  },
  {
    "name": "SORONG",
    "code": "SOQ",
    "city": "SORONG, PAPUA BARAT",
    "id": 971,
    "dest": "694,946,948,803,908,921,973,835,951,613,976,925,431,974,949,977,944,975,681,688,893,950,972,979,983,982,863,683,971,563,981,942,889,923,061"
  },
  {
    "name": "PATIMBAN",
    "code": "PTM",
    "city": "SUBANG, JAWA BARAT",
    "id": 464,
    "dest": "431"
  },
  {
    "name": "WAIKELO",
    "code": "WIO",
    "city": "SUMBA BARAT DAYA, NUSA TENGGARA TIMUR",
    "id": 673,
    "dest": "694,655,684,681,893,662,673,685,773"
  },
  {
    "name": "WAINGAPU",
    "code": "WGP",
    "city": "SUMBA TIMUR, NUSA TENGGARA TIMUR",
    "id": 685,
    "dest": "694,946,921,655,898,613,684,747,681,688,651,893,662,892,696,683,971,673,685,563,773,923"
  },
  {
    "name": "KETAPANG",
    "code": "IKL",
    "city": "SUMENEP, JAWA TIMUR",
    "id": 715,
    "dest": ""
  },
  {
    "name": "TANJUNG PERAK",
    "code": "SUB",
    "city": "SURABAYA, JAWA TIMUR",
    "id": 563,
    "dest": "694,946,803,908,322,921,336,973,655,835,898,951,613,684,976,687,777,925,431,974,496,949,977,252,269,944,975,747,746,681,688,651,893,947,972,982,255,246,725,863,892,714,696,494,683,971,685,563,773,251,981,942,061"
  },
  {
    "name": "SAMUDERA, BATULICIN",
    "code": "SUR",
    "city": "TANAH BUMBU, KALIMANTAN SELATAN",
    "id": 773,
    "dest": "694,336,655,898,684,431,747,681,651,893,662,892,714,494,673,685,563,773"
  },
  {
    "name": "SEI KOLAK KIJANG",
    "code": "SKJ",
    "city": "TANJUNG PINANG, KEPULAUAN RIAU",
    "id": 251,
    "dest": "322,921,687,431,252,269,681,688,893,255,246,725,714,683,563,251"
  },
  {
    "name": "TARAKAN",
    "code": "MLD",
    "city": "TARAKAN, KALIMANTAN TIMUR",
    "id": 808,
    "dest": "803,921,687,681,688,893,809,863,892,683,563,808"
  },
  {
    "name": "WASIOR",
    "code": "WSR",
    "city": "TELUK WONDAMA, PAPUA BARAT",
    "id": 981,
    "dest": "431,974,893,972,982,971,563,981"
  },
  {
    "name": "TERNATE",
    "code": "TEI",
    "city": "TERNATE, MALUKU UTARA",
    "id": 942,
    "dest": "946,948,803,908,921,973,835,951,976,777,925,431,974,949,944,928,975,893,947,972,979,983,982,863,955,971,563,942"
  },
  {
    "name": "GITA PAYAHE",
    "code": "PYH",
    "city": "TIDORE KEPULAUAN, MALUKU UTARA",
    "id": 889,
    "dest": "948,835,976,949,977,979,983,971,889"
  },
  {
    "name": "WAKAI, TOGIAN",
    "code": "WAK",
    "city": "TOJO UNA-UNA, SULAWESI TENGAH",
    "id": 839,
    "dest": "946,835,951,841,928,840,942,839"
  },
  {
    "name": "TOLI",
    "code": "TLI",
    "city": "TOLI-TOLI, SULAWESI TENGAH",
    "id": 861,
    "dest": ""
  },
  {
    "name": "WANCI",
    "code": "WCI",
    "city": "WAKATOBI, SULAWESI TENGGARA",
    "id": 923,
    "dest": "694,946,948,921,949,922,944,681,688,950,979,983,924,683,971,923"
  }
]

@agusibrahim
Copy link
Author

scrapper

function showProgressOverlay(message){let overlay=document.getElementById('pelni-progress-overlay');if(!overlay){overlay=document.createElement('div');overlay.id='pelni-progress-overlay';Object.assign(overlay.style,{position:'fixed',top:'0',left:'0',width:'100%',height:'100%',backgroundColor:'rgba(255, 255, 255, 0.95)',display:'flex',flexDirection:'column',justifyContent:'center',alignItems:'center',zIndex:'99999',fontSize:'24px',fontFamily:'Arial, sans-serif',color:'#333'});const progressBarContainer=document.createElement('div');Object.assign(progressBarContainer.style,{width:'300px',height:'20px',backgroundColor:'#eee',borderRadius:'10px',overflow:'hidden',marginBottom:'15px'});const progressBar=document.createElement('div');progressBar.id='pelni-progress-bar';Object.assign(progressBar.style,{width:'0%',height:'100%',backgroundColor:'#007bff',borderRadius:'10px',transition:'width 0.2s ease-in-out'});progressBarContainer.appendChild(progressBar);overlay.appendChild(progressBarContainer);const progressText=document.createElement('div');progressText.id='pelni-progress-text';progressText.innerText=message;overlay.appendChild(progressText);document.body.appendChild(overlay)}else{document.getElementById('pelni-progress-text').innerText=message}
document.body.style.overflow='hidden'}
function updateProgress(current,total,message){const progressBar=document.getElementById('pelni-progress-bar');const progressText=document.getElementById('pelni-progress-text');if(progressBar&&progressText){const percentage=(current/total)*100;progressBar.style.width=percentage+'%';progressText.innerText=`Memproses: ${message} (${current}/${total})`}}
function hideProgressOverlay(){const overlay=document.getElementById('pelni-progress-overlay');if(overlay){overlay.remove()}
document.body.style.overflow=''}
function displayJsonResult(data){document.body.innerHTML='';document.body.style.backgroundColor='#f5f5f5';document.body.style.margin='0';document.body.style.padding='20px';document.body.style.fontFamily='monospace';document.body.style.whiteSpace='pre-wrap';document.body.style.wordWrap='break-word';document.body.style.color='#333';const pre=document.createElement('pre');pre.textContent=JSON.stringify(data,null,2);document.body.appendChild(pre);const copyButton=document.createElement('button');copyButton.textContent='Salin JSON';Object.assign(copyButton.style,{position:'fixed',top:'10px',right:'10px',padding:'10px 20px',fontSize:'16px',backgroundColor:'#28a745',color:'white',border:'none',borderRadius:'5px',cursor:'pointer',zIndex:'100000'});copyButton.onclick=()=>{navigator.clipboard.writeText(JSON.stringify(data,null,2)).then(()=>{copyButton.textContent='Tersalin!';setTimeout(()=>copyButton.textContent='Salin JSON',2000)}).catch(err=>{console.error('Gagal menyalin:',err);alert('Gagal menyalin JSON ke clipboard.')})};document.body.appendChild(copyButton)}(async()=>{document.body.innerHTML='';showProgressOverlay("Memulai scraping data...");let token;let tempDiv;try{const originalBody=await fetch(window.location.href).then(res=>res.text());tempDiv=document.createElement('div');tempDiv.innerHTML=originalBody;const tokenInput=tempDiv.querySelector("input[name='_token']");if(tokenInput){token=tokenInput.value}else{throw new Error("Token CSRF tidak ditemukan. Pastikan Anda menjalankan script ini di halaman Pelni yang memiliki formulir.")}}catch(error){hideProgressOverlay();displayJsonResult({error:error.message});console.error(error);return}
if(!tempDiv){hideProgressOverlay();displayJsonResult({error:"Gagal mendapatkan elemen halaman asli untuk scraping."});return}
const options=Array.from(tempDiv.querySelectorAll("select[name='ticket_org'] option")).filter(x=>x.getAttribute("value")!=="");const totalOptions=options.length;const results=[];for(let i=0;i<totalOptions;i++){const option=options[i];const ids=option.getAttribute("value");const b=option.innerText;let dest="";updateProgress(i+1,totalOptions,`Pelabuhan ${b.split('|')[1].split('-')[1].trim()}`);try{const f=await fetch("https://pelni.co.id/getdes",{"headers":{"content-type":"application/x-www-form-urlencoded;",},"referrer":"https://pelni.co.id/","referrerPolicy":"strict-origin-when-cross-origin","body":"ticket_org="+ids+"&_token="+token,"method":"POST","mode":"cors","credentials":"include"});const div=document.createElement('div');div.innerHTML=await f.text();dest=Array.from(div.querySelectorAll("option")).filter(x=>x.getAttribute("value")!=="").map(x=>x.getAttribute("value")).join(",");await new Promise(resolve=>setTimeout(resolve,100))}catch(e){console.error(`Gagal mengambil data untuk ID ${ids}:`,e)}
const result={"name":b.split("|")[1].split("-")[1].trim(),"code":b.split("|")[1].split("-")[0].trim(),"city":b.split("|")[0].trim(),"id":parseInt(ids),"dest":dest};results.push(result)}
hideProgressOverlay();displayJsonResult(results);console.log("Scraping Selesai!");console.log(results)})()

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment