Selecteer webelement en verplaats deze

Bram65

Gebruiker
Lid geworden
25 feb 2023
Berichten
48
Beste,
Ik kan geen voorbeeldbestand toevoegen omdat het een website betreft waarop ik een abbo heb en dus gevoelige informatie bevat. Het betreft een abbo op Kinomap.com, virtueel trainen middels video's icm hometrainer.

Ik heb in mijn account, per land een playlist gemaakt waarin ik video's opsla.
Bijvoorbeeld een video welke is opgenomen in Frankrijk, sla ik op in de playlist Frankrijk.
Daarin staan bv 45 video's. Kinomap biedt niet de optie deze video's te sorteren en daarom heb ik in Excel, met gebruik te maken van Chrome en Selenium, een macro gemaakt die deze playlisten inclusief de video's die erin staan inleest en de data in een Excel sheet, GESORTERRD OP HOOGTEMETERS neerzet. Ik kan dan in de Kinomap playlist de video's sorteren door gebruik te maken van het Excel sheet.
Maar wanneer ik een bepaalde video 2x heb gereden, mag die uit de Kinomap playlist worden verwijderd.

Nu heb ik inmiddels al wel zover dat de te verwijderen video's door de macro uit de Kinomap playlist verwijderd worden.
Ook heb ik het zover dat de video's welke in de Kinomap playlist gesorteerd moeten worden, achterhaald heb. Ik weet dus welk webelement het betreft. Alleen het sorteren/verplaatsen lukt me niet.
Handmatig moet ik dus zo'n video met linkermuisklik aanklikken en vasthouden en naar beneden slepen naar de positie die door het Excel sheet wordt aangegeven.
En dat zou ik ook graag door die macro willen laten uitvoeren maar ik weet niet hoe.
Hopelijk wil en kan iemand op weg helpen.

Bedankt voor uw tijd, gr Bram
 
Uiteindelijk heb ik na veel lezen gevonden hoe een element te verplaatsen. Voor de liefhebbers is hier de code

Code:
Dim elePak As WebElement, elePlak As WebElement
Dim bot As New Selenium.ChromeDriver
Dim X as Integer, X1 as Integer

With bot
    '.AddArgument ("headless")                                                                                             
    'deze verbergt het Chrome venster als die niet geremd is
    
    .AddArgument "window-size=600,800"
    .Get "jouw link"
    
    X= 2                                                               
    'stel dat het te verplaatsen element op positie 2 in de tabel zit   
    
    X1 = 5                                                                 
    'en dat dit element 3 plaatsen naar beneden moet
    
    Set elePak = .FindElementByXPath("/html/body/div[5]/div[3]/div/div/ul/li[" & X & "]/div/div[2]/div/div[1]/span")   
   'zet het te verplaatsen element in elePak   
  
    Set elePlak = .FindElementByXPath("/html/body/div[5]/div[3]/div/div/ul/li[" & X1  & "]/div/div[2]/div/div[1]/span")
    'zet element waar die naar toe meot in elePlak
    
    .Actions.DragAndDrop(elePak, elePlak).ClickAndHold.Perform                   
    'verplaats het element       
    
    Sleep (250)
    .Actions.Release(elePak).Perform                                           
    'los de muisklik
    
    Sleep (250)
    .FindElementByXPath("/html/body/div[5]/div[3]/div/button").Click                               
    'klik op knop 'Confirm new order'
    
    Sleep (500)
    .quit                                                               
    'sluit Chrome
end with
 
De code hierboven werkt zolang het te verplaatsen element binnen het scherm wordt verplaatst. Stel dat er op de pagina 12 elementen uit de table te zien zijn en je wilt element 2 verplaatsen naar plaats 14, dan lukt dit niet omdat die positie buiten het scherm valt. Lijkt dat mensen die net als ik deze optie willen gebruiken hier ook tegenaan lopen. Schijnt dus niet mogelijk te zijn een element te verplaatsen naar een positie buiten het scherm, ook niet als je naar die positie scollt. Mogelijk dat iemand hier toch een oplossing voor heeft. Dan zou ik dat graag horen. gr Bram
 
Ik ken de situatie uiteraard niet, en deze site ook niet dus ik heb geen idee hoe e.e.a. er op het scherm uitziet. Maar op basis van dit:
De code hierboven werkt zolang het te verplaatsen element binnen het scherm wordt verplaatst. Stel dat er op de pagina 12 elementen uit de table te zien zijn en je wilt element 2 verplaatsen naar plaats 14
Lijkt het mij niet zo heel lastig om op te lossen. Om te beginnen: het is dus belangrijk dat je precies weet hoeveel ‘sleepruimte’ je hebt. Regel 2 kan je dus naar regel 12 slepen; dat zijn 10 regels. Maar regel 9 kan je maar drie regels verplaatsen.
Als je vanaf regel 2 naar 14 moet, dan zijn dat dus 12 regels. Ik zou dan zeggen: 2*6=12; voer de verplaatsing dus uit in twee blokken van 6 regels. Maar alles hangt er vanaf waar je actieve regel staat na het verplaatsen van het eerste blok. Sta je in regel 11, dan kan je vanaf dat punt maar één regel tegelijk verplaatsen. Staat de regel bovenaan in het scherm, dan kan je weer 11 regels doen.

Kortom: als je de regel weer na het verplaatsen weer bovenaan hebt staan, dan heb je minder loops nodig dan wanneer de regel onderaan staat. Maar dit zou dus een oplossing kunnen zijn.
 
Hallo OctaFish, was het maar zo simpel, helaas werkt het ook zo niet. Ik heb zelfs het te verplaatsen element dmv een lus telkens 1 positie verschoven. Dat gaat goed totdat het element het einde van het zichtbare scherm heeft bereikt, zelfs wanneer ik net daarvoor het scherm naar beneden scroll. Ik heb al dagen gezocht en veel gelezen en het schijnt dat het niemand lukt. Soms wordt een soort van oplossing aangedragen welke toch niet blijkt te werken, waarschijnlijk ook niet getest alvorens het te posten. Wanneer je Googeld op "draganddrop webelement of screen" zul je zien dat dit toch een dingetje schijnt te zijn. Ik heb het probleem voorbij zien komen in C+, Java en zoals ik in VBA icm SeleniumBasic. Overigens werkt van beneden naar boven verplaatsen ook niet zodra het te verplaatsen element, of de posite waar deze moet komen, buiten het zichtbare scherm valt. Wanneer beide posities in 1 scherm zichtbaar zijn, werkt het wel maar alleen dan! Toch lijkt hij mij onwaarschijnlijk dat dit niet zou kunnen werken. gr Bram
 
Terug
Bovenaan Onderaan