Vytvoř mi Python skript pro automatickou aktualizaci chromedriver.exe na systému Windows. Celý skript musí být zapouzdřen do jediné třídy.
Požadavky na funkčnost:
- Zjištění verze Chrome:
- Skript musí zjistit verzi nainstalovaného prohlížeče Google Chrome.
- Verze musí být načtena přímo z vlastností souboru
chrome.exe. - Pro čtení vlastností souboru použij knihovnu
pywin32(win32api,win32con). - Implementuj
try-exceptblok pro importpywin32a v případě chyby vypiš chybovou zprávu a nastav příslušné proměnné naNone, aby zbytek skriptu mohl běžet dál s upozorněním. - Procházej standardní cesty k
chrome.exe(Program Files, Program Files (x86), Local AppData). - Pokud se nepodaří zjistit verzi, skript by měl zalogovat chybu a proces aktualizace přerušit.
- Stažení Chromedriveru:
- Použij knihovnu
webdriver_manager.chrome.ChromeDriverManager. ChromeDriverManagerby měl automaticky detekovat a stáhnout správnou verzichromedriver.exena základě zjištěné verze Chrome. Nepředávej explicitně argumentversiondo konstruktoruChromeDriverManager(), aby se předešlo chybám s neočekávanými argumenty.- Zaloguj cestu, kam byl nový
chromedriver.exestažen.
- Použij knihovnu
- Vyhledávání existujících Chromedriverů:
- Metoda pro vyhledávání (
_find_chromdrivers) by měla rekurzivně prohledávat zadané kořenové adresáře. - Skript NESMÍ automaticky prohledávat celý disk C: ani jiné „běžné“ systémové cesty pro
chromedriver.exe. - Místo toho musí být v hlavní metodě
update_all_chromdriversdefinován seznamsearch_directories, který bude zpočátku prázdný. Uživatel bude moci tento seznam ručně vyplnit cestami, které chce prohledávat. - Pokud je seznam
search_directoriesprázdný, skript by měl zalogovat varování a přeskočit fázi hledání. - Při procházení adresářů pomocí
os.walkimplementuj ošetření chyb (onerrorparametr), aby se skript nezasekl na nepřístupných adresářích. Zalóguj varování pro přeskočené adresáře. - Implementuj volitelný parametr
max_depth(s výchozí hodnotou 5) pro omezení hloubky prohledávání v každémroot_dir. Hodnota-1by měla znamenat neomezenou hloubku.
- Metoda pro vyhledávání (
- Nahrazení a zálohování:
- Každý nalezený
chromedriver.exemusí být nahrazen nově staženou verzí. - Před nahrazením musí být stará verze přejmenována na zálohu ve formátu
chromedriver.exe.backup_YYYY_MM_DD(např.chromedriver.exe.backup_2025_06_02). - Pokud záložní soubor se stejným názvem již existuje, měl by být smazán před přejmenováním, aby se předešlo chybám.
- Zaloguj úspěšné i neúspěšné náhrady.
- Ošetři chyby oprávnění (
PermissionError) při nahrazování souborů a zaloguj instrukce pro spuštění skriptu jako administrátor.
- Každý nalezený
- Struktura třídy a logování:
- Všechna logika musí být obsažena v jedné třídě (např.
ChromeDriverUpdater). - Použij modul
loggingpro všechny výstupy (INFO, WARNING, ERROR, CRITICAL). - Zajisti, aby logy byly podrobné a poskytovaly dostatek informací o průběhu a případných problémech.
- V hlavní spouštěcí části (
if __name__ == "__main__":) vytvoř instanci třídy a zavolej hlavní metodu.
- Všechna logika musí být obsažena v jedné třídě (např.
Předpoklady:
- Skript je určen pro operační systém Windows.
- Před spuštěním skriptu musí být nainstalovány knihovny
webdriver-managerapywin32. - Pro úspěšnou náhradu souborů v chráněných složkách je nutné skript spustit s administrátorskými oprávněními.