""" ======================================================================= Název: forward_last_to_klucho_v1.0.py Verze: 1.0 Datum: 2026-06-03 Popis: Pokusný skript: v Outlook OWA najde poslední odeslaný e-mail na adresu klucho@gastroenterolog.com, otevře Forward, vyplní příjemce vladimir.buzalka@buzalka.cz, předmět "Ahoj", na první řádek těla "Ahoj" a odešle. Používá persistent profil z outlook_login_v1.0.py. headless=False kvůli sledování průběhu. ======================================================================= """ from pathlib import Path from playwright.sync_api import sync_playwright BASE_DIR = Path(__file__).resolve().parent PROFILE_DIR = BASE_DIR / "outlook_profile" START_URL = "https://outlook.cloud.microsoft/mail/" TARGET_RECIPIENT = "klucho@gastroenterolog.com" FORWARD_TO = "vladimir.buzalka@buzalka.cz" GREETING = "Ahoj" def main() -> None: if not PROFILE_DIR.exists(): print(f" Profil nenalezen: {PROFILE_DIR}") print(" Nejprve spusť outlook_login_v1.0.py.") return with sync_playwright() as p: context = p.chromium.launch_persistent_context( user_data_dir=str(PROFILE_DIR), headless=False, no_viewport=True, args=[ "--disable-blink-features=AutomationControlled", "--start-maximized", ], ) page = context.pages[0] if context.pages else context.new_page() # 1) Otevřít Outlook print(" 1/9 Otevírám Outlook...") page.goto(START_URL) page.wait_for_load_state("domcontentloaded") # Search box má proměnlivý placeholder; zkusíme víc variant search_selector = ( '[placeholder*="Search"], [aria-label*="Search"], ' '[placeholder*="Hledat"], [aria-label*="Hledat"]' ) page.wait_for_selector(search_selector, timeout=30_000) # 2) Přejít do Sent Items / Odeslaná pošta print(" 2/9 Otevírám Odeslanou poštu...") sent_candidates = [ 'div[role="treeitem"]:has-text("Sent Items")', 'div[role="treeitem"]:has-text("Odeslaná pošta")', 'text=Sent Items', 'text=Odeslaná pošta', ] for sel in sent_candidates: loc = page.locator(sel).first if loc.count() and loc.is_visible(): loc.click() break page.wait_for_timeout(1500) # 3) Vyhledat e-maily na příjemce print(f" 3/9 Hledám e-maily na {TARGET_RECIPIENT}...") search = page.locator(search_selector).first search.click() search.fill(f"to:{TARGET_RECIPIENT}") search.press("Enter") page.wait_for_timeout(2500) # 4) Kliknout na první (nejnovější) výsledek print(" 4/9 Otevírám nejnovější výsledek...") first_msg = page.locator('div[role="option"]').first first_msg.wait_for(state="visible", timeout=15_000) first_msg.click() page.wait_for_timeout(2000) # 5) Forward print(" 5/9 Klikám Forward...") forward_candidates = [ 'button[aria-label="Forward"]', 'button[aria-label="Přeposlat"]', 'button:has-text("Forward")', 'button:has-text("Přeposlat")', ] clicked = False for sel in forward_candidates: btn = page.locator(sel).first if btn.count() and btn.is_visible(): btn.click() clicked = True break if not clicked: print(" ! Tlačítko Forward nenalezeno — končím.") input(" Stiskni Enter pro zavření... ") context.close() return # 6) Příjemce print(f" 6/9 Vyplňuji příjemce {FORWARD_TO}...") to_field = page.locator( '[aria-label="To"], [aria-label="Komu"], ' '[placeholder*="To"], [placeholder*="Komu"]' ).first to_field.wait_for(state="visible", timeout=10_000) to_field.click() to_field.fill(FORWARD_TO) page.keyboard.press("Tab") page.wait_for_timeout(500) # 7) Předmět print(f" 7/9 Měním předmět na '{GREETING}'...") subject = page.locator( '[aria-label="Subject"], [aria-label="Předmět"]' ).first subject.click() # vybrat vše a přepsat page.keyboard.press("Control+A") page.keyboard.type(GREETING) # 8) Tělo — "Ahoj" na první řádek print(f" 8/9 Vkládám '{GREETING}' na první řádek těla...") body = page.locator( '[aria-label="Message body"], [aria-label="Tělo zprávy"], ' 'div[role="textbox"][contenteditable="true"]' ).first body.click() page.keyboard.press("Control+Home") page.keyboard.type(GREETING) page.keyboard.press("Enter") # 9) Send — POZOR: skutečně odešle e-mail print(" 9/9 Odesílám...") send_btn = page.locator( 'button[aria-label="Send"], button[aria-label="Odeslat"]' ).first send_btn.click() page.wait_for_timeout(3000) print(" Hotovo — e-mail odeslán.") input(" Stiskni Enter pro zavření okna... ") context.close() if __name__ == "__main__": main()