from pathlib import Path html = r""" صفحة تسجيل تجريبية

إنشاء حساب تجريبي

""" py = r'''import customtkinter as ctk import random, time, threading, subprocess, sys, os, tempfile from pathlib import Path FIRST_NAMES = ["James","John","Robert","Michael","William","David","Richard","Joseph","Thomas","Charles", "Christopher","Daniel","Matthew","Anthony","Mark","Paul","Steven","Andrew","Kenneth","Sarah"] LAST_NAMES = ["Smith","Johnson","Williams","Brown","Jones","Garcia","Miller","Davis","Wilson","Taylor", "Moore","Jackson","Martin","Anderson","Thomas","White","Harris","Clark","Lewis","Young"] HTML_FILE = Path(__file__).with_name("signup_demo.html") class DemoAutomationGUI(ctk.CTk): def __init__(self): super().__init__() self.title("لوحة تحكم أتمتة صفحة HTML تجريبية") self.geometry("1000x750") self.resizable(False, False) self.is_running = False self.is_paused = False self.font_title = ctk.CTkFont(family="Arial", size=22, weight="bold") self.font_header = ctk.CTkFont(family="Arial", size=16, weight="bold") self.font_btn = ctk.CTkFont(family="Arial", size=15, weight="bold") self.font_body = ctk.CTkFont(family="Arial", size=14) self.title_label = ctk.CTkLabel( self, text="أتمتة صفحة تسجيل HTML تجريبية", font=self.font_title) self.title_label.pack(pady=(15, 10)) top = ctk.CTkFrame(self, fg_color="transparent") top.pack(fill="x", padx=20, pady=5) top.grid_columnconfigure((0,1), weight=1) box = ctk.CTkFrame(top, fg_color="#2A2A32") box.grid(row=0,column=0,padx=10,sticky="nsew") ctk.CTkLabel(box,text="بيانات الحساب التجريبي",font=self.font_header).pack(anchor="w",padx=15,pady=8) self.fname = ctk.CTkEntry(box,placeholder_text="الاسم الأول",font=self.font_body,height=38) self.fname.pack(fill="x",padx=15,pady=5) self.lname = ctk.CTkEntry(box,placeholder_text="اسم العائلة",font=self.font_body,height=38) self.lname.pack(fill="x",padx=15,pady=5) self.email = ctk.CTkEntry(box,placeholder_text="البريد الإلكتروني",font=self.font_body,height=38) self.email.pack(fill="x",padx=15,pady=5) self.password = ctk.CTkEntry(box,placeholder_text="كلمة المرور",show="*",font=self.font_body,height=38) self.password.pack(fill="x",padx=15,pady=5) self.dob = ctk.CTkEntry(box,placeholder_text="تاريخ الميلاد: 1999-05-15",font=self.font_body,height=38) self.dob.pack(fill="x",padx=15,pady=5) self.gender = ctk.CTkComboBox(box,values=["ذكر","أنثى"],font=self.font_body,height=38) self.gender.pack(fill="x",padx=15,pady=5) self.btn_names = ctk.CTkButton(box,text="توليد اسم عشوائي",font=self.font_btn, command=self.generate_names,height=38) self.btn_names.pack(fill="x",padx=15,pady=7) box2 = ctk.CTkFrame(top, fg_color="#2A2A32") box2.grid(row=0,column=1,padx=10,sticky="nsew") ctk.CTkLabel(box2,text="إعدادات التشغيل",font=self.font_header).pack(anchor="w",padx=15,pady=8) self.url_entry = ctk.CTkEntry(box2,font=self.font_body,height=38) self.url_entry.insert(0, HTML_FILE.as_uri()) self.url_entry.pack(fill="x",padx=15,pady=5) ctk.CTkLabel(box2,text="التأخير بين الخطوات (ثوانٍ)",font=self.font_body).pack(anchor="w",padx=15,pady=(12,3)) self.delay = ctk.CTkSlider(box2,from_=0.5,to=4.0,number_of_steps=14) self.delay.set(1.5) self.delay.pack(fill="x",padx=15,pady=5) self.btn_open = ctk.CTkButton(box2,text="فتح الصفحة التجريبية",font=self.font_btn, command=self.open_page,height=38) self.btn_open.pack(fill="x",padx=15,pady=8) mid = ctk.CTkFrame(self,fg_color="#2A2A32") mid.pack(fill="both",expand=True,padx=20,pady=10) ctk.CTkLabel(mid,text="سجل العمليات",font=self.font_header).pack(anchor="w",padx=15,pady=5) self.log = ctk.CTkTextbox(mid,font=self.font_body,fg_color="#1E1E24",text_color="#DDD") self.log.pack(fill="both",expand=True,padx=10,pady=5) actions = ctk.CTkFrame(self,fg_color="#2A2A32") actions.pack(fill="x",padx=20,pady=10) self.btn_stop = ctk.CTkButton(actions,text="إيقاف نهائي",fg_color="#C0392B", command=self.stop,height=45) self.btn_stop.pack(side="left",padx=10,pady=15,expand=True,fill="x") self.btn_pause = ctk.CTkButton(actions,text="إيقاف مؤقت",fg_color="#F39C12", command=self.pause,height=45) self.btn_pause.pack(side="left",padx=10,pady=15,expand=True,fill="x") self.btn_start = ctk.CTkButton(actions,text="بدء الأتمتة",fg_color="#27AE60", command=self.start,height=45) self.btn_start.pack(side="left",padx=10,pady=15,expand=True,fill="x") self.status = ctk.CTkLabel(self,text="جاهز ⚪",font=self.font_body) self.status.pack(pady=(0,8)) self.log_msg("تم تشغيل البرنامج. الصفحة التجريبية جاهزة.") def log_msg(self,msg): self.after(0,lambda:self.log.insert("end",f"[{time.strftime('%H:%M:%S')}] {msg}\n")) self.after(0,lambda:self.log.see("end")) def generate_names(self): self.fname.delete(0,"end"); self.fname.insert(0,random.choice(FIRST_NAMES)) self.lname.delete(0,"end"); self.lname.insert(0,random.choice(LAST_NAMES)) self.log_msg("تم توليد اسم تجريبي.") def open_page(self): if not HTML_FILE.exists(): self.log_msg("ملف HTML غير موجود.") return os.startfile(HTML_FILE) if sys.platform=="win32" else subprocess.Popen(["xdg-open",str(HTML_FILE)]) self.log_msg("تم فتح صفحة HTML التجريبية.") def start(self): if self.is_running: return self.is_running=True self.is_paused=False self.status.configure(text="جاري التشغيل 🟢") threading.Thread(target=self.run_automation,daemon=True).start() def pause(self): if self.is_running: self.is_paused=not self.is_paused self.status.configure(text="موقوف مؤقتاً 🟡" if self.is_paused else "جاري التشغيل 🟢") self.log_msg("تم تغيير حالة الإيقاف المؤقت.") def stop(self): self.is_running=False self.is_paused=False self.status.configure(text="متوقف 🔴") self.log_msg("تم إيقاف العملية.") def wait(self): while self.is_running and self.is_paused: time.sleep(0.2) def run_automation(self): data = { "الاسم الأول": self.fname.get().strip(), "اسم العائلة": self.lname.get().strip(), "البريد الإلكتروني": self.email.get().strip(), "كلمة المرور": self.password.get(), "تاريخ الميلاد": self.dob.get().strip(), "النوع": self.gender.get().strip() } if not all(data.values()): self.log_msg("املأ كل البيانات أولاً.") self.is_running=False return self.open_page() steps = [ "فتح الصفحة التجريبية", "قراءة بيانات الحساب من النافذة", "ملء الاسم الأول", "ملء اسم العائلة", "ملء البريد الإلكتروني", "ملء كلمة المرور", "ملء تاريخ الميلاد", "اختيار النوع", "مراجعة البيانات", "إرسال النموذج التجريبي" ] for step in steps: if not self.is_running: break self.wait() self.log_msg(step + "...") time.sleep(float(self.delay.get()) + random.uniform(0.2,0.8)) self.log_msg(step + " تم") if self.is_running: self.log_msg("اكتملت محاكاة التسجيل التجريبي بنجاح.") self.status.configure(text="اكتملت العملية 🔵") self.is_running=False if __name__=="__main__": app=DemoAutomationGUI() app.mainloop() ''' base = Path("/mnt/data") (base/"signup_demo.html").write_text(html, encoding="utf-8") (base/"demo_automation.py").write_text(py, encoding="utf-8") (base/"README.txt").write_text( """طريقة التشغيل: 1) ثبّت Python 3.10+. 2) ثبّت CustomTkinter: pip install customtkinter 3) ضع signup_demo.html و demo_automation.py في نفس المجلد. 4) شغّل: python demo_automation.py هذه نسخة تجريبية تعمل على صفحة HTML محلية ولا تتصل بفيسبوك. """, encoding="utf-8") import zipfile zip_path = base/"HTML_Automation_Demo.zip" with zipfile.ZipFile(zip_path,"w",zipfile.ZIP_DEFLATED) as z: z.write(base/"demo_automation.py","demo_automation.py") z.write(base/"signup_demo.html","signup_demo.html") z.write(base/"README.txt","README.txt") print(zip_path)