Skip to content

Instantly share code, notes, and snippets.

@fdciabdul
Last active May 24, 2025 15:44
Show Gist options
  • Save fdciabdul/d0476bb3b42750b7cdce64b5112b14d1 to your computer and use it in GitHub Desktop.
Save fdciabdul/d0476bb3b42750b7cdce64b5112b14d1 to your computer and use it in GitHub Desktop.
Changelog

Changelog BCA Mobile Scraper - Sebelum vs Sesudah

FITUR SEBELUM FINAL (Paste 1)

Kelemahan yang Ada:

  1. Tidak Ada Kontrol App - Tidak bisa mengecek atau meluncurkan app BCA secara otomatis
  2. Login Sederhana - Hanya menggunakan satu selector untuk tombol login
  3. REFF NO Bermasalah - Menggunakan nama + nominal + tanggal, jadi bisa duplikat
  4. Tidak Ada Retry - Kalau gagal, langsung error tanpa coba lagi
  5. Logging Berisik - LogLevel 'info' yang terlalu banyak output
  6. Tidak Deteksi Duplikat - Transaksi sama bisa diproses berulang kali

FITUR SESUDAH FINAL (Paste 2)

πŸš€ FITUR BARU YANG DITAMBAHKAN:

1. ADB App Management

// SEBELUM: Tidak ada
// SESUDAH: Ada kontrol penuh
isBCAAppRunning()           // Cek app jalan atau tidak
launchAppWithADB()          // Launch app pakai ADB
ensureAppIsRunning()        // Pastikan app jalan
restartApp()                // Restart app kalau error

2. Login yang Lebih Robust

// SEBELUM: Cuma satu selector
const loginButton = await this.driver.$('//android.widget.TextView[@text="Masuk"]');

// SESUDAH: Multiple selectors + retry
const selectors = [
  '//android.widget.ScrollView/android.view.View[6]',
  '//android.widget.TextView[@text="Masuk"]',
  '//android.view.View[@content-desc="Masuk"]',
  '//android.widget.Button[contains(@text, "Masuk")]',
  '//*[@text="Masuk"]'
];
// + findLoginButton() dengan 3x retry

3. REFF NO yang Konsisten

// SEBELUM: Bermasalah
const key = `${name}_${amount}_${date}`;  // Pakai tanggal

// SESUDAH: Konsisten
const key = `${name}_${amount}`;  // Tanpa tanggal
// Reference number sekarang based on nama + nominal aja

4. Duplikat Prevention

// SEBELUM: Tidak ada
// SESUDAH: Ada pengecekan
const duplicateCheckStmt = this.db.prepare(`
  SELECT COUNT(*) as count FROM transactions 
  WHERE description = ? AND amount = ? AND tanggal = ?
`);

5. Chronological Tracking

// SEBELUM: Random order
const existingStmt = this.db.prepare("SELECT * FROM transactions");

// SESUDAH: Urutan waktu
const existingStmt = this.db.prepare("SELECT * FROM transactions ORDER BY timestamp ASC");

6. Enhanced Debugging

// SEBELUM: Logging berisik
logLevel: 'info'

// SESUDAH: Silent mode + debugging terstruktur
logLevel: 'silent'
console.log('Text values array:', textValues);
console.log('PEND Transaction:', {...});
console.log('Current reference counters:', refCounters);

7. Container Selector Update

// SEBELUM: Selector lama
'//o.r8lambdaBE22IXHLZLFTWxXTr9rzJPOX9g/android.view.View/android.view.View[3]/android.view.View[3]'

// SESUDAH: Selector baru
'//o.AFj1lSDK2/android.view.View/android.view.View[3]/android.view.View[3]'

πŸ“Š PERBANDINGAN DETAIL

Aspek

Sebelum

Sesudah

App Control

❌ Tidak ada

βœ… Full ADB control

Login Retry

❌ Sekali gagal = error

βœ… 3x retry + multiple selectors

REFF NO

❌ Nama+nominal+tanggal

βœ… Nama+nominal (konsisten)

Duplikat

❌ Bisa duplikat

βœ… Auto skip duplikat

Chronological

❌ Random order

βœ… Timestamp-based order

Logging

❌ Berisik (info)

βœ… Silent + structured debug

Error Recovery

❌ Crash = selesai

βœ… Auto restart app

Transaction Type

❌ Basic

βœ… Enhanced detection CR/DB


🎯 HASIL AKHIR SETELAH UPDATE

Problem yang Terselesaikan:

  1. βœ… REFF NO Konsisten - A transfer 50k β†’ REFF NO 1, 2, 3, 4... (tidak peduli urutan tampilan)
  2. βœ… No More Crashes - App otomatis restart kalau error
  3. βœ… Reliable Login - Multiple cara login + retry mechanism
  4. βœ… No Duplicates - Transaksi sama tidak diproses 2x
  5. βœ… Better Performance - Silent logging + efficient processing
  6. βœ… Enhanced Stability - ADB control untuk app management

Contoh Skenario Sekarang:

A transfer 50k (hari 1) β†’ REFF NO 1
B transfer 30k (hari 1) β†’ REFF NO 1  
A transfer 50k (hari 2) β†’ REFF NO 2  ← Konsisten!
A transfer 50k (hari 3) β†’ REFF NO 3  ← Tetap berurutan!

Intinya: Dari scraper yang basic dan sering error, sekarang jadi scraper yang robust, reliable, dan intelligent! πŸš€

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