Welk webelement is geselecteerd?

Bram65

Gebruiker
Lid geworden
25 feb 2023
Berichten
172
Beste experts

Excel 365, Chromebrowser, Windows 11 en selenium

Ik werk veel met het scrapen van websites en weet hoe ik in bv. een table een bepaald webelement moet uitlezen.
Maar nu is mijn vraag hoe ik kan achterhalen welk webelelement in die table is geselecteerd.

Een voorbeeldbestand heb ik natuurlijk niet, ik zou dan namelijk het antwoord weten.
Bovendien betreft het een website waar ik een account op heb en is het voor derden niet te benaderen.

De website wordt geopend middels een macro, vervolgens wordt een tabel (playlisten) getoond waarin ik een keuze kan maken.
Wanneer ik een keuze heb gemaakt en dus playlist heb aangeklikt wordt op de externe server data weggeschreven.

Nu wil ik middels VBA en Selenium achterhalen welke playlist ik heb geselecteerd.
.ActiveElement schijnt in dit geval niet te werken.
Ik heb wel een manier bedacht maar die is omslachtig en ik denk dat het beter kan.

Wat ik al had bedacht zou kunnen zijn:
Vooraf van alle playlisten het aantal items ophalen.
Nadat aan een bepaalde playlist een item werd toegevoegd, dit herhalen.
Van de playlist waar de aantallen verschillen, is het item toegevoegd en kan ik daarvan de titel achterhalen.

Kortom:
Ik heb een tabel met bv 10 webelementen waarvan ik er een moet selecteren.
Hoe achterhaal ik in VBA en Selenium welk van de 10 ik heb geselecteerd.

Dank voor jouw tijd
 
In elke browser.
Toets F12 en je kijkt onder de motorkap van de site.
Linksboven zit een icoontje met een rechthoekje en een pijlte, hiermee kan je op een element op de webpagina klikken en krijg je de plaats in de html boomstructuur te zien.
 
Laatst bewerkt:
Scrapen is en blijft een grijs gebied comform auteursrecht en databank recht.

Een zinvolle en betere te manier is om te kijken of je gebruik kan maken van API's, als deze openbaar gedocumenteerd zijn.

Zie dit als een heads up. :)
 
Dank voor jullie reacties.
@alphamax: dit advies is geen oplossing omdat ik vroeg naar het specifieke webelement waarop ik heb geklikt. Ik kan middels VBA en Selenium van websites de JSON bestanden uitlezen, van webelementen de tekst uitlezen, URL achterhalen, sliders naar bepaalde posities verplaatsen, de table waar ik het over heb wordt ook middels VBA gesorteerd maar het achterhalen op welk webelement ik heb geklikt blijft moeilijk. Is ook niets over te vinden op het web.

@Aar: Ik heb bij dat Franse bedrijf dus een betaald account, ze weten van mijn hobby en hebben toestemming gegeven hun website te scrapen en mijn persoonlijke data op hun server uit te lezen en bv. de playlisten te sorteren.

Ik weet dat ik VBA op een iets andere manier gebruik dan de meeste hier aanwezig.
Ik ga uitvogelen of ik hier een andere oplossing voor kan vinden, mogelijk toch maar zoiets als ik in mijn openingspost aangaf. Eenmaal ingelogd vraagt die methode ook niet veel ms.
 
@femke98 Scrapen is niet per definitie illegaal, maar het kan wél onrechtmatig of verboden zijn, afhankelijk van wat je scraped, hoe je het doet en waarvoor je de data gebruikt. je moet wel heel goed oppassen met auteursrecht en databankrecht.

Daarnaast kan je met het probleem zitten dat je teveel connecties met de server legt waardoor de server uit veiligheidsoverwegingen een tijdelijke IP-blokkade kan opwerpen. En als de website wijzigt, dan werkt je manier van scrapen niet, of je data wordt corrupt.

