Uporaba XPath in Selenium za iskanje elementa na strani HTML

Using Xpath Selenium Find An Element Html Page



XPath, znan tudi kot jezik poti XML, je jezik za izbiro elementov iz dokumenta XML. Ker HTML in XML sledita isti strukturi dokumentov, lahko XPath uporabite tudi za izbiro elementov s spletne strani.

Iskanje in izbira elementov s spletne strani je ključ do strganja po spletu s Selenom. Za iskanje in izbiro elementov na spletni strani lahko uporabite izbirnike XPath v Selenium.







V tem članku vam bom pokazal, kako poiščete in izberete elemente s spletnih strani z izbirniki XPath v Seleniumu s knjižnico Selenium python. Torej, začnimo.



Predpogoji:

Če želite preizkusiti ukaze in primere tega članka, morate imeti:



  1. Distribucija Linuxa (po možnosti Ubuntu), nameščena v vašem računalniku.
  2. Python 3 je nameščen v računalniku.
  3. PIP 3 je nameščen na vašem računalniku.
  4. Python virtualenv paket, nameščen v računalniku.
  5. Spletni brskalniki Mozilla Firefox ali Google Chrome, nameščeni v vašem računalniku.
  6. Morate vedeti, kako namestiti gonilnik Firefox Gecko ali spletni gonilnik Chrome.

Če želite izpolniti zahteve 4, 5 in 6, preberite moj članek Uvod v selen v Pythonu 3 . Tu lahko najdete veliko člankov o drugih temah LinuxHint.com . Če potrebujete pomoč, jih obvezno preverite.





Nastavitev imenika projekta:

Če želite, da je vse organizirano, ustvarite nov imenik projektov selenium-xpath/ kot sledi:

$mkdir -pvselen-xpath/vozniki



Pomaknite se do selenium-xpath/ imenik projekta, kot sledi:

$CDselen-xpath/

Ustvarite navidezno okolje Python v imeniku projekta na naslednji način:

$virtualenv .venv

Navidezno okolje aktivirajte na naslednji način:

$vir.venv/zjutraj/aktivirati

Knjižnico Selenium Python namestite s PIP3 na naslednji način:

$ pip3 namestite selen

Prenesite in namestite ves zahtevani spletni gonilnik v vozniki/ imenik projekta. Postopek prenosa in namestitve spletnih gonilnikov sem razložil v svojem članku Uvod v selen v Pythonu 3 .

Pridobite izbirnik XPath z orodjem za razvijalce za Chrome:

V tem razdelku vam bom pokazal, kako z vgrajenim orodjem za razvijalce spletnega brskalnika Google Chrome poiščete izbirnik XPath elementa spletne strani, ki ga želite izbrati s Selenom.

Če želite izbrati izbirnik XPath s spletnim brskalnikom Google Chrome, odprite Google Chrome in obiščite spletno mesto, s katerega želite izvleči podatke. Nato pritisnite desni gumb miške (RMB) na prazen del strani in kliknite Preglejte odpreti Orodje za razvijalce Chrome .

Lahko tudi pritisnete + Premik + jaz odpreti Orodje za razvijalce Chrome .

Orodje za razvijalce Chrome bi morali odpreti.

Če želite poiskati HTML predstavitev želenega elementa spletne strani, kliknite na Preglejte (

), kot je označeno na spodnjem posnetku zaslona.

Nato se pomaknite nad želeni element spletne strani in ga izberite z levim gumbom miške (LMB).

Predstavitev HTML izbranega spletnega elementa bo označena v Elementi zavihek Orodje za razvijalce za Chrome, kot lahko vidite na spodnjem posnetku zaslona.

Če želite dobiti izbirnik XPath želenega elementa, izberite element iz Elementi zavihek Orodje za razvijalce Chrome in z desno tipko miške kliknite (RMB). Nato izberite Kopirati > Kopirajte XPath, kot je označeno na spodnjem posnetku zaslona.

Izbirnik XPath sem prilepil v urejevalnik besedil. Izbirnik XPath izgleda, kot je prikazano na spodnjem posnetku zaslona.

Pridobite XPath Selector z orodjem za razvijalce Firefox:

V tem razdelku vam bom pokazal, kako z vgrajenim orodjem za razvijalce spletnega brskalnika Mozilla Firefox poiščete izbirnik XPath elementa spletne strani, ki ga želite izbrati s Selenom.

Če želite s spletnim brskalnikom Firefox dobiti izbirnik XPath, odprite Firefox in obiščite spletno mesto, s katerega želite izvleči podatke. Nato pritisnite desni gumb miške (RMB) na prazen del strani in kliknite Preglejte element (Q) odpreti Orodje za razvijalce Firefox .

