-
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcontent.js
More file actions
105 lines (88 loc) · 4.43 KB
/
Copy pathcontent.js
File metadata and controls
105 lines (88 loc) · 4.43 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
(function() {
// -----------------------------------------------------------------------
// BAGIAN 1: DETEKSI & SCRAPING DATA
// -----------------------------------------------------------------------
// Elemen indikator
const listTabEl = document.querySelector('ul#tabs li.nav-item a.active');
const detailTableEl = document.querySelector('.content .table, .content-detail .table');
// --- MODE A: DAFTAR PAKET ---
if (listTabEl) {
const activeTabName = listTabEl.innerText.trim();
let currentScenario = null;
switch (activeTabName) {
case 'Tender': currentScenario = { tableSelector: '#tabellelang, #tbllelang', interface: LelangInterface }; break;
case 'Non Tender': currentScenario = { tableSelector: '#tabellelang, #tblnontender, #tbllelang', interface: NonTenderInterface }; break;
case 'Pencatatan Non Tender': currentScenario = { tableSelector: '#tabellelang, #tblpencatatan', interface: PencatatanNonTenderInterface }; break;
case 'Pencatatan Swakelola': currentScenario = { tableSelector: '#tblswakelola', interface: PencatatanSwakelolaInterface }; break;
case 'Pencatatan Pengadaan Darurat': currentScenario = { tableSelector: '#tabellelang, #tbldarurat', interface: PencatatanPengadaanDaruratInterface }; break;
}
if (currentScenario) {
const table = document.querySelector(currentScenario.tableSelector);
if (table) {
const rows = table.querySelectorAll('tbody tr');
const dataList = [];
rows.forEach(row => {
const rowData = currentScenario.interface.getRawData(row);
if (rowData) {
rowData.sumber_data = activeTabName;
dataList.push(rowData);
}
});
chrome.runtime.sendMessage({
action: "data_scraped", items: dataList, count: dataList.length, source: activeTabName, type: "list"
});
}
}
}
// --- MODE B: DETAIL PAKET ---
else if (detailTableEl) {
const singleData = DetailPageInterface.getRawData(detailTableEl);
chrome.runtime.sendMessage({
action: "data_scraped", items: [singleData], count: 1, source: "Detail Paket", type: "detail"
});
}
// --- MODE C: TIDAK DIKENALI ---
else {
// Console log saja, jangan alert
console.log("[LPSE Scraper] Struktur halaman tidak cocok.");
}
// -----------------------------------------------------------------------
// BAGIAN 2: MANIPULASI KLIK (UNTUK REFERRER/SESSION AMAN)
// -----------------------------------------------------------------------
if (!window.hasClickListener) {
window.hasClickListener = true;
chrome.runtime.onMessage.addListener((request) => {
// ACTION: SIMULASI KLIK
if (request.action === "simulate_click") {
const targetUrl = request.url;
// 1. Coba Cari Link Asli di DOM (Paling Aman)
const allLinks = document.querySelectorAll('a');
let found = false;
for (let link of allLinks) {
if (link.href === targetUrl) {
link.focus();
link.click(); // Klik Native
found = true;
break;
}
}
// 2. Link Hantu (Fallback jika elemen tidak ketemu)
// Membuat elemen A baru, klik, lalu hapus.
// Ini memaksa browser mengirim Referrer dari halaman ini.
if (!found) {
console.log("[LPSE Scraper] Menggunakan Ghost Link...");
const ghostLink = document.createElement('a');
ghostLink.href = targetUrl;
ghostLink.target = "_blank";
ghostLink.rel = "opener"; // Penting untuk session
ghostLink.style.display = "none";
document.body.appendChild(ghostLink);
ghostLink.click();
setTimeout(() => {
document.body.removeChild(ghostLink);
}, 100);
}
}
});
}
})();