Selen

Brug af XPath og Selen til at finde et element på HTML-siden

Brug af XPath og Selen til at finde et element på HTML-siden
XPath, også kendt som XML Path Language, er et sprog til valg af elementer fra et XML-dokument. Da HTML og XML følger den samme dokumentstruktur, kan XPath også bruges til at vælge elementer fra en webside.

At finde og vælge elementer fra websiden er nøglen til webskrabning med Selen. For at finde og vælge elementer fra websiden kan du bruge XPath-vælgere i Selenium.

I denne artikel vil jeg vise dig, hvordan du finder og vælger elementer fra websider ved hjælp af XPath-vælgere i Selenium med Selenium python-biblioteket. Så lad os komme i gang.

Forudsætninger:

For at prøve kommandoer og eksempler på denne artikel skal du have,

  1. En Linux-distribution (helst Ubuntu) installeret på din computer.
  2. Python 3 installeret på din computer.
  3. PIP 3 installeret på din computer.
  4. Python virtualenv pakke installeret på din computer.
  5. Mozilla Firefox eller Google Chrome webbrowsere installeret på din computer.
  6. Skal vide, hvordan du installerer Firefox Gecko Driver eller Chrome Web Driver.

Læs min artikel for at opfylde kravene 4, 5 og 6 Introduktion til selen i Python 3. Du kan finde mange artikler om de andre emner på LinuxHint.com. Sørg for at tjekke dem ud, hvis du har brug for hjælp.

Opsætning af et projektkatalog:

For at holde alt organiseret skal du oprette et nyt projektkatalog selen-xpath / som følger:

$ mkdir -pv selen-xpath / drivere

Naviger til selen-xpath / projektmappe som følger:

$ cd selen-xpath /

Opret et virtuelt Python-miljø i projektmappen som følger:

$ virtualenv .venv

Aktivér det virtuelle miljø som følger:

$ kilde .venv / bin / aktiver

Installer Selenium Python-biblioteket ved hjælp af PIP3 som følger:

$ pip3 installer selen

Download og installer alle de krævede webdrivere i drivere / projektmappe. Jeg har forklaret processen med at downloade og installere webdrivere i min artikel Introduktion til selen i Python 3.

Hent XPath Selector ved hjælp af Chrome Developer Tool:

I dette afsnit vil jeg vise dig, hvordan du finder XPath-vælgeren til det websideelement, du vil vælge med Selen, ved hjælp af det indbyggede udviklerværktøj i Google Chrome-webbrowseren.

For at få XPath-vælgeren ved hjælp af Google Chrome-webbrowseren skal du åbne Google Chrome og besøge det websted, hvorfra du vil udtrække data. Tryk derefter på højre museknap (RMB) på et tomt område på siden, og klik på Inspicere at åbne Chrome Developer Tool.

Du kan også trykke på + Flytte + jeg at åbne Chrome Developer Tool.

Chrome Developer Tool skal åbnes.

For at finde HTML-repræsentationen af ​​det ønskede websideelement skal du klikke på Inspicere(

) ikon, som markeret i skærmbilledet nedenfor.

Hold derefter markøren over det ønskede websideelement, og tryk på venstre museknap (LMB) for at vælge det.

HTML-repræsentationen af ​​det valgte webelement fremhæves i Elementer fanen i Chrome Developer Tool, som du kan se på skærmbilledet nedenfor.

For at få XPath-vælgeren til dit ønskede element skal du vælge elementet fra Elementer fanen Chrome Developer Tool og højreklik (RMB) på den. Vælg derefter Kopi > Kopier XPath, som markeret i skærmbilledet nedenfor.

Jeg har indsat XPath-vælgeren i en teksteditor. XPath-vælgeren ser ud som vist på skærmbilledet nedenfor.

Hent XPath Selector ved hjælp af Firefox Developer Tool:

I dette afsnit vil jeg vise dig, hvordan du finder XPath-vælgeren til det websideelement, du vil vælge med Selen, ved hjælp af det indbyggede udviklerværktøj i Mozilla Firefox-webbrowseren.