Orodje za razvijalce Firefox bi morali odpreti.

Če želite poiskati HTML predstavitev želenega elementa spletne strani, kliknite na Preglejte (

), kot je označeno na spodnjem posnetku zaslona.

Nato se pomaknite nad želeni element spletne strani in ga izberite z levim gumbom miške (LMB).

Predstavitev HTML izbranega spletnega elementa bo označena v Inšpektor zavihek Orodje za razvijalce Firefox, kot lahko vidite na spodnjem posnetku zaslona.

Če želite dobiti izbirnik XPath želenega elementa, izberite element iz Inšpektor zavihek Orodje za razvijalce Firefox in z desno tipko miške kliknite (RMB). Nato izberite Kopirati > XPath kot je označeno na spodnjem posnetku zaslona.

Izbirnik XPath želenega elementa bi moral izgledati nekako tako.

Izvlečenje podatkov s spletnih strani z izbirnikom XPath:

V tem razdelku vam bom pokazal, kako izberete elemente spletne strani in iz njih izvlečete podatke z izbirniki XPath s knjižnico Selenium Python.

Najprej ustvarite nov skript Python ex01.py in vnesite naslednje vrstice kod.

odselenauvozspletni gonilnik
odselena.spletni gonilnik.običajni.ključe uvozKljuči
odselena.spletni gonilnik.običajni.avtor: uvozAvtor:
opcije=spletni gonilnik.ChromeOptions()
opcije.brez glave = Prav
brskalnik=spletni gonilnik.Chrome(executable_path='./drivers/chromedriver',
opcije=opcije)
brskalnik.dobiti('https://www.unixtimestamp.com/')
časovni žig=brskalnik.find_element_by_xpath('/html/body/div [1]/div [1]
/div [2]/div [1]/div/div/h3 [2] '
)
tiskanje('Trenutni časovni žig: %s'%(časovni žig.besedilo.razcepljeno('')[0]))
brskalnik.blizu()

Ko končate, shranite ex01.py Python skript.

Vrstica 1-3 uvaža vse potrebne komponente selena.

Vrstica 5 ustvari objekt Možnosti Chroma, vrstica 6 pa omogoča brezglavi način za spletni brskalnik Chrome.

Vrstica 8 ustvari Chrome brskalnik predmet z uporabo kromiran binarni iz vozniki/ imenik projekta.

Vrstica 10 brskalniku pove, naj naloži spletno mesto unixtimestamp.com.

Vrstica 12 poišče element, ki vsebuje podatke časovnega žiga s strani z izbirnikom XPath in ga shrani v datoteko časovni žig spremenljivka.

Vrstica 13 razčleni podatke časovnega žiga iz elementa in jih natisne na konzoli.

Prepisal sem izbirnik XPath označenega h2 element iz unixtimestamp.com z orodjem za razvijalce Chrome.

Vrstica 14 zapre brskalnik.

Zaženite skript Python ex01.py kot sledi:

$ python3 ex01.py

Kot lahko vidite, so podatki o časovnem žigu natisnjeni na zaslonu.

Tukaj sem uporabil browser.find_element_by_xpath (izbirnik) metoda. Edini parameter te metode je izbirnik, ki je izbirnik elementa XPath.

Namesto browser.find_element_by_xpath () metodo, ki jo lahko uporabite tudi browser.find_element (Z, izbirnik) metoda. Ta metoda zahteva dva parametra. Prvi parameter Avtor: bo Avtor.XPATH saj bomo uporabljali izbirnik XPath in drugi parameter izbirnik bo sam izbirnik XPath. Rezultat bo enak.

Da vidim, kako browser.find_element () metoda deluje za izbirnik XPath, ustvarite nov skript Python ex02.py , kopirajte in prilepite vse vrstice iz ex01.py do ex02.py in spremeniti vrstica 12 kot je označeno na spodnjem posnetku zaslona.

Kot lahko vidite, skript Python ex02.py daje enak rezultat kot ex01.py .

$ python3 ex02.py

The browser.find_element_by_xpath () in browser.find_element () metode se uporabljajo za iskanje in izbiro posameznega elementa na spletnih straneh. Če želite poiskati in izbrati več elementov z izbirniki XPath, morate uporabiti browser.find_elements_by_xpath () ali browser.find_elements () metode.

The browser.find_elements_by_xpath () metoda ima enak argument kot browser.find_element_by_xpath () metoda.

The browser.find_elements () metoda ima enake argumente kot browser.find_element () metoda.

