# download_all_inbox_eml_v1.0 **Verze:** 1.0 **Datum:** 2026-06-03 ## Cíl Stáhnout zprávy z Outlook Inboxu jako `.eml` soubory. ## Klíčový princip — virtualizovaný seznam OWA drží v DOM jen ~16 viditelných řádků. `nth(19)` proto nefunguje. Řešení: **navigace klávesnicí** — vybrat první zprávu a opakovaně mačkat `ArrowDown`. Outlook sám scrolluje a dorenderovává. Aktuálně vybraná zpráva je vždy `[role="option"][aria-selected="true"]`. ### Oddělovače sekcí (Today / Yesterday / This week) Jsou to `role="button"` `aria-expanded` prvky, ne zprávy. Když na nich kurzor po `ArrowDown` zastaví, **žádná** zpráva nemá `aria-selected` (`selected.count() == 0`). Takový krok se musí jen přeskočit (`ArrowDown` dál), NEpočítat jako zprávu a NEukončovat smyčku. Konec seznamu se pozná až podle toho, že se `aria-label` vybrané zprávy přestane měnit (`no_progress`). Alternativa: v OWA přepnout řazení na "Show as Messages" (bez seskupení podle data) — pak seznam žádné oddělovače nemá. ## Postup 1. Otevře OWA z persistent profilu (`outlook_profile/`). 2. Přejde do Inboxu. 3. Vybere první zprávu. 4. Smyčka: stáhne vybranou (pravý klik → Download → Download as EML) → `ArrowDown` → opakuje, dokud se výběr přestane hýbat (= konec seznamu). ## Nastavení (v hlavičce skriptu) - `LIMIT` — max počet **uložených zpráv** (`None` = celý Inbox). Aktuálně `30`. - `SKIP_EXISTING` — `True` = soubor stejného jména v `downloads/` znovu neuloží; `False` (aktuální) = existující soubor **smaže a uloží nový** (přepis). ## Výstup `downloads/.eml`. Při kolizi jmen: - `SKIP_EXISTING=False` → starý soubor se smaže a přepíše novým, - `SKIP_EXISTING=True` → soubor se ponechá, nový se neuloží. ## Spuštění ``` python download_all_inbox_eml_v1.0.py ``` ## Poznámky / omezení - Celý Inbox (tisíce zpráv) přes UI je pomalý a křehký — pro velký objem nejdřív zúžit hledáním/filtrem v OWA. `LIMIT=30` je rozumný test. - `SKIP_EXISTING` nešetří čas: identitu zprávy známe až z názvu **po** stažení, takže pravý klik + download proběhne pro každou zprávu; jen se nepřepíše soubor. - Konec seznamu se pozná tak, že se `aria-label` vybrané zprávy přestane měnit (počítadlo `no_progress`, práh `NO_PROGRESS_MAX = 4`). - Okno se po doběhnutí nezavře, čeká na Enter.