For at få XPath-vælgeren ved hjælp af Firefox-webbrowseren skal du åbne Firefox og besøge det websted, hvorfra du vil udtrække data. Tryk derefter på højre museknap (RMB) på et tomt område på siden, og klik på Inspicer element (Q) at åbne Firefox Developer Tool.

Firefox Developer Tool skal åbnes.

For at finde HTML-repræsentationen af ​​det ønskede websideelement skal du klikke på Inspicere(

) ikon, som markeret i skærmbilledet nedenfor.

Hold derefter markøren over det ønskede websideelement, og tryk på venstre museknap (LMB) for at vælge det.

HTML-repræsentationen af ​​det valgte webelement fremhæves i Inspektør fanen Firefox Developer Tool, som du kan se på skærmbilledet nedenfor.

For at hente XPath-vælgeren til dit ønskede element skal du vælge elementet fra Inspektør fanen Firefox Developer Tool og højreklik (RMB) på den. Vælg derefter Kopi > XPath som markeret i skærmbilledet nedenfor.

XPath-vælgeren til dit ønskede element skal se sådan ud.

Uddrag af data fra websider ved hjælp af XPath Selector:

I dette afsnit vil jeg vise dig, hvordan du vælger websideelementer og udtrækker data fra dem ved hjælp af XPath-vælgere med Selenium Python-biblioteket.

Opret først et nyt Python-script ex01.py og indtast følgende linjer med koder.

