• script.py
  • import os
    if os.name == "nt":
        print("WINDOWS DETECTED! PLEASE DO NOT USE THIS SCRIPT ON WINDOWS! IT'S TOO BUGGY!")
        from pyreadline3 import Readline
        #exit()
    else: 
        import readline
    from time import sleep
    from selenium import webdriver
    from selenium.common.exceptions import WebDriverException, NoSuchWindowException
    from selenium.webdriver.chrome.options import Options
    from watchdog.observers import Observer
    from watchdog.events import FileSystemEventHandler
    import sys
    import os.path
    import threading
    from inners.classes import *
    
    
    class AutoReload: 
        def default_root(self):
            self._root = "http://127.0.0.1:80/Test/"
    
        def default_spage(self):
            self._start_page = "./login.php"
    
        def __init__(self, root:str = "", start_page: str = "", print: bool = False, handle_arg: bool = False, su: bool = False, new = True):
            if not new: 
                return
            self._root = root
            self._start_page = start_page
            self.print = print
            self.file_name = sys.argv[0]
            self.print = False
            self.ignore = False
            self.ignoreArr = []
    
            self.opt = webdriver.ChromeOptions()
            if su: 
                self.opt.add_argument("--no-sandbox")
                self.opt.add_argument("--headless")
            
            if os.name == "nt": 
                self.opt.add_experimental_option("excludeSwitches", ["enable-logging"])
    
            self.driver = webdriver.Chrome(options=self.opt)
            self.observer = Observer()
            if self._root == "":
                self.default_root()
            if self._start_page == "":
                self.default_spage()
            self.lastEVENT = self._start_page
    
        class Handler(FileSystemEventHandler):
            def __init__(self, outer_instance):
                self.outer = outer_instance
            
            def on_modified(self, event):
                if self.outer.print: 
                    print(f"[{bcolors.OKBLUE}{bcolors.BOLD}INFO{bcolors.ENDC}] File changed: {event.src_path}")
                for item in self.outer.ignoreArr:
                    if item in event.src_path:
                        self.outer.driver.get(self.outer._root + self.outer.lastEVENT)
                        return
                if ".php" in event.src_path or (".htm" in event.src_path and self.outer.ignore == False): 
                     self.outer.driver.get(self.outer._root + event.src_path)
                     self.outer.lastEVENT = event.src_path
                     return
                if ".css" in event.src_path or ".js" in event.src_path or ".htm" in event.src_path:
                     self.outer.driver.get(self.outer._root + self.outer.lastEVENT)
                     return
    
        def close(self,msg = ""):
            if msg != "":
                print(msg)
            self.driver.close()
            self.observer.stop()
            self.observer.join()
    
        def isBrowserAlive(self):
            try:
                self.driver.current_url
                return True
            except:
                return False
    
        def browserCheck(self, alive = True):
            while alive: 
                if not self.isBrowserAlive(): 
                    print(f"\n{msgHeaders.WARNING} Driver closed!")
                    alive = False
                sleep(1)