Poglejmo primer izvlečenja seznama imen z izbirnikom XPath iz generator naključnih imen.info s knjižnico Selenium Python.

Neurejen seznam ( umreti oznaka) ima 10 pri oznake znotraj vsakega, ki vsebujejo naključno ime. XPath za izbiro vseh pri oznake znotraj umreti oznaka v tem primeru je //*[@id = main]/div [3]/div [2]/ol // li

Poglejmo primer izbire več elementov s spletne strani z izbirniki XPath.

Ustvarite nov skript Python ex03.py in vanj vnesite naslednje vrstice kod.

odselenauvozspletni gonilnik
odselena.spletni gonilnik.običajni.ključe uvozKljuči
odselena.spletni gonilnik.običajni.avtor: uvozAvtor:
opcije=spletni gonilnik.ChromeOptions()
opcije.brez glave = Prav
brskalnik=spletni gonilnik.Chrome(executable_path='./drivers/chromedriver',
opcije=opcije)
brskalnik.dobiti('http://random-name-generator.info/')
imena=brskalnik.find_elements_by_xpath('
//*[@id = 'main']/div [3]/div [2]/ol // li '
)
zaimevimena:
tiskanje(ime.besedilo)
brskalnik.blizu()

Ko končate, shranite ex03.py Python skript.

Vrstica 1-8 je enaka kot v ex01.py Python skript. Torej, tukaj jih ne bom več razlagal.

Vrstica 10 brskalniku pove, naj naloži spletno mesto random-name-generator.info.

Vrstica 12 izbere seznam imen s pomočjo browser.find_elements_by_xpath () metoda. Ta metoda uporablja izbirnik XPath //*[@id = main]/div [3]/div [2]/ol // li da poiščete seznam imen. Nato je seznam imen shranjen v imena spremenljivka.

V vrsticah 13 in 14 a za zanka se uporablja za ponovitev po imena seznam in natisnite imena na konzoli.

Vrstica 16 zapre brskalnik.

Zaženite skript Python ex03.py kot sledi:

$ python3 ex03.py

Kot lahko vidite, so imena izvlečena s spletne strani in natisnjena na konzoli.

Namesto da uporabite browser.find_elements_by_xpath () metodo, lahko uporabite tudi browser.find_elements () metoda kot prej. Prvi argument te metode je Avtor.XPATH, drugi argument pa je izbirnik XPath.

Za eksperimentiranje browser.find_elements () metodo, ustvarite nov skript Python ex04.py , kopirajte vse kode iz ex03.py do ex04.py in spremenite vrstico 12, kot je označeno na spodnjem posnetku zaslona.

Morali bi dobiti enak rezultat kot prej.

$ python3 ex04.py

Osnove programa XPath Selector:

Orodje za razvijalce brskalnika Firefox ali Google Chrome samodejno ustvari izbirnik XPath. Toda ti izbirniki XPath včasih ne zadostujejo za vaš projekt. V tem primeru morate vedeti, kaj določen izbirnik XPath naredi za izdelavo izbirnika XPath. V tem razdelku vam bom pokazal osnove izbirnikov XPath. Potem bi morali zgraditi svoj izbirnik XPath.

Ustvarite nov imenik www/ v imeniku vašega projekta na naslednji način:

$mkdir -vwww

Ustvarite novo datoteko web01.html v www/ imenik in v to datoteko vnesite naslednje vrstice.


< html lang='vklopljeno'>
< glavo >
< meta charset='UTF-8'>
< meta ime='viewport' vsebino='width = širina naprave, začetno merilo = 1,0'>
< naslov >Osnovni dokument HTML</ naslov >
</ glavo >
< telo >
< h1 >Pozdravljen, svet</ h1 >
</ telo >
</ html >

Ko končate, shranite web01.html mapa.

Zaženite preprost strežnik HTTP na vratih 8080 z naslednjim ukazom:

$ python3 -m http.strežnika--imenik www/8080

Strežnik HTTP se mora zagnati.

Morali bi imeti dostop do web01.html datoteko z uporabo URL -ja http: // localhost: 8080/web01.html , kot lahko vidite na spodnjem posnetku zaslona.

Ko se odpre orodje za razvijalce Firefox ali Chrome, pritisnite + F. odpreti iskalno polje. Tukaj lahko vnesete izbirnik XPath in si z lahkoto ogledate, kaj izbere. To orodje bom uporabljal v tem razdelku.

Izbirnik XPath se začne z poševnica (/) večino časa. To je kot drevo imenikov Linuxa. The / je koren vseh elementov na spletni strani.

