Script Selenium untuk login ke codingcamp.dicoding.com, membuka semua data
siswa, lalu mengekstrak data mentor + detail semua siswa ke CSV (default).
Perintah paling simpel:
uv run python main.pyPada mode default, script akan:
- Menyiapkan browser/driver otomatis.
- Login dengan mode
hybrid. - Menjalankan pipeline
scrape-transform. - Menyimpan hasil CSV ke folder
output/.
Saat startup, script mencoba strategi ini berurutan:
- Browser + driver yang sudah ada di sistem/proyek.
- Selenium Manager.
- Download Chrome for Testing + chromedriver ke cache lokal (
.runtime/).
Jadi user biasa cukup jalankan satu command, sementara user advanced tetap bisa override path browser/driver secara manual.
- Python
>= 3.12 - Internet pada first run jika browser/driver belum tersedia.
- (Opsional)
secret.pyuntuk auto login:
EMAIL = "email_kamu@example.com"
PASSWORD = "password_kamu"uv syncpython -m venv .venv
source .venv/bin/activate
pip install -r requirements.txtUntuk Windows (PowerShell):
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txtuv run python main.py--pipeline-mode {scrape-transform,scrape,transform}- Default:
scrape-transform - Catatan: mode
transformhanya valid untuk--source codingcamp.
Perilaku:
scrape-transform: scrape live lalu transform ke CSV.scrape: scrape live saja (JSON).transform: transform JSON existing ke CSV tanpa Selenium login.
Contoh:
uv run python main.py --pipeline-mode scrape-transform
uv run python main.py --pipeline-mode scrape --output-format json
uv run python main.py --pipeline-mode transform --transform-group CDC-04Opsi khusus mode transform:
--transform-source <path_json>--transform-group <id_group>
--auth-mode {hybrid,auto,manual}(default:hybrid)--profile-dir <path>(default:.selenium_profile/codingcamp)--manual-login-timeout <seconds>(default:600)
Contoh:
uv run python main.py --auth-mode manual --headed
uv run python main.py --auth-mode auto--browser-path <path>: pakai binary browser tertentu.--driver-path <path>: pakai chromedriver tertentu.--runtime-dir <path>: lokasi cache runtime otomatis (default:.runtime/browser).--offline: nonaktifkan download runtime otomatis.--log-level {DEBUG,INFO,WARNING,ERROR}(default:INFO).
Contoh:
uv run python main.py --browser-path "C:\\Chrome\\chrome.exe" --driver-path "C:\\Driver\\chromedriver.exe"
uv run python main.py --offline
uv run python main.py --log-level DEBUG--output-format {csv,json,both}(default:csv)- Berlaku untuk mode scrape/scrape-transform.
Contoh:
uv run python main.py --output-format csv
uv run python main.py --output-format json
uv run python main.py --output-format bothSemua hasil disimpan di output/.
- Default (CSV):
output/mentor_data.csvoutput/student.csvoutput/student_daily_checkin.csvoutput/student_assignment.csvoutput/student_attendance.csvoutput/student_course_progress.csv
- Jika
--output-format jsonatauboth:output/codingcamp_<nama_group>_full.json
- ASAH reference:
output/asah_live_attendance_reference.json
File output bersifat statis per group dan akan di-replace jika sudah ada.
Entry point tetap sederhana:
main.py: launcher utamaetl.py: transform JSON existing ke CSV
Modul internal sudah dipindah ke package core/ agar lebih rapih, meliputi:
- auth/login flow
- browser/runtime bootstrap
- extractor DOM dan progress
- builder export JSON/CSV
- settings, UI actions, dan util output
Untuk transform JSON existing tanpa scraping ulang:
uv run python etl.py --group CDC-04Validasi apakah file CSV output ada dan header kolomnya sesuai contract:
uv run python quality_checks.pyMenjalankan main.py --output-format csv lalu validasi schema CSV:
uv run python smoke_test.pyOpsi penting:
--skip-run: hanya validasi output yang sudah ada.--run-mode {inprocess,subprocess}(default:inprocess).
Untuk pakai argumen login/runtime yang sama seperti main.py, langsung
tambahkan di belakang command:
uv run python smoke_test.py --auth-mode hybrid --headed
uv run python smoke_test.py --run-mode subprocess --auth-mode hybrid- First run bisa lebih lama karena bootstrap runtime.
- Sesi login tidak di-reuse antar-run; autentikasi dimulai dari sesi baru.
- Saat login manual dibutuhkan, browser otomatis berjalan dalam mode UI (headed).
- Folder lokal runtime di-ignore git:
output/,chromedriver/,.selenium_profile/,.runtime/,archive_unused/.