fra selen import webdriver
fra selen.webdriver.almindelige.nøgler importerer nøgler
fra selen.webdriver.almindelige.ved import af
optioner = webdriver.Chrome-valg ()
muligheder.headless = Sandt
browser = webdriver.Chrome (eksekverbar_sti = "./ drivere / chromedriver ",
optioner = optioner)
browser.get ("https: // www.unixtimestamp.com / ")
tidsstempel = browser.find_element_by_xpath ('/ html / body / div [1] / div [1]
/ div [2] / div [1] / div / div / h3 [2] ')
print ('Aktuel tidsstempel:% s'% (tidsstempel.tekst.split (") [0]))
browser.tæt()

Når du er færdig, skal du gemme ex01.py Python-script.

Linje 1-3 importerer alle de nødvendige Selen-komponenter.

Linje 5 opretter et Chrome Options-objekt, og linje 6 muliggør hovedløs tilstand til Chrome-webbrowseren.

Linje 8 opretter en Chrome browser objekt ved hjælp af chromedriver binær fra drivere / projektmappe.

Linje 10 beder browseren om at indlæse hjemmesiden unixtimestamp.com.

Linje 12 finder det element, der har tidsstempledataene fra siden ved hjælp af XPath-vælgeren og gemmer det i tidsstempel variabel.

Linje 13 analyserer tidsstempledataene fra elementet og udskriver dem på konsollen.

Jeg har kopieret XPath-vælgeren til det markerede h2 element fra unixtimestamp.com ved hjælp af Chrome Developer Tool.

Linje 14 lukker browseren.

Kør Python-scriptet ex01.py som følger:

$ python3 ex01.py

Som du kan se, udskrives tidsstempledataene på skærmen.

Her har jeg brugt browser.find_element_by_xpath (vælger) metode. Den eneste parameter for denne metode er vælger, hvilket er elementets XPath-vælger.

I stedet for browser.find_element_by_xpath () metode, kan du også bruge browser.find_element (af, vælger) metode. Denne metode har brug for to parametre. Den første parameter Ved vil være Ved.XPATH da vi bruger XPath-vælgeren og den anden parameter vælger vil være selve XPath-vælgeren. Resultatet bliver det samme.

For at se hvordan browser.find_element () metode fungerer for XPath-vælger, skal du oprette et nyt Python-script ex02.py, kopier og indsæt alle linjer fra ex01.py til ex02.py og ændre linje 12 som markeret i skærmbilledet nedenfor.

Som du kan se, Python-scriptet ex02.py giver det samme resultat som ex01.py.

$ python3 ex02.py

Det browser.find_element_by_xpath () og browser.find_element () metoder bruges til at finde og vælge et enkelt element fra websider. Hvis du vil finde og vælge flere elementer ved hjælp af XPath-vælgere, skal du bruge browser.find_elements_by_xpath () eller browser.find_elements () metoder.

Det browser.find_elements_by_xpath () metoden tager det samme argument som browser.find_element_by_xpath () metode.

Det browser.find_elements () metoden tager de samme argumenter som browser.find_element () metode.

Lad os se et eksempel på udpakning af en liste med navne ved hjælp af XPath-vælger fra tilfældigt navn-generator.info med Selenium Python-biblioteket.

Den uordnede liste (ol tag) har en 10 li tags inde i hver, der indeholder et tilfældigt navn. XPath til at vælge alle li tags inde i ol tag i dette tilfælde er // * [@ id = ”main”] / div [3] / div [2] / ol // li

Lad os gennemgå et eksempel på valg af flere elementer fra websiden ved hjælp af XPath-vælgere.

Opret et nyt Python-script ex03.py og indtast følgende linjer med koder i den.

fra selen import webdriver
fra selen.webdriver.almindelige.nøgler importerer nøgler
fra selen.webdriver.almindelige.ved import af
optioner = webdriver.Chrome-valg ()
muligheder.headless = Sandt
browser = webdriver.Chrome (eksekverbar_sti = "./ drivere / chromedriver ",
optioner = optioner)
browser.get ("http: // random-name-generator.info / ")
navne = browser.find_elements_by_xpath ('
// * [@ id = "main"] / div [3] / div [2] / ol // li ')
for navn i navne:
Print navn.tekst)
browser.tæt()

Når du er færdig, skal du gemme ex03.py Python-script.

Linje 1-8 er den samme som i ex01.py Python-script. Så jeg vil ikke forklare dem her igen.

Linje 10 beder browseren om at indlæse webstedet random-name-generator.info.

Linie 12 vælger navnelisten ved hjælp af browser.find_elements_by_xpath () metode. Denne metode bruger XPath-vælgeren // * [@ id = ”main”] / div [3] / div [2] / ol // li for at finde navnelisten. Derefter gemmes navnelisten i navne variabel.

I linje 13 og 14, a til loop bruges til at gentage gennem navne liste og udskrive navnene på konsollen.

Linje 16 lukker browseren.

Kør Python-scriptet ex03.py som følger:

$ python3 ex03.py

Som du kan se, hentes navnene fra websiden og udskrives på konsollen.

I stedet for at bruge browser.find_elements_by_xpath () metode, kan du også bruge browser.find_elements () metode som før. Det første argument for denne metode er Ved.XPATH, og det andet argument er XPath-vælgeren.

At eksperimentere med browser.find_elements () metode, skal du oprette et nyt Python-script ex04.py, kopier alle koder fra ex03.py til ex04.py, og skift linje 12 som markeret i skærmbilledet nedenfor.

Du skal få det samme resultat som før.

$ python3 ex04.py

Grundlæggende om XPath Selector:

Udviklerværktøjet i Firefox eller Google Chrome-webbrowser genererer automatisk XPath-vælger. Men disse XPath-vælgere er undertiden ikke tilstrækkelige til dit projekt. I så fald skal du vide, hvad en bestemt XPath-vælger gør for at opbygge din XPath-vælger. I dette afsnit vil jeg vise dig det grundlæggende i XPath-vælgerne. Derefter skal du være i stand til at bygge din egen XPath-vælger.

Opret en ny mappe www / i din projektmappe som følger:

$ mkdir -v www

Opret en ny fil web01.html i www / bibliotek og skriv følgende linjer i filen.






Grundlæggende HTML-dokument


Hej Verden



Når du er færdig, skal du gemme web01.html fil.

Kør en simpel HTTP-server på port 8080 ved hjælp af følgende kommando:

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

HTTP-serveren skal starte.

Du skal være i stand til at få adgang til web01.html fil ved hjælp af URL'en http: // localhost: 8080 / web01.html, som du kan se på skærmbilledet nedenfor.

Mens Firefox eller Chrome Developer Tool åbnes, skal du trykke på + F for at åbne søgefeltet. Du kan skrive din XPath-vælger her og se, hvad den vælger meget let. Jeg vil bruge dette værktøj i hele dette afsnit.

En XPath-vælger starter med en skråstreg (/) det meste af tiden. Det er som et Linux-katalogtræ. Det / er roden til alle elementer på websiden.

Det første element er html. Så XPath-vælgeren / html vælger hele html tag.

Inde i html tag, vi har en legeme tag. Det legeme tag kan vælges med XPath-vælgeren / html / body

Det h1 header er inde i legeme tag. Det h1 header kan vælges med XPath-vælgeren / html / body / h1

Denne type XPath-vælger kaldes en absolut stivælger. I absolut sti-vælger skal du krydse websiden fra sidens rod (/). Ulempen ved en absolut stivælger er, at selv en lille ændring af websides struktur kan gøre din XPath-vælger ugyldig. Løsningen på dette problem er en relativ eller delvis XPath-vælger.

For at se, hvordan relativ sti eller delvis sti fungerer, skal du oprette en ny fil web02.html i www / bibliotek, og skriv følgende koderader i det.






Grundlæggende HTML-dokument


Hej Verden



dette er besked




Hej Verden


Når du er færdig, skal du gemme web02.html fil og indlæse den i din webbrowser.

Som du kan se, XPath-vælgeren // div / s vælger s tag inde i div tag. Dette er et eksempel på en relativ XPath-vælger.

Relativ XPath-vælger starter med //. Derefter angiver du strukturen på det element, du vil vælge. I dette tilfælde, div / s.

Så, // div / s betyder vælg s element inde i en div element, betyder ikke noget, hvad der kommer før det.

Du kan også vælge elementer efter forskellige attributter som f.eks id, klasse, type, etc. ved hjælp af XPath-vælger. Lad os se, hvordan man gør det.

Opret en ny fil web03.html i www / mappe, og skriv følgende koderader i den.






Grundlæggende HTML-dokument


Hej Verden



dette er besked


dette er en anden besked


overskrift 2


Lorem ipsum dolor sid 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?




dette er en sidefod


Når du er færdig, skal du gemme web03.html fil og indlæse den i din webbrowser.

Lad os sige, at du vil vælge alle div elementer, der har klasse navn container1. For at gøre det kan du bruge XPath-vælgeren // div [@ class = 'container1']

Som du kan se, har jeg 2 elementer, der matcher XPath-vælgeren // div [@ class = 'container1']

For at vælge den første div element med klasse navn container1, tilføje [1] i slutningen af ​​XPath vælges som vist på skærmbilledet nedenfor.

På samme måde kan du vælge det andet div element med klasse navn container1 ved hjælp af XPath-vælgeren // div [@ class = 'container1'] [2]

Du kan vælge elementer efter id såvel.

For eksempel at vælge det element, der har id af footer-msg, du kan bruge XPath-vælgeren // * [@ id = 'footer-msg']

Her, den * Før [@ id = 'footer-msg'] bruges til at vælge ethvert element uanset deres tag.

Det er det grundlæggende i XPath-vælgeren. Nu skal du være i stand til at oprette din egen XPath-vælger til dine Selen-projekter.

Konklusion:

I denne artikel har jeg vist dig, hvordan du finder og vælger elementer fra websider ved hjælp af XPath-vælgeren med Selenium Python-biblioteket. Jeg har også diskuteret de mest almindelige XPath-vælgere. Efter at have læst denne artikel, skal du være ret sikker på at vælge elementer fra websider ved hjælp af XPath-vælgeren med Selenium Python-biblioteket.

Bedste spil at spille med håndsporing
Oculus Quest introducerede for nylig den gode idé om håndsporing uden controllere. Med et stadigt stigende antal spil og aktiviteter, der udfører supp...
Sådan vises OSD-overlay i fuldskærms Linux-apps og -spil
Afspilning af fuldskærmsspil eller brug af apps i distraktionsfri fuldskærmstilstand kan afskære dig fra relevante systemoplysninger, der er synlige i...
Top 5 spiloptagelseskort
Vi har alle set og elsket streaming af gameplay på YouTube. PewDiePie, Jakesepticye og Markiplier er kun nogle af de bedste spillere, der har tjent mi...