Některé věci nejsou složité, ale opakují se pořád dokola. A právě proto začnou časem otravovat. Přesně takhle jsem to měl s objednáváním obědů. Každý týden otevřít web, přihlásit se, projít nabídku, vybrat jídlo na každý den, kliknout na objednání a za pár dní znovu.
Samotné objednání není nic těžkého. Jen je to další drobnost, kterou člověk musí pořád řešit. A když už se podobná činnost opakuje podle nějakých pravidel, přímo si říká o automatizaci.
Cíl byl jednoduchý: nechci každý týden ručně vybírat obědy. Chci mít možnost popsat, co mám rád, co nechci, co je nouzová varianta, a potom to celé vyřešit jedním spuštěním.

Výchozí stav
Obědy se objednávají přes webové rozhraní systému PowerKey. Po přihlášení se zobrazí přehled dnů. U každého dne je stav nabídky, například nabídka připravena. Po kliknutí na konkrétní den se otevře seznam jídel. U každého objednatelného jídla je tlačítko objednat. Pokud už je jídlo objednané, zobrazí se místo toho možnost vrátit.
Celý postup ručně vypadá zhruba takto:
- otevřít web s obědy,
- přihlásit se,
- vybrat den s připravenou nabídkou,
- projít seznam jídel,
- kliknout na objednat u vybraného jídla,
- pokračovat dalším dnem.
Naštěstí se ukázalo, že web je pro automatizaci docela vhodný. Nejde o žádnou divokou moderní aplikaci, kde se všechno neustále mění a generuje až v prohlížeči. Stránky mají poměrně čitelnou strukturu, dny jsou obyčejné odkazy a jednotlivá jídla jsou v samostatných blocích.
Přihlašovací stránka systému PowerKey používá klasický formulář s polem pro účet a heslo, takže šlo doplnit i automatické přihlášení po vypršení uložené session.
První myšlenka: robot v prohlížeči
Nechtěl jsem nic napojovat přímo na databázi ani obcházet systém. Cílem nebylo hackovat objednávkový systém, ale pouze automatizovat stejné klikání, které bych jinak dělal ručně.
Proto se jako ideální řešení ukázal Playwright. Je to nástroj pro automatizaci prohlížeče. Skript otevře normální prohlížečové okno, načte stránku, kliká na odkazy, čte texty z webu a podle pravidel vybírá vhodná jídla.
Výhoda je, že robot používá web stejně jako člověk. Neřeší interní databázi, nemusí znát žádné neveřejné API a pracuje jen s tím, co se zobrazuje v prohlížeči.
Bezpečnost: heslo zůstává lokálně
Nejdřív robot používal uložený profil prohlížeče. To znamená, že jsem se přihlásil ručně a přihlášení zůstalo uložené. Jenže po nějaké době session vyprší a web chce přihlášení znovu. To je normální chování podobných systémů.
Proto přibyla druhá verze, která umí automatické přihlášení. Přihlašovací údaje jsou uložené v lokálním souboru prihlaseni.json.
Tenhle soubor zůstává jen v mém počítači. Nikam se neposílá a není součástí skriptu. Je to samozřejmě kompromis: pohodlí za cenu toho, že heslo existuje v textovém souboru. Na mém domácím počítači mi to nevadí, ale na sdíleném nebo pracovním stroji bych s tím byl opatrnější.
Jak robot vybírá jídla
Nejdůležitější část nejsou samotná kliknutí, ale rozhodování. Robot musí poznat, které jídlo je lepší.
Tohle jsem chtěl nejprve řešit pomocí AI, ale nakonec se ukázalo, že úplně stačí jednoduchý bodovací systém. V souboru pravidla.json jsou uložené seznamy slov, podle kterých se každé jídlo automaticky oboduje.

Princip je jednoduchý:
- oblíbená slova přidávají body,
- méně oblíbená slova body ubírají,
- zakázaná slova jídlo úplně vyřadí,
- konkrétní jídla se dají doladit ručním bodováním.
Díky tomu si můžu pravidla postupně upravovat podle reality. Když robot vybere něco, co bych si ručně nevybral, přidám danému slovu záporné body. Když naopak chci nějaké jídlo preferovat, přidám mu body navíc.
Praktické je, že porovnávání neřeší velikost písmen ani diakritiku. Slovo rýže tedy může sedět i na text bez diakritiky.
Náhled před objednáním
První verze robota byla záměrně opatrná. Neobjednávala nic automaticky. Jen prošla nabídku a vypsala, co by vybrala.
Tohle je hodně důležité. Automatizace, která hned kliká na objednání, může být nebezpečná. Stačí špatné pravidlo a člověk má objednaný týden salátů nebo sladkých jídel. Proto jsem nejdřív ladil jen náhled.
Až když náhled vybíral rozumně, přišla na řadu objednávací verze.
Objednání na jedno spuštění
Postupně vznikly tři hlavní spouštěcí soubory:
spustit_nahled.bat – pouze projde jídelníček a vypíše návrh objednávky.

spustit_objednani_s_potvrzenim.bat – připraví objednávky, ale před finálním potvrzením ještě čeká na ruční schválení.

spustit_objednani.bat – objedná jídla automaticky bez dalšího potvrzení a na konci jen vypíše souhrn toho, co objednal.

Díky tomu se celé objednávání zjednodušilo na jedno spuštění. Robot se případně přihlásí, projde připravené dny, vybere jídla podle nastavených pravidel, provede objednávku a nakonec vypíše přehledný souhrn.
Co robot na stránce hledá
Z uložených stránek šlo zjistit, že každý den s nabídkou je na hlavní stránce dostupný přes odkaz s textem nabídka připravena. V odkazu jsou parametry konkrétního dne.
Po otevření dne robot hledá sekci Jídla. Polévky a informativní položky ignoruje. V sekci jídel potom projde jednotlivé položky a u každé hledá tlačítko objednat.
Pokud už je u jídla možnost vrátit, znamená to, že je daný den už objednaný. Takový den robot standardně přeskočí, aby nepřepisoval existující objednávku.
Zjednodušeně:
- najdi dny s připravenou nabídkou,
- otevři první den,
- najdi sekci „Jídla“,
- přečti názvy jídel,
- oboduj je podle pravidel,
- vyber nejlepší,
- klikni na objednat,
- pokračuj dalším dnem.
Průběžné ladění pravidel
Nejzajímavější na tom je, že hotový není ani tak samotný robot, ale spíš pravidla. Ta se dají ladit průběžně podle jídelníčků.
Když se objeví jídlo, které robot vybere špatně, stačí upravit bodování. Například:"květákový mozeček": -40, "těstovinový salát": -40, "guláš": 30, "řízek": 30
Tím se robot postupně přibližuje tomu, jak bych vybíral ručně. Nejde o dokonalou inteligenci, ale o praktický filtr. A pro tenhle účel to úplně stačí.
Závěr
Celý projekt vznikl z obyčejné otravy. Objednávání obědů není nic složitého, ale opakovat to každý týden je zbytečná rutina. Díky ChatGPT 5.5 Thinking se podařilo udělat lokálního robota, který web ovládá stejně jako člověk, ale řídí se předem nastavenými pravidly.
Nejdřív jsem začal bezpečně jen náhledem. Potom přibylo objednání s potvrzením. Nakonec i automatické přihlášení a objednání bez dalšího dotazu. Výsledek je jednoduchý: spustím jeden soubor a obědy jsou vyřešené.
