Mijn vraag:
Is er iemand die ervaring heeft met het automatiseren van taken in AFAS met behulp van Python, die wellicht inzicht kan delen waarom Selenium de elements niet kan vinden - wat doe ik verkeerd?
Achtergrond:
Voor mijn werk mag ik elke maand via AFAS declaraties indienen voor woon-werkverkeer en thuiswerkdagen. Dit komt er in de praktijk op neer dat ik aan het einde van elke maand ~20x dezelfde handeling moet verrichten (de genummerde handelingen moeten voor elke gewerkte dag worden gedaan):
Aangezien ik al wat ervaring heb met het automatiseren met Python (Selenium) dacht ik: dan doe ik het zelf wel (en ook omdat ik het leuk vind om te doen - als het werkt geeft dat een kick, volgens mij ben ik hierin niet uniek
).
Echter: ik merk dat AFAS (via de browser) zich anders gedraagt dan andere websites: knoppen hebben bijvoorbeeld wel een static ID, maar als ik dat ID gebruik om het element te vinden en mee te interacten, dan crasht mijn script omdat het element niet gevonden kan worden. Ook via xPath werkt het niet. Ik ben er inmiddels van overtuigd dat ik iets 'over het hoofd zie' (lees: onvoldoende ervaring) en dat iemand me wellicht een tip kan geven om me verder te helpen. Vandaar dit bericht.
Relevante software en hardware die ik gebruik:
Mijn script doet nu dit:
Ik heb een aantal dagen (!) geprobeerd het op te lossen door met tab-key te werken (naar nieuw veld) en dan waardes te senden (naam van het project) en dan door enter-key te senden te bevestigen, daarna tab om naar het volgende veld te gaan, maar dit is een rommeltje en zeer onbetrouwbaar.
Ik ben nu weer terug bij 'het moet toch lukken met xPath of ID', want die kan ik gewoon vinden door de elements te inspecten (en het knaagt dat het niet werkt). Ik heb veel gezocht op de gebruikelijke plekken (StackOverflow, etc. maar omdat AFAS Nederlands is is er vrijwel niets te vinden) en uiteraard ChatGPT gevraagd om suggesies, waaruit komt dat er mogelijk sprake kan zijn van non-static ID's (wat volgens mij niet het geval is: de ID's zijn altijd hetzelfde), met wait.until commands (ervan uitgaande dat er gewacht moet worden tot het venster stabiel is), met 10 seconden tussen elke actie van het script (zeker weten dat het veld interactable is), maar alles faalt.
De overlay die toont na het klikken van de knop voor nieuwe declaraties (#9) zou de oorzaak kunnen zijn dat Selenium die overlay niet 'ziet' (het zou een iFrame kunnen zijn waar ik eerst naar moet switchen, maar in de page source komt niets terug met 'iframe' in de naam), maar waarom kan de knop voor nieuwe declaraties (#9) niet gevonden worden - er is op dat moment geen sprake van een overlay, de knop is duidelijk in beeld dus mogelijk zit het probleem ergens anders.
Maar waar? Bij het inloggen (#6) kan het de elements (velden voor inlognaam en ww) wél vinden met
Zoals je merkt: het is behoorlijk frustrerend en ik betwijfel of gewoon maar 20x dezelfde handeling doen elke maand mijn lot is. Ik ben nadrukkelijk niet op zoek naar iemand die een script voor mij maakt (anders was ik wel naar V&A gegaan) maar wel naar suggesties en tips, wellicht iemand die ook met AFAS werkt en heeft uitgevonden wat er speelt.
Bij voorbaat dank!
Is er iemand die ervaring heeft met het automatiseren van taken in AFAS met behulp van Python, die wellicht inzicht kan delen waarom Selenium de elements niet kan vinden - wat doe ik verkeerd?
Achtergrond:
Voor mijn werk mag ik elke maand via AFAS declaraties indienen voor woon-werkverkeer en thuiswerkdagen. Dit komt er in de praktijk op neer dat ik aan het einde van elke maand ~20x dezelfde handeling moet verrichten (de genummerde handelingen moeten voor elke gewerkte dag worden gedaan):
- Ga naar portal
- Log in
- Ga naar juiste pagina
- Klik knop 'Maak declaratie aan'
- Vul in datumveld (voor elke gewerkte dag)
- Vul in projectnaamveld (identieke waarde)
- Vul in projectfaseveld (identieke waarde)
- Vul in opmerking (identieke waarde)
- Klik op opslaan
Aangezien ik al wat ervaring heb met het automatiseren met Python (Selenium) dacht ik: dan doe ik het zelf wel (en ook omdat ik het leuk vind om te doen - als het werkt geeft dat een kick, volgens mij ben ik hierin niet uniek
Echter: ik merk dat AFAS (via de browser) zich anders gedraagt dan andere websites: knoppen hebben bijvoorbeeld wel een static ID, maar als ik dat ID gebruik om het element te vinden en mee te interacten, dan crasht mijn script omdat het element niet gevonden kan worden. Ook via xPath werkt het niet. Ik ben er inmiddels van overtuigd dat ik iets 'over het hoofd zie' (lees: onvoldoende ervaring) en dat iemand me wellicht een tip kan geven om me verder te helpen. Vandaar dit bericht.
Relevante software en hardware die ik gebruik:
- PyCharm Community Edition 2022.2.1 (Build #PC-222.3739.56, built on August 16, 2022)
- Python 3.10.6
- Crhome 127.0.6533.120 (Official Build) (64-bit) (cohort: Stable)
- AFAS InSite (current)
Mijn script doet nu dit:
- Vraagt voor welke maand ik de declaraties wil invullen
- Vraagt om dagen uit te sluiten (weekend, vrije dagen)
- Genereert de datums die het moet gaan invoeren
- Opent browser
- Gaat naar portal
- Logt in
- Wacht tot ik 2FA heb gebruikt om inlog te bevestigen
- Gaat naar juiste pagina
- Hier wacht het totdat ik op de knop klik voor een nieuwe decratie (omdat de knop niet gevonden kan worden - terwijl hij toch echt duidelijk in beeld is)
- Een overlay opent waarbij het datumveld al geselecteerd is (datum is highlighted)
- Verwijdert de huidige datum door backspace te senden
- Vult de 1e gegenereerde datum in
Ik heb een aantal dagen (!) geprobeerd het op te lossen door met tab-key te werken (naar nieuw veld) en dan waardes te senden (naam van het project) en dan door enter-key te senden te bevestigen, daarna tab om naar het volgende veld te gaan, maar dit is een rommeltje en zeer onbetrouwbaar.
Ik ben nu weer terug bij 'het moet toch lukken met xPath of ID', want die kan ik gewoon vinden door de elements te inspecten (en het knaagt dat het niet werkt). Ik heb veel gezocht op de gebruikelijke plekken (StackOverflow, etc. maar omdat AFAS Nederlands is is er vrijwel niets te vinden) en uiteraard ChatGPT gevraagd om suggesies, waaruit komt dat er mogelijk sprake kan zijn van non-static ID's (wat volgens mij niet het geval is: de ID's zijn altijd hetzelfde), met wait.until commands (ervan uitgaande dat er gewacht moet worden tot het venster stabiel is), met 10 seconden tussen elke actie van het script (zeker weten dat het veld interactable is), maar alles faalt.
De overlay die toont na het klikken van de knop voor nieuwe declaraties (#9) zou de oorzaak kunnen zijn dat Selenium die overlay niet 'ziet' (het zou een iFrame kunnen zijn waar ik eerst naar moet switchen, maar in de page source komt niets terug met 'iframe' in de naam), maar waarom kan de knop voor nieuwe declaraties (#9) niet gevonden worden - er is op dat moment geen sprake van een overlay, de knop is duidelijk in beeld dus mogelijk zit het probleem ergens anders.
Maar waar? Bij het inloggen (#6) kan het de elements (velden voor inlognaam en ww) wél vinden met
code:
waarom daarna niet meer?1
| driver.find_element(By.ID |
Zoals je merkt: het is behoorlijk frustrerend en ik betwijfel of gewoon maar 20x dezelfde handeling doen elke maand mijn lot is. Ik ben nadrukkelijk niet op zoek naar iemand die een script voor mij maakt (anders was ik wel naar V&A gegaan) maar wel naar suggesties en tips, wellicht iemand die ook met AFAS werkt en heeft uitgevonden wat er speelt.
Bij voorbaat dank!
Bekabelde WIFI