02. april 2023 - 21:56Der er
6 kommentarer og 1 løsning
Input via Selenium/Chrome virker ikke
Hej
Jeg prøver at indsætte produktionsenhedsnummer på Virk.dk. Det er en side der kræver rettigheder, så jeg får ikke noget ud af at linke til den her.
Et af felterne driller og jeg synes jeg har prøvet alt. (Del af) kode i Excel: .FindElementById("ContentPage_PNummer_flexselect").SendKeys "1003259212"
Elementet består af 2 dele: 1) option med en masse værdier (herunder kun gengivet 3 værdier) og 2) selve feltet 1) <select name="ctl00$ContentPage$PNummer" id="ContentPage_PNummer" class="max flexselect" aria-required="true" style="display: none;"> <option selected="selected" value=""></option> <option value="1003191078">1003191078 - BREDALSPARKENS FRITIDSCENTER - Sognegårds Alle 70, Hvidovre</option> <option value="1003259212">1003259212 - Ungecenter Porten - Bødkerporten 3, Hvidovre</option> <option value="1003267238">1003267238 - Hjemmeplejedistrikt VEST - Bødkerporten 1, Hvidovre</option>
<input type="text" autocomplete="off" id="ContentPage_PNummer_flexselect" placeholder="Søg på fx. P-nr., virksomhedsnavn eller adresse" class="max flexselect" style="visibility: visible;">
Som jeg ser det, er det et dropdown felt, men som godt kan udfyldes med tekstværdi. Når jeg prøver at få p-nummeret sendt fra Excel, udfylder teksten sig bagerst i feltet fordi feltet begynder at forudfylde sig selv under indtastning. Hvis jeg ville udfylde feltet manuelt, kan det ikke udfyldes ved at skrive i det da samme problem opstår, men feltet kan godt udfyldes hvis man f.eks. copy + paster hele teksten på én gang mens man står i feltet. Det synes jeg ikke jeg kan gengive med automatiseringen.
Feltet virker noget dårligt lavet efter min mening, da jeg ellers ikke har haft lignende problemer andre steder.
Et muligt løsningsforslag er at bruge "Select" i stedet for "SendKeys". Med "Select" kan du vælge en af de tilgængelige muligheder i dropdown-feltet ved at bruge værdien af "option" elementet.
Dim selectElem As Object Set selectElem = ie.document.getElementById("ContentPage_PNummer")
Dim optionElem As Object For Each optionElem In selectElem.getElementsByTagName("option") If optionElem.Value = "1003259212" Then optionElem.Selected = True Exit For End If Next optionElem
// Få fat i select-elementet var selectElem = document.getElementById("mySelect");
// Tjek om selectElem er defineret og ikke er null eller undefined if (selectElem && selectElem.getElementsByTagName) {
// Loop igennem alle option-elementerne var optionElems = selectElem.getElementsByTagName("option"); for (var i = 0; i < optionElems.length; i++) { var optionElem = optionElems[i];
Har fået chtgpt til at hjælpe mig og denne kode indsætter nu værdien i feltet. Men lige så snart siden opdaterer sig selv, forsvinder indtastningen. Dette uanset hvilken af de 2 muligheder jeg benytter.
Koden: Dim dropdown As WebElement Set dropdown = obj.FindElementById("ContentPage_PNummer_flexselect") 'obj.ExecuteScript "arguments[0].value = '1003267238';", dropdown obj.ExecuteScript "arguments[0].value = '1003267238 - Hjemmeplejedistrikt VEST - Bødkerporten 1, Hvidovre';", dropdown
Elementet: <option value="1003267238">1003267238 - Hjemmeplejedistrikt VEST - Bødkerporten 1, Hvidovre</option>
Jeg kan se at værdien jo er der, så hvorfor, den ikke vil kendes ved det er jeg helt blank overfor.
Lige for god ordens skyld, så består dropdown listen af disse 2 elementer:
<select name="ctl00$ContentPage$PNummer" id="ContentPage_PNummer" class="max flexselect" aria-required="true" style="display: none;"> <option selected="selected" value=""></option>... og en hel masse options nedenunder
<input type="text" autocomplete="off" id="ContentPage_PNummer_flexselect" placeholder="Søg på fx. P-nr., virksomhedsnavn eller adresse" class="max flexselect" style="visibility: visible;">
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.