Selen

Bruke XPath og Selen for å finne et element i HTML-siden

Bruke XPath og Selen for å finne et element i HTML-siden
XPath, også kjent som XML Path Language, er et språk for valg av elementer fra et XML-dokument. Siden HTML og XML følger samme dokumentstruktur, kan XPath også brukes til å velge elementer fra en webside.

Å finne og velge elementer fra websiden er nøkkelen til nettskraping med Selen. For å finne og velge elementer fra websiden, kan du bruke XPath-velgerne i Selenium.

I denne artikkelen skal jeg vise deg hvordan du finner og velger elementer fra websider ved hjelp av XPath-velgerne i Selen med Selenium python-biblioteket. Så la oss komme i gang.

Forutsetninger:

For å prøve kommandoene og eksemplene til denne artikkelen må du ha,

  1. En Linux-distribusjon (helst Ubuntu) installert på datamaskinen din.
  2. Python 3 installert på datamaskinen din.
  3. PIP 3 installert på datamaskinen din.
  4. Python virtualenv pakken installert på datamaskinen din.
  5. Mozilla Firefox eller Google Chrome nettlesere installert på datamaskinen din.
  6. Må vite hvordan du installerer Firefox Gecko Driver eller Chrome Web Driver.

For å oppfylle kravene 4, 5 og 6, les artikkelen min Introduksjon til selen i Python 3. Du kan finne mange artikler om de andre emnene på LinuxHint.com. Husk å sjekke dem ut hvis du trenger hjelp.

Sette opp en prosjektkatalog:

For å holde alt organisert, opprett en ny prosjektkatalog selen-xpath / som følger:

$ mkdir -pv selen-xpath / drivere

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

$ cd selen-xpath /

Opprett et virtuelt Python-miljø i prosjektkatalogen som følger:

$ virtualenv .venv

Aktiver det virtuelle miljøet som følger:

$ kilde .venv / bin / aktiver

Installer Selenium Python-biblioteket ved hjelp av PIP3 som følger:

$ pip3 installer selen

Last ned og installer alle nødvendige nettdrivere i drivere / katalog av prosjektet. Jeg har forklart prosessen med å laste ned og installere nettdrivere i artikkelen min Introduksjon til selen i Python 3.

Skaff deg XPath Selector ved hjelp av Chrome Developer Tool:

I denne delen skal jeg vise deg hvordan du finner XPath-velgeren til nettsideelementet du vil velge med Selen ved hjelp av det innebygde utviklerverktøyet i Google Chrome-nettleseren.

For å få XPath-velgeren ved hjelp av Google Chrome-nettleseren, åpne Google Chrome og besøk nettstedet du vil hente ut data fra. Trykk deretter på høyre museknapp (RMB) på et tomt område på siden og klikk på Undersøke å åpne Chrome Developer Tool.

Du kan også trykke + Skifte + Jeg å åpne Chrome Developer Tool.

Chrome Developer Tool skal åpnes.

For å finne HTML-representasjonen av ønsket websideelement, klikk på Undersøke(

) -ikonet, som markert i skjermbildet nedenfor.

Hold deretter markøren over ønsket websideelement og trykk på venstre museknapp (LMB) for å velge det.

HTML-representasjonen av webelementet du har valgt vil bli uthevet i Elementer fanen i Chrome Developer Tool, som du kan se på skjermbildet nedenfor.

For å hente XPath-velgeren for ønsket element, velg elementet fra Elementer fanen til Chrome Developer Tool og høyreklikk (RMB) på den. Velg deretter Kopiere > Kopier XPath, som markert i skjermbildet nedenfor.

Jeg har limt inn XPath-velgeren i en tekstredigerer. XPath-velgeren ser ut som vist på skjermbildet nedenfor.

Skaff deg XPath Selector ved hjelp av Firefox Developer Tool:

I denne delen skal jeg vise deg hvordan du finner XPath-velgeren til nettsideelementet du vil velge med Selen ved hjelp av det innebygde utviklerverktøyet i Mozilla Firefox-nettleseren.

For å få XPath-velgeren ved å bruke Firefox-nettleseren, åpner du Firefox og besøker nettstedet du vil hente ut data fra. Trykk deretter på høyre museknapp (RMB) på et tomt område på siden og klikk på Inspiser element (Q) å åpne Firefox Developer Tool.