Prvi element je html . Torej, izbirnik XPath /html izbere celoto html oznaka.

Znotraj html oznako, imamo a telo oznaka. The telo oznako lahko izberete z izbirnikom XPath /html/body

The h1 glava je znotraj telo oznaka. The h1 glavo lahko izberete z izbirnikom XPath /html/body/h1

Ta vrsta izbirnika XPath se imenuje absolutni izbirnik poti. V izbirniku absolutne poti morate spletno stran prečkati od korena (/) strani. Pomanjkljivost absolutnega izbirnika poti je, da lahko že zaradi rahle spremembe strukture spletne strani vaš izbirnik XPath postane neveljaven. Rešitev tega problema je relativni ali delni izbirnik XPath.

Če želite videti, kako deluje relativna ali delna pot, ustvarite novo datoteko web02.html v www/ imenik in vanj vnesite naslednje vrstice kod.


< html lang='vklopljeno'>
< glavo >
< meta charset='UTF-8'>
< meta ime='viewport' vsebino='width = širina naprave, začetno merilo = 1,0'>
< naslov >Osnovni dokument HTML</ naslov >
</ glavo >
< telo >
< h1 >Pozdravljen, svet</ h1 >

< div >
< str >to je sporočilo</ str >
</ div >

< div >
< razpon >Pozdravljen, svet</ razpon >
</ div >
</ telo >
</ html >

Ko končate, shranite web02.html datoteko in jo naložite v spletni brskalnik.

Kot lahko vidite, izbirnik XPath // div/str izbere str oznako znotraj div oznaka. To je primer relativnega izbirnika XPath.

Relativni izbirnik XPath se začne z // . Nato določite strukturo elementa, ki ga želite izbrati. V tem primeru, div/str .

Torej, // div/str pomeni izberite str element znotraj a div element, ni pomembno, kaj pride pred njim.

Elemente lahko izberete tudi po različnih atributih, na primer id , razred , vrsta, itd. z izbirnikom XPath. Poglejmo, kako to storiti.

Ustvarite novo datoteko web03.html v www/ imenik in vanj vnesite naslednje vrstice kod.


< html lang='vklopljeno'>
< glavo >
< meta charset='UTF-8'>
< meta ime='viewport' vsebino='width = širina naprave, začetno merilo = 1,0'>
< naslov > Osnovni dokument HTML</ naslov >
</ glavo >
< telo >
< h1 > Pozdravljeni svet</ h1 >
< div razred='zabojnik1'>
< str > to je sporočilo</ str >
< razpon > to je drugo sporočilo</ razpon >
</ div >
< div razred='zabojnik1'>
< h2 > naslov2</ h2 >
< str > Nekateri ljudje
pametno izbrati bolečine, težave, tiste, ki ne pripadajo izbranemu
enostavni leti ali druge odlične storitve? Od kod ali od kod se je rodil?</ str >
</ div >

< razpon id='footer-msg'> to je noga</ razpon >
</noga>
</ telo >
</ html >

Ko končate, shranite web03.html datoteko in jo naložite v spletni brskalnik.

Recimo, da želite izbrati vse div elementi, ki imajo razred ime posoda1 . Če želite to narediti, uporabite izbirnik XPath // div [@class = ’kontejner1 ′]

Kot lahko vidite, imam dva elementa, ki se ujemata z izbirnikom XPath // div [@class = ’kontejner1 ′]

Če želite izbrati prvega div element z razred ime posoda1 , dodaj [1] na koncu XPath izberite, kot je prikazano na spodnjem posnetku zaslona.

Na enak način lahko izberete drugo div element z razred ime posoda1 z izbirnikom XPath // div [@class = ’container1 ′] [2]

Elemente lahko izberete po id tudi.

Na primer, če želite izbrati element, ki ima datoteko id od noga-sporočilo , lahko uporabite izbirnik XPath //*[@id = ’footer-msg ']

Tukaj, * prej [@id = ’footer-msg '] se uporablja za izbiro katerega koli elementa ne glede na njegovo oznako.

To so osnove izbirnika XPath. Zdaj bi morali imeti možnost ustvarjanja lastnega izbirnika XPath za vaše projekte Selenium.

Zaključek:

V tem članku sem vam pokazal, kako poiščete in izberete elemente s spletnih strani z izbirnikom XPath s knjižnico Selenium Python. Govoril sem tudi o najpogostejših izbirnikih XPath. Ko ste prebrali ta članek, bi se morali počutiti precej samozavestno pri izbiri elementov s spletnih strani z izbirnikom XPath s knjižnico Selenium Python.