Daarom raad ik iedereen aan die aan scrapen denkt: Probeer een weg te zoeken met betrekking tot een officiële API. Die zijn gestandardiseerd en gedocumenteerd. En als er een wijziging inkomt, zijn ze vaak nog eens downwards compatible doordat er een versie aan hangt:
Code:
https://api.example.org/v1/get_playlists
, om even een voorbeeld te noemen.
 
Ik doe dit al sinds 2018, met toestemming van het bedrijf en zonder problemen.
Ik train met deze app om fit te blijven. Mijn resultaten staan op de server van dat bedrijf en die scrape ik eraf en verwerk die in Excel. De playlisten waar ik over spreek kun je vergelijken met playlisten MP3's alleen zijn het dan video's.
Wel is het idd zo dat onlangs is overgestapt op een nieuwe website en heb ik mijn workbook flink moeten aanpassen, maar dat hoort erbij en vind ik niet erg omdat deze pensionaris dan weer wat te doen heeft.

Ik ga ervan uit dat de mail die ik destijds heb ontvangen van dat bedrijf, en waarin wordt aangegeven dat zij met het scrapen geen problemen hebben en zij ervan overtuigd zijn dat hun server dat wel aankan, genoeg bewijs is zodat ik niet illegaal bezig ben. Het is hun server en mijn data dus meer betrokkenen zijn er niet.
 
Maar zie het wel als een head-ups. Stel dat hun de hele site aanpassen, of een rate-limit instellen.
Dan ga je nat. Stel dat ze een paar velden omdraaien met artiest en uitgever. Dan krijg je opeens de naam van de uitgever in jouw artiesten-tabel/veld te staan. En dus wordt je data corrupt.

Waarom zou je ze niet vragen voor een API?

Hier kan je (als voorbeeld gezien) echt wat mee:
JSON:
{
  "status": "success",
  "count": 2,
  "tracks": [
    {
      "id": "track_001",
      "title": "Midnight Echoes",
      "artists": [
        {
          "id": "artist_101",
          "name": "Luna Waves"
        }
      ],
      "publishers": [
        {
          "id": "publisher_201",
          "name": "Starlight Records"
        }
      ],
      "album": {
        "id": "album_301",
        "title": "Nightfall Stories",
        "release_date": "2024-09-15"
      },
      "duration_seconds": 214,
      "cover_image_url": "https://cdn.example.com/images/albums/nightfall-stories.jpg",
      "stream_url": "https://music.example.com/track/midnight-echoes",
      "genres": ["Electronic", "Chill"],
      "explicit": false
    },
    {
      "id": "track_002",
      "title": "Running on Fire",
      "artists": [
        {
          "id": "artist_102",
          "name": "The Static Lines"
        },
        {
          "id": "artist_103",
          "name": "Nova Ray"
        }
      ],
      "publishers": [
        {
          "id": "publisher_202",
          "name": "Firebeat Publishing"
        },
        {
          "id": "publisher_203",
          "name": "NovaSound Ltd."
        }
      ],
      "album": {
        "id": "album_302",
        "title": "Velocity",
        "release_date": "2023-05-02"
      },
      "duration_seconds": 189,
      "cover_image_url": "https://cdn.example.com/images/albums/velocity.jpg",
      "stream_url": "https://music.example.com/track/running-on-fire",
      "genres": ["Rock", "Alternative"],
      "explicit": true
    }
  ]
}

Als het niet leesbaar is, gooi het dan in deze JSON-viewer:
https://jsonviewer.stack.hu/ :)
 
Laatst bewerkt:
Allemaal wel mooi maar de discussie gaat inmiddels een heel andere kant op. De oorspronkelijke vraag was of je dmv een lus kunt ondervangen op welk webelement er geklikt is, waarna je dat webelement kunt scrapen. Ik weet dan in welke playlist de video werd toegevoegd. Ik kan hier op het web niets over vinden, het gaat allemaal over het benaderen van een webelelement wat bekend is. Ik heb getest met .activeElement.Text maar dat geeft niet het juiste resultaat.
 
Opsich is de stap naar API's i.p.v. scrapen niet bijzonder slecht.
 
Terug
Bovenaan Onderaan