Firefox Developer Tool skal åpnes.

For å finne HTML-representasjonen av ønsket websideelement, klikk på Undersøke(

) -ikonet, som markert i skjermbildet nedenfor.

Hold deretter markøren over ønsket websideelement og trykk på venstre museknapp (LMB) for å velge det.

HTML-representasjonen av webelementet du har valgt blir uthevet i Inspektør fanen til Firefox Developer Tool, som du kan se på skjermbildet nedenfor.

For å hente XPath-velgeren for ønsket element, velg elementet fra Inspektør fanen til Firefox Developer Tool og høyreklikk (RMB) på den. Velg deretter Kopiere > XPath som markert i skjermbildet nedenfor.

XPath-velgeren til ønsket element skal se slik ut.

Pakke ut data fra websider ved hjelp av XPath Selector:

I denne delen skal jeg vise deg hvordan du velger nettsideelementer og trekker ut data fra dem ved hjelp av XPath-velgere med Selenium Python-biblioteket.

Først oppretter du et nytt Python-skript ex01.py og skriv inn følgende kodelinjer.

fra selen import webdriver
fra selen.webdriver.felles.nøkler importerer nøkler
fra selen.webdriver.felles.ved import av
opsjoner = webdriver.ChromeOptions ()
alternativer.hodeløs = Sant
nettleser = webdriver.Chrome (executable_path = "./ drivere / chromedriver ",
opsjoner = opsjoner)
nettleser.få ("https: // www.unixtimestamp.com / ")
tidsstempel = nettleser.find_element_by_xpath ('/ html / body / div [1] / div [1]
/ div [2] / div [1] / div / div / h3 [2] ')
utskrift ('Gjeldende tidsstempel:% s'% (tidsstempel.tekst.delt (") [0]))
nettleser.Lukk()

Når du er ferdig, lagrer du ex01.py Python-skript.

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

Linje 5 oppretter et Chrome Options-objekt, og linje 6 aktiverer hodeløs modus for Chrome-nettleseren.

Linje 8 oppretter en Chrome nettleser objektet ved hjelp av chromedriver binær fra drivere / katalog av prosjektet.

Linje 10 ber nettleseren om å laste inn nettstedet unixtimestamp.com.

Linje 12 finner elementet som har tidsstempeldataene fra siden ved hjelp av XPath-velgeren og lagrer det i tidsstempel variabel.

Linje 13 analyserer tidsstempeldataene fra elementet og skriver dem ut på konsollen.

Jeg har kopiert XPath-velgeren til det merkede h2 element fra unixtimestamp.com ved hjelp av Chrome Developer Tool.

Linje 14 lukker nettleseren.

Kjør Python-skriptet ex01.py som følger:

$ python3 ex01.py

Som du kan se, blir tidsstempeldataene skrevet ut på skjermen.

Her har jeg brukt nettleser.finn_element_by_xpath (velger) metode. Den eneste parameteren for denne metoden er velgeren, som er XPath-velgeren for elementet.

I stedet for nettleser.finn_element_by_xpath () metode, kan du også bruke nettleser.find_element (av, velger) metode. Denne metoden trenger to parametere. Den første parameteren Av vil være Av.XPATH som vi skal bruke XPath-velgeren, og den andre parameteren velgeren vil være selve XPath-velgeren. Resultatet blir det samme.

For å se hvordan nettleser.finn_element () metoden fungerer for XPath-velgeren, oppretter du et nytt Python-skript ex02.py, kopier og lim inn alle linjene fra ex01.py til ex02.py og endre linje 12 som markert i skjermbildet nedenfor.

Som du kan se, Python-skriptet ex02.py gir samme resultat som ex01.py.

$ python3 ex02.py

De nettleser.finn_element_by_xpath () og nettleser.finn_element () metoder brukes til å finne og velge et enkelt element fra websider. Hvis du vil finne og velge flere elementer ved hjelp av XPath-velgerne, må du bruke nettleser.find_elements_by_xpath () eller nettleser.find_elements () metoder.

De nettleser.find_elements_by_xpath () metoden tar samme argument som nettleser.finn_element_by_xpath () metode.

De nettleser.find_elements () metoden tar de samme argumentene som nettleser.finn_element () metode.

La oss se et eksempel på å trekke ut en liste over navn ved hjelp av XPath-velgeren fra tilfeldig navn-generator.info med Selenium Python-biblioteket.

Den uordnede listen (ol tag) har en 10 li tagger inne i hver som inneholder et tilfeldig navn. XPath for å velge alle li tagger inne i ol tag i dette tilfellet er // * [@ id = ”main”] / div [3] / div [2] / ol // li

La oss gå gjennom et eksempel på å velge flere elementer fra websiden ved hjelp av XPath-velgerne.

Opprett et nytt Python-skript ex03.py og skriv inn følgende kodelinjer i den.

fra selen import webdriver
fra selen.webdriver.felles.nøkler importerer nøkler
fra selen.webdriver.felles.ved import av
opsjoner = webdriver.ChromeOptions ()
alternativer.hodeløs = Sant
nettleser = webdriver.Chrome (executable_path = "./ drivere / chromedriver ",
opsjoner = opsjoner)
nettleser.get ("http: // random-name-generator.info / ")
navn = nettleser.find_elements_by_xpath ('
// * [@ id = "main"] / div [3] / div [2] / ol // li ')
for navn i navn:
skriv ut (navn.tekst)
nettleser.Lukk()

Når du er ferdig, lagrer du ex03.py Python-skript.

Linje 1-8 er den samme som i ex01.py Python-skript. Så jeg kommer ikke til å forklare dem her igjen.

Linje 10 ber nettleseren om å laste inn nettstedet generator for tilfeldig navn.info.

Linje 12 velger navnelisten ved hjelp av nettleser.find_elements_by_xpath () metode. Denne metoden bruker XPath-velgeren // * [@ id = ”main”] / div [3] / div [2] / ol // li for å finne navnelisten. Deretter lagres navnelisten i navn variabel.

I linje 13 og 14, a til loop brukes til å gjenta gjennom navn liste opp og skriv ut navnene på konsollen.

Linje 16 lukker nettleseren.

Kjør Python-skriptet ex03.py som følger:

$ python3 ex03.py

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

I stedet for å bruke nettleser.find_elements_by_xpath () metoden, kan du også bruke nettleser.find_elements () metode som før. Det første argumentet for denne metoden er Av.XPATH, og det andre argumentet er XPath-velgeren.

Å eksperimentere med nettleser.find_elements () metode, oppretter du et nytt Python-skript ex04.py, kopier alle kodene fra ex03.py til ex04.py, og endre linje 12 som markert i skjermbildet nedenfor.

Du bør få samme resultat som før.

$ python3 ex04.py

Grunnleggende om XPath Selector:

Utviklerverktøyet i Firefox eller Google Chrome nettleser genererer XPath-velger automatisk. Men disse XPath-velgerne er noen ganger ikke tilstrekkelige for prosjektet ditt. I så fall må du vite hva en bestemt XPath-velger gjør for å bygge din XPath-velger. I denne delen skal jeg vise deg det grunnleggende om XPath-velgerne. Deretter bør du kunne bygge din egen XPath-velger.

Opprett en ny katalog www / i prosjektkatalogen din som følger:

$ mkdir -v www

Opprett en ny fil web01.html i www / katalog og skriv inn følgende linjer i filen.






Grunnleggende HTML-dokument


Hei Verden



Når du er ferdig, lagrer du web01.html fil.

Kjør en enkel HTTP-server på port 8080 ved hjelp av følgende kommando:

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

HTTP-serveren skal starte.

Du bør kunne få tilgang til web01.html fil ved hjelp av URL-adressen http: // localhost: 8080 / web01.html, som du kan se på skjermbildet nedenfor.

Mens Firefox eller Chrome Developer Tool åpnes, trykker du på + F for å åpne søkeboksen. Du kan skrive inn XPath-velgeren din her og se hva den velger veldig enkelt. Jeg skal bruke dette verktøyet gjennom hele denne delen.

En XPath-velger starter med en skråstrek fremover (/) meste parten av tiden. Det er som et Linux-katalogtre. De / er roten til alle elementene på websiden.

Det første elementet er html. Så, XPath-velgeren / html velger hele html stikkord.

Inne i html tag, vi har en kropp stikkord. De kropp tag kan velges med XPath-velgeren / html / kropp

De h1 topptekst er inne i kropp stikkord. De h1 topptekst kan velges med XPath-velgeren / html / body / h1

Denne typen XPath-velger kalles en absolutt banevalg. I absolutt stivelger må du krysse websiden fra roten (/) på siden. Ulempen med en absolutt banevalg er at selv en liten endring av websidestrukturen kan gjøre XPath-velgeren din ugyldig. Løsningen på dette problemet er en relativ eller delvis XPath-velger.

For å se hvordan relativ bane eller delvis bane fungerer, opprett en ny fil web02.html i www / katalogen og skriv inn følgende kodelinjer i den.






Grunnleggende HTML-dokument


Hei Verden



dette er melding




Hei Verden


Når du er ferdig, lagrer du web02.html filen og last den i nettleseren din.

Som du kan se, XPath-velgeren // div / s velger s tag inne i div stikkord. Dette er et eksempel på en relativ XPath-velger.

Relativ XPath-velger starter med //. Deretter spesifiserer du strukturen til elementet du vil velge. I dette tilfellet, div / s.

Så, // div / s betyr velg s element inne i div element, spiller ingen rolle hva som kommer før det.

Du kan også velge elementer etter forskjellige attributter som id, klasse, type, etc. ved hjelp av XPath-velgeren. La oss se hvordan vi gjør det.

Opprett en ny fil web03.html i www / katalogen og skriv inn følgende kodelinjer i den.






Grunnleggende HTML-dokument


Hei Verden



dette er melding


dette er en annen melding


overskrift 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?




dette er en bunntekst


Når du er ferdig, lagrer du web03.html filen og last den i nettleseren din.

La oss si at du vil velge alle div elementer som har klasse Navn beholder1. For å gjøre det kan du bruke XPath-velgeren // div [@ class = 'container1']

Som du kan se, har jeg to elementer som samsvarer med XPath-velgeren // div [@ class = 'container1']

For å velge den første div element med klasse Navn beholder1, legge til [1] på slutten av XPath velg, som vist på skjermbildet nedenfor.

På samme måte kan du velge det andre div element med klasse Navn beholder1 ved hjelp av XPath-velgeren // div [@ class = 'container1'] [2]

Du kan velge elementer etter id også.

For eksempel for å velge elementet som har id av bunntekst-msg, du kan bruke XPath-velgeren // * [@ id = 'footer-msg']

Her, den * før [@ id = 'footer-msg'] brukes til å velge hvilket som helst element uavhengig av taggen.

Det er det grunnleggende i XPath-velgeren. Nå skal du kunne lage din egen XPath-velger for Selenium-prosjektene.

Konklusjon:

I denne artikkelen har jeg vist deg hvordan du finner og velger elementer fra websider ved hjelp av XPath-velgeren med Selenium Python-biblioteket. Jeg har også diskutert de vanligste XPath-velgerne. Etter å ha lest denne artikkelen, bør du føle deg ganske trygg på å velge elementer fra websider ved hjelp av XPath-velgeren med Selenium Python-biblioteket.

Mus AppyMouse Pekeplate og musepeker på skjermen for Windows-nettbrett
AppyMouse Pekeplate og musepeker på skjermen for Windows-nettbrett
Nettbrettbrukere savner ofte musepekeren, spesielt når de bruker vanlige bærbare datamaskiner. Berøringsskjermen Smarttelefoner og nettbrett har mange...
Mus Midterste museknapp fungerer ikke i Windows 10
Midterste museknapp fungerer ikke i Windows 10
De midtre museknapp hjelper deg med å bla gjennom lange websider og skjermer med mye data. Hvis det stopper, vil du ende opp med å bruke tastaturet ti...
Mus Hvordan endre venstre og høyre museknapp på Windows 10 PC
Hvordan endre venstre og høyre museknapp på Windows 10 PC
Det er ganske vanlig at alle datamusenheter er ergonomisk designet for høyrehendte brukere. Men det er tilgjengelige musenheter som er spesielt design...