Selenium

XPath en Selenium gebruiken om een ​​element in HTML-pagina te vinden Find

XPath en Selenium gebruiken om een ​​element in HTML-pagina te vinden Find
XPath, ook bekend als XML Path Language, is een taal voor het selecteren van elementen uit een XML-document. Aangezien HTML en XML dezelfde documentstructuur volgen, kan XPath ook worden gebruikt om elementen van een webpagina te selecteren.

Het lokaliseren en selecteren van elementen van de webpagina is de sleutel tot webscraping met Selenium. Voor het lokaliseren en selecteren van elementen van de webpagina kunt u XPath-selectors in Selenium gebruiken.

In dit artikel laat ik je zien hoe je elementen van webpagina's kunt lokaliseren en selecteren met behulp van XPath-selectors in Selenium met de Selenium python-bibliotheek. Dus laten we beginnen.

Vereisten:

Om de opdrachten en voorbeelden van dit artikel uit te proberen, moet je:,

  1. Een Linux-distributie (bij voorkeur Ubuntu) geïnstalleerd op uw computer.
  2. Python 3 geïnstalleerd op uw computer.
  3. PIP 3 geïnstalleerd op uw computer.
  4. Python virtueel pakket geïnstalleerd op uw computer.
  5. Mozilla Firefox- of Google Chrome-webbrowsers geïnstalleerd op uw computer.
  6. Moet weten hoe de Firefox Gecko Driver of Chrome Web Driver te installeren.

Lees mijn artikel om aan de vereisten 4, 5 en 6 te voldoen Inleiding tot selenium in Python 3. Je kunt veel artikelen over de andere onderwerpen vinden op LinuxHint.com. Bekijk ze zeker als je hulp nodig hebt.

Een projectmap opzetten:

Maak een nieuwe projectdirectory om alles overzichtelijk te houden selenium-xpath/ als volgt:

$ mkdir -pv selenium-xpath/drivers

Navigeer naar de selenium-xpath/ projectmap als volgt:

$ cd selenium-xpath/

Maak als volgt een virtuele Python-omgeving in de projectdirectory:

$ virtuele omgeving .venv

Activeer de virtuele omgeving als volgt:

$ bron .venv/bin/activeren

Installeer de Selenium Python-bibliotheek als volgt met PIP3:

$ pip3 installeer selenium

Download en installeer alle vereiste webstuurprogramma's in de chauffeurs/ map van het project. Ik heb het proces van het downloaden en installeren van webstuurprogramma's uitgelegd in mijn artikel Inleiding tot selenium in Python 3.

Download de XPath-kiezer met Chrome Developer Tool:

In dit gedeelte laat ik u zien hoe u de XPath-selector kunt vinden van het webpagina-element dat u wilt selecteren met Selenium met behulp van de ingebouwde Developer Tool van de Google Chrome-webbrowser.

Om de XPath-selector te krijgen met behulp van de Google Chrome-webbrowser, opent u Google Chrome en gaat u naar de website waarvan u gegevens wilt extraheren. Druk vervolgens met de rechtermuisknop (RMB) op een leeg gedeelte van de pagina en klik op Inspecteren om de te openen Chrome-ontwikkelaarstool.

U kunt ook op drukken + Verschuiving + ik om de te openen Chrome-ontwikkelaarstool.

Chrome-ontwikkelaarstool moet worden geopend.

Om de HTML-weergave van uw gewenste webpagina-element te vinden, klikt u op de Inspecteren(

) pictogram, zoals aangegeven in de onderstaande schermafbeelding.

Beweeg vervolgens over het gewenste webpagina-element en druk op de linkermuisknop (LMB) om het te selecteren.

De HTML-weergave van het door u geselecteerde webelement wordt gemarkeerd in de elementen tabblad van de Chrome-ontwikkelaarstool, zoals je kunt zien in de onderstaande schermafbeelding.

Om de XPath-selector van uw gewenste element te krijgen, selecteert u het element uit de elementen tabblad van Chrome-ontwikkelaarstool en klik er met de rechtermuisknop (RMB) op. Selecteer vervolgens Kopiëren > Kopieer XPath, zoals aangegeven in de onderstaande schermafbeelding.

Ik heb de XPath-selector in een teksteditor geplakt. De XPath-selector ziet eruit zoals in de onderstaande schermafbeelding:.

Download de XPath-kiezer met Firefox Developer Tool:

In dit gedeelte laat ik u zien hoe u de XPath-selector kunt vinden van het webpagina-element dat u wilt selecteren met Selenium met behulp van de ingebouwde Developer Tool van de Mozilla Firefox-webbrowser.

