Files
Tirsvad a1b9e7caa6
TirSystem/git-workflows: OpenGrep / opengrep (push) Skipped
TirSystem/git-workflows: Publish wiki / publish-wiki (push) Skipped
TirSystem/git-workflows: Sync GitHub mirror metadata / sync-metadata (push) Skipped
TirSystem/git-workflows: Publish accepted milestones / publish (push) Skipped
TirSystem/git-workflows: Validate / validate (push) Skipped
TirSystem/git-workflows: Validate / validate (pull_request) Successful in 38s
TirSystem/git-workflows: OpenGrep / opengrep (pull_request) Successful in 3m59s
Flatten wiki to Home.md, Home-da.md and Home-ms.md for the wiki publisher
2026-11-03 10:45:46 +08:00

58 lines
2.4 KiB
Markdown

# Dag 50 - Tinder auto find match (Dansk)
[English](Home) · [Bahasa Malaysia](Home-ms)
Mål: automatisér login og "like" af profiler på TinDog med Python og Selenium.
Etik først: fortæl din partner, at du automatiserer, og respektér den daglige
grænse (TinDog 20, Tinder gratis 100).
## Trin 1 - Se siden igennem manuelt
![Forside](../screenshots/01-home.png)
**Det lærte vi:** klik først selv igennem og notér, hvilke elementer koden skal
ramme. Gode locators kommer af at kende siden.
## Trin 2 - Gå til login-siden
![Login-vindue](../screenshots/02-login-modal.png)
**Det lærte vi:** `driver.get`, XPath-locators (`locators.py`) og at vente med
`WebDriverWait` + `element_to_be_clickable` i stedet for faste `sleep`. Det
undgår `NoSuchElementException` på langsomme sider.
## Trin 3 - Facebook-popup
![Facebook-popup](../screenshots/03-facebook-popup.png)
**Det lærte vi:** login åbner et ekstra browservindue. Vi skifter med
`driver.window_handles` og `switch_to.window`, udfylder formularen og skifter
tilbage. Loginoplysninger ligger i miljøvariabler, aldrig i koden.
## Trin 4 - Luk alle forespørgsler
Lokation ([04](../screenshots/04-location.png)), notifikationer
([05](../screenshots/05-notifications.png)), cookies
([06](../screenshots/06-cookies.png)).
![Cookies](../screenshots/06-cookies.png)
**Det lærte vi:** modale popups blokerer alt bagved. Vi klikker ALLOW, NOT
INTERESTED og I ACCEPT og springer en popup over, hvis den ikke dukker op
(`TimeoutException` håndteres og logges).
## Trin 5 - Tryk Like
![Liker](../screenshots/07-liking.png)
![Match-popup](../screenshots/08-match-popup.png)
**Det lærte vi:** undtagelser som styring af en ustabil brugerflade:
`NoSuchElementException` betyder "indlæser stadig, vent 2 sek. og prøv igen";
`ElementClickInterceptedException` betyder "en match-popup er i vejen, klik
BACK TO TINDER". En pause mellem likes gør, at botten ikke ligner en bot.
Løkken stopper ved den indstillede grænse.
![Færdig](../screenshots/09-done.png)
## Modernisering ift. den tidligere løsning
- `src/`-pakke med én funktion pr. trin i stedet for én klasse med `sleep`.
- Eksplicitte ventetider i stedet for faste; alle locators ét sted.
- Facebook-login (som lektionen beder om) i stedet for Google; indstillinger i
en `Settings`-dataclass; enhedstests med en falsk driver.
- Ingen `from constants import *`, ingen HTML-dumps.