Om de XPath-selector te krijgen met de Firefox-webbrowser, opent u Firefox en gaat u naar de website waarvan u gegevens wilt extraheren. Druk vervolgens met de rechtermuisknop (RMB) op een leeg gedeelte van de pagina en klik op Inspecteer element (Q) om de te openen Firefox-ontwikkelaarstool.

Firefox-ontwikkelaarstool moet worden geopend.

Om de HTML-weergave van uw gewenste webpagina-element te vinden, klikt u op de Inspecteren(

) pictogram, zoals aangegeven in de onderstaande schermafbeelding.

Beweeg vervolgens over het gewenste webpagina-element en druk op de linkermuisknop (LMB) om het te selecteren.

De HTML-weergave van het door u geselecteerde webelement wordt gemarkeerd in de Inspecteur tabblad van Firefox-ontwikkelaarstool, zoals je kunt zien in de onderstaande schermafbeelding.

Om de XPath-selector van uw gewenste element te krijgen, selecteert u het element uit de Inspecteur tabblad van Firefox-ontwikkelaarstool en klik er met de rechtermuisknop (RMB) op. Selecteer vervolgens Kopiëren > XPath zoals aangegeven in de onderstaande schermafbeelding.

De XPath-selector van uw gewenste element zou er ongeveer zo uit moeten zien:.

Gegevens uit webpagina's extraheren met XPath Selector:

In deze sectie laat ik je zien hoe je webpagina-elementen selecteert en gegevens eruit haalt met behulp van XPath-selectors met de Selenium Python-bibliotheek.

Maak eerst een nieuw Python-script ex01.py en typ de volgende regels codes in:.

van selenium import webdriver
van selenium.webstuurprogramma.gemeenschappelijk.sleutels importeren Sleutels
van selenium.webstuurprogramma.gemeenschappelijk.door import Door
opties = webstuurprogramma.Chrome-opties()
opties.zonder hoofd = waar
browser = webstuurprogramma.Chrome(executable_path="./drivers/chromedriver",
opties=opties)
browser.get("https://www.unixtimestamp.com/")
tijdstempel = browser.find_element_by_xpath('/html/body/div[1]/div[1]
/div[2]/div[1]/div/div/h3[2]')
print('Huidige tijdstempel: %s' % (tijdstempel.tekst.split(")[0]))
browser.dichtbij()

Als u klaar bent, slaat u de ex01.py Python-script.

Regel 1-3 importeert alle benodigde Selenium-componenten.

Regel 5 maakt een Chrome-opties-object en regel 6 schakelt de headless-modus in voor de Chrome-webbrowser.

Lijn 8 maakt een Chrome browser object met behulp van de chromedriver binair van de chauffeurs/ map van het project.

Regel 10 vertelt de browser om de website unixtimestamp te laden.com.

Regel 12 vindt het element met de tijdstempelgegevens van de pagina met behulp van de XPath-selector en slaat het op in de tijdstempel variabele.

Regel 13 analyseert de tijdstempelgegevens van het element en drukt deze af op de console.

Ik heb de XPath-selector van de gemarkeerde . gekopieerd h2 element van unixtimestamp.com met behulp van de Chrome Developer Tool.

Regel 14 sluit de browser.

Voer het Python-script uit ex01.py als volgt:

$ python3 ex01.py

Zoals u kunt zien, worden de tijdstempelgegevens op het scherm afgedrukt.

Hier heb ik de browser.find_element_by_xpath(selector) methode. De enige parameter van deze methode is de selector, wat de XPath-selector van het element is.

In plaats van browser.find_element_by_xpath() methode, kunt u ook browser.find_element(Door, selector) methode. Deze methode heeft twee parameters nodig:. De eerste parameter Door zal zijn Door.XPATH aangezien we de XPath-selector zullen gebruiken, en de tweede parameter selector zal de XPath-selector zelf zijn. Het resultaat zal hetzelfde zijn.

Om te zien hoe: browser.find_element() methode werkt voor XPath selector, maak een nieuw Python-script ex02.py, kopieer en plak alle regels van ex01.py naar ex02.py en veranderen lijn 12 zoals aangegeven in de onderstaande schermafbeelding.

Zoals je kunt zien, is het Python-script ex02.py geeft hetzelfde resultaat als ex01.py.

$ python3 ex02.py

De browser.find_element_by_xpath() en browser.find_element() methoden worden gebruikt om een ​​enkel element van webpagina's te vinden en te selecteren. Als je meerdere elementen wilt vinden en selecteren met XPath-selectors, dan moet je browser.find_elements_by_xpath() of browser.find_elements() methoden.

De browser.find_elements_by_xpath() methode heeft hetzelfde argument als de browser.find_element_by_xpath() methode.

De browser.find_elements() methode heeft dezelfde argumenten als de browser.find_element() methode.

Laten we een voorbeeld bekijken van het extraheren van een lijst met namen met behulp van XPath selector from willekeurige-naam-generator.info met de Selenium Python-bibliotheek.

De ongeordende lijst (oud tag) heeft een 10 li tags in elk met een willekeurige naam. De XPath om alle . te selecteren li tags in de oud tag is in dit geval //*[@id=”hoofd”]/div[3]/div[2]/ol//li

Laten we een voorbeeld bekijken van het selecteren van meerdere elementen van de webpagina met behulp van XPath-selectors.

Een nieuw Python-script maken ex03.py en typ de volgende regels codes erin:.

van selenium import webdriver
van selenium.webstuurprogramma.gemeenschappelijk.sleutels importeren Sleutels
van selenium.webstuurprogramma.gemeenschappelijk.door import Door
opties = webstuurprogramma.Chrome-opties()
opties.zonder hoofd = waar
browser = webstuurprogramma.Chrome(executable_path="./drivers/chromedriver",
opties=opties)
browser.get("http://willekeurige-naam-generator.info/")
namen = browser.find_elements_by_xpath('
//*[@id="main"]/div[3]/div[2]/ol//li')
voor naam in namen:
print naam.tekst)
browser.dichtbij()

Als u klaar bent, slaat u de ex03.py Python-script.

Regel 1-8 is hetzelfde als in ex01.py Python-script. Dus ik ga ze hier niet nog een keer uitleggen.

Regel 10 vertelt de browser om de website random-name-generator te laden.info.

Regel 12 selecteert de namenlijst met de browser.find_elements_by_xpath() methode. Deze methode gebruikt de XPath-selector select //*[@id=”hoofd”]/div[3]/div[2]/ol//li om de namenlijst te vinden. Vervolgens wordt de namenlijst opgeslagen in de namen variabele.

In regel 13 en 14, a voor lus wordt gebruikt om door de te itereren namen lijst en print de namen op de console.

Regel 16 sluit de browser.

Voer het Python-script uit ex03.py als volgt:

$ python3 ex03.py

Zoals u kunt zien, worden de namen van de webpagina gehaald en op de console afgedrukt.

In plaats van de browser.find_elements_by_xpath() methode, kunt u ook de browser.find_elements() methode als voorheen. Het eerste argument van deze methode is Door.XPATH, en het tweede argument is de XPath-selector.

om mee te experimenteren browser.find_elements() methode, maak een nieuw Python-script ex04.py, kopieer alle codes van ex03.py naar ex04.py, en verander regel 12 zoals aangegeven in de onderstaande schermafbeelding.

U zou hetzelfde resultaat moeten krijgen als voorheen.

$ python3 ex04.py

Basisprincipes van XPath Selector:

De Developer Tool van Firefox of Google Chrome webbrowser genereert automatisch XPath selector. Maar deze XPath-selectors zijn soms niet voldoende voor uw project. In dat geval moet u weten wat een bepaalde XPath-selector doet om uw XPath-selector te bouwen. In dit gedeelte laat ik je de basis zien van XPath-selectors. Dan zou je in staat moeten zijn om je eigen XPath-selector te bouwen.

Een nieuwe map maken www/ in uw projectdirectory als volgt:

$ mkdir -v www

Een nieuw bestand maken web01.html in de www/ directory en typ de volgende regels in dat bestand:.






Basis HTML-document


Hallo Wereld



Als u klaar bent, slaat u de web01.html het dossier.

Voer een eenvoudige HTTP-server uit op poort 8080 met behulp van de volgende opdracht:

$ python3 -m http.server --directory www/ 8080

De HTTP-server zou moeten starten.

U zou toegang moeten hebben tot de web01.html bestand met de URL http://localhost:8080/web01.html, zoals je kunt zien in de onderstaande schermafbeelding.

Terwijl de Firefox- of Chrome Developer Tool is geopend, drukt u op + F om het zoekvak te openen. U kunt hier uw XPath-kiezer typen en heel gemakkelijk zien wat het selecteert. Ik ga deze tool in deze sectie gebruiken.

Een XPath-selector begint met a schuine streep naar voren (/) meestal. Het is als een Linux-directory tree. De / is de root van alle elementen op de webpagina.

Het eerste element is de html. Dus de XPath-selector /html selecteert de hele html label.

Binnen in de html tag, we hebben een lichaam label. De lichaam tag kan worden geselecteerd met de XPath-selector /html/body

De h1 koptekst bevindt zich in de lichaam label. De h1 header kan worden geselecteerd met de XPath-selector /html/body/h1

Dit type XPath-selector wordt een absolute padselector genoemd. In de absolute padselector moet u de webpagina doorlopen vanaf de hoofdmap (/) van de pagina. Het nadeel van een absolute padselector is dat zelfs een kleine wijziging in de webpaginastructuur uw XPath-selector ongeldig kan maken. De oplossing voor dit probleem is een relatieve of gedeeltelijke XPath-selector.

Maak een nieuw bestand om te zien hoe relatief pad of gedeeltelijk pad werkt web02.html in de www/ directory en typ de volgende regels codes erin:.






Basis HTML-document


Hallo Wereld



dit is een bericht




Hallo Wereld


Als u klaar bent, slaat u de web02.html bestand en laad het in uw webbrowser.

Zoals u kunt zien, is de XPath-selector //div/p selecteert de p tag in de div label. Dit is een voorbeeld van een relatieve XPath-selector.

Relatieve XPath-selector begint met //. Vervolgens specificeert u de structuur van het element dat u wilt selecteren. In dit geval, div/p.

Zo, //div/p betekent selecteer de p element binnen a div element, maakt niet uit wat ervoor komt.

Je kunt ook elementen selecteren op verschillende attributen zoals ID kaart, klasse, type, enz. XPath-selector gebruiken. Laten we eens kijken hoe dat te doen.

Een nieuw bestand maken web03.html in de www/ directory en typ de volgende regels codes erin:.






Basis HTML-document


Hallo Wereld



dit is een bericht


dit is een ander bericht


rubriek 2


Lorem ipsum dolor sit amet consectetur, adipisicing elit. Quibusdam
eligendi doloribus sapiente, molestias quos quae non nam incidunt quis delectus
facilis magni officiis alias neque atque fuga? Unde, aut natus?




dit is een voettekst


Als u klaar bent, slaat u de web03.html bestand en laad het in uw webbrowser.

Stel dat u alle you wilt selecteren div elementen die de klasse naam container1. Om dat te doen, kunt u de XPath-selector gebruiken //div[@class='container1']

Zoals je kunt zien, heb ik 2 elementen die overeenkomen met de XPath-selector //div[@class='container1']

Om de eerste te selecteren div element met de klasse naam container1, toevoegen [1] aan het einde van de XPath-selectie, zoals weergegeven in de onderstaande schermafbeelding.

Op dezelfde manier kunt u de tweede div element met de klasse naam container1 met behulp van de XPath-selector //div[@class='container1'][2]

U kunt elementen selecteren door: ID kaart ook.

Om bijvoorbeeld het element te selecteren dat de . heeft ID kaart van footer-bericht, u kunt de XPath-selector gebruiken //*[@id='footer-msg']

Hier de * voordat [@id='footer-bericht'] wordt gebruikt om elk element te selecteren, ongeacht hun tag.

Dat is de basis van de XPath-selector. Nu zou u uw eigen XPath-selector voor uw Selenium-projecten moeten kunnen maken.

Conclusie:

In dit artikel heb ik je laten zien hoe je elementen van webpagina's kunt vinden en selecteren met behulp van de XPath-selector met de Selenium Python-bibliotheek. Ik heb ook de meest voorkomende XPath-selectors besproken. Na het lezen van dit artikel zou je er vrij zeker van moeten zijn om elementen van webpagina's te selecteren met behulp van de XPath-selector met de Selenium Python-bibliotheek.

Installeer de nieuwste Dolphin Emulator voor Gamecube & Wii op Linux
Met de Dolphin Emulator kun je de door jou gekozen Gamecube- en Wii-spellen spelen op Linux Personal Computers (pc). Omdat het een vrij beschikbare e...
Hoe de GameConqueror Cheat Engine in Linux te gebruiken
Het artikel bevat een handleiding over het gebruik van de GameConqueror cheat-engine in Linux. Veel gebruikers die games op Windows spelen, gebruiken ...
Beste gameconsole-emulators voor Linux
Dit artikel bevat een lijst van populaire emulatiesoftware voor gameconsoles die beschikbaar is voor Linux. Emulatie is een softwarecompatibiliteitsla...