„XPath“ ir seleno naudojimas norint rasti elementą HTML puslapyje

Using Xpath Selenium Find An Element Html Page



XPath, taip pat žinomas kaip XML kelio kalba, yra elementų iš XML dokumento parinkimo kalba. Kadangi HTML ir XML formato tą pačią dokumento struktūrą, „XPath“ taip pat gali būti naudojamas elementams pasirinkti iš tinklalapio.

Tinklalapio elementų radimas ir pasirinkimas yra raktas į žiniatinklio grandymą naudojant seleną. Norėdami rasti ir pasirinkti elementus iš tinklalapio, galite naudoti „XPath“ selektorius „Selenium“.





Šiame straipsnyje aš jums parodysiu, kaip rasti ir pasirinkti elementus iš tinklalapių naudojant „XPath“ selektorius „Selenium“ su „Selenium python“ biblioteka. Taigi, pradėkime.



Būtinos sąlygos:

Norėdami išbandyti šio straipsnio komandas ir pavyzdžius, turite turėti:



  1. Jūsų kompiuteryje įdiegtas „Linux“ platinimas (pageidautina „Ubuntu“).
  2. Python 3 įdiegta jūsų kompiuteryje.
  3. PIP 3 įdiegta jūsų kompiuteryje.
  4. Python virtualenv paketą, įdiegtą jūsų kompiuteryje.
  5. „Mozilla Firefox“ arba „Google Chrome“ žiniatinklio naršyklės, įdiegtos jūsų kompiuteryje.
  6. Turi žinoti, kaip įdiegti „Firefox Gecko“ tvarkyklę arba „Chrome“ žiniatinklio tvarkyklę.

Norėdami įvykdyti 4, 5 ir 6 reikalavimus, perskaitykite mano straipsnį Įvadas į seleną „Python 3“ . Galite rasti daug straipsnių kitomis temomis LinuxHint.com . Būtinai patikrinkite juos, jei jums reikia pagalbos.





Projekto katalogo nustatymas:

Norėdami viską sutvarkyti, sukurkite naują projektų katalogą selenas-xpath/ taip:

$mkdir -pvselenas-xpath/vairuotojų



Eikite į selenas-xpath/ projekto katalogas:

$CDselenas-xpath/

Sukurkite „Python“ virtualią aplinką projekto kataloge taip:

$virtualenv .venv

Suaktyvinkite virtualią aplinką taip:

$šaltinis.venv/esu/aktyvuoti

Įdiekite „Selenium Python“ biblioteką naudodami PIP3 taip:

$ pip3 įdiegti seleną

Atsisiųskite ir įdiekite visas reikalingas interneto tvarkykles vairuotojai/ projekto katalogas. Savo straipsnyje paaiškinau žiniatinklio tvarkyklių atsisiuntimo ir diegimo procesą Įvadas į seleną „Python 3“ .

Gaukite „XPath Selector“ naudodami „Chrome“ kūrėjo įrankį:

Šiame skyriuje aš jums parodysiu, kaip rasti tinklalapio elemento „XPath“ parinkiklį, kurį norite pasirinkti naudodami „Selenium“, naudodami integruotą „Google Chrome“ žiniatinklio naršyklės kūrėjo įrankį.

Norėdami gauti „XPath“ parinkiklį naudodami „Google Chrome“ žiniatinklio naršyklę, atidarykite „Google Chrome“ ir apsilankykite svetainėje, iš kurios norite išgauti duomenis. Tada paspauskite dešinį pelės mygtuką (RMB) tuščioje puslapio srityje ir spustelėkite Patikrinkite atidaryti „Chrome“ kūrėjo įrankis .

Taip pat galite paspausti + Pamaina + atidaryti „Chrome“ kūrėjo įrankis .

„Chrome“ kūrėjo įrankis turėtų būti atidarytas.

Norėdami rasti norimo tinklalapio elemento HTML vaizdą, spustelėkite Patikrinkite (

) piktograma, kaip pažymėta žemiau esančioje ekrano kopijoje.

Tada užveskite pelės žymeklį virš norimo tinklalapio elemento ir paspauskite kairįjį pelės mygtuką (LMB), kad jį pasirinktumėte.

Pasirinkto žiniatinklio elemento HTML atvaizdavimas bus paryškintas skiltyje Elementai skirtuką „Chrome“ kūrėjo įrankis, kaip matote žemiau esančioje ekrano kopijoje.

Norėdami gauti norimo elemento XPath parinkiklį, pasirinkite elementą iš Elementai skirtukas iš „Chrome“ kūrėjo įrankis ir dešiniuoju pelės mygtuku spustelėkite (RMB) ant jo. Tada pasirinkite Kopijuoti > Kopijuoti XPath, kaip pažymėta žemiau esančioje ekrano kopijoje.

Įklijavau „XPath“ parinkiklį į teksto rengyklę. „XPath“ parinkiklis atrodo taip, kaip parodyta žemiau esančioje ekrano kopijoje.

Gaukite „XPath Selector“ naudodami „Firefox“ kūrėjo įrankį:

Šiame skyriuje aš jums parodysiu, kaip rasti tinklalapio elemento „XPath“ parinkiklį, kurį norite pasirinkti naudodami „Selenium“, naudodami integruotą „Mozilla Firefox“ žiniatinklio naršyklės kūrėjo įrankį.

Norėdami gauti „XPath“ parinkiklį naudodami „Firefox“ žiniatinklio naršyklę, atidarykite „Firefox“ ir apsilankykite svetainėje, iš kurios norite išgauti duomenis. Tada paspauskite dešinį pelės mygtuką (RMB) tuščioje puslapio srityje ir spustelėkite Patikrinkite elementą (Q) atidaryti „Firefox“ kūrėjo įrankis .

„Firefox“ kūrėjo įrankis turėtų būti atidarytas.

Norėdami rasti norimo tinklalapio elemento HTML vaizdą, spustelėkite Patikrinkite (

) piktograma, kaip pažymėta žemiau esančioje ekrano kopijoje.

Tada užveskite pelės žymeklį virš norimo tinklalapio elemento ir paspauskite kairįjį pelės mygtuką (LMB), kad jį pasirinktumėte.

Pasirinkto žiniatinklio elemento HTML atvaizdavimas bus paryškintas skiltyje Inspektorius skirtukas iš „Firefox“ kūrėjo įrankis, kaip matote žemiau esančioje ekrano kopijoje.

Norėdami gauti norimo elemento XPath parinkiklį, pasirinkite elementą iš Inspektorius skirtukas iš „Firefox“ kūrėjo įrankis ir dešiniuoju pelės mygtuku spustelėkite (RMB) ant jo. Tada pasirinkite Kopijuoti > XPath kaip pažymėta žemiau esančioje ekrano kopijoje.

Jūsų norimo elemento „XPath“ parinkiklis turėtų atrodyti maždaug taip.

Duomenų ištraukimas iš tinklalapių naudojant „XPath Selector“:

Šiame skyriuje aš jums parodysiu, kaip pasirinkti tinklalapio elementus ir iš jų išgauti duomenis naudojant „XPath“ selektorius su „Selenium Python“ biblioteka.

Pirmiausia sukurkite naują „Python“ scenarijų ex01.py ir įveskite šias kodų eilutes.

nuoselenasimportasinterneto tvarkyklę
nuoselenas.interneto tvarkyklę.dažnas.raktai importasRaktai
nuoselenas.interneto tvarkyklę.dažnas.pagal importasIki
galimybės=interneto tvarkyklę.„Chrome“ parinktys()
galimybės.be galvos = Tiesa
naršyklė=interneto tvarkyklę.„Chrome“(vykdomasis_ kelias='./drivers/chromedriver',
galimybės=galimybės)
naršyklė.gauti(„https://www.unixtimestamp.com/“)
laiko žyma=naršyklė.find_element_by_xpath('/html/body/div [1]/div [1]
/div [2]/div [1]/div/div/h3 [2] '
)
spausdinti(„Dabartinė laiko žyma: %s“%(laiko žyma.tekstas.suskaldyti('')[0]))
naršyklė.Uždaryti()

Baigę išsaugokite ex01.py „Python“ scenarijus.

1-3 eilutėje importuojami visi reikalingi seleno komponentai.

5 eilutė sukuria „Chrome“ parinkčių objektą, o 6 eilutė įgalina „Chrome“ žiniatinklio naršyklės režimą be galvos.

8 eilutė sukuria „Chrome“ naršyklė objektas naudojant chromedriver dvejetainis iš vairuotojai/ projekto katalogas.

10 eilutė nurodo naršyklei įkelti svetainę unixtimestamp.com.

12 eilutėje surandamas elementas, kuriame yra laiko žymos duomenys iš puslapio, naudojant „XPath“ parinkiklį, ir jis išsaugomas laiko žyma kintamasis.

13 eilutė analizuoja laiko žymos duomenis iš elemento ir spausdina juos konsolėje.

Nukopijavau pažymėto XPath parinkiklį h2 elementas iš unixtimestamp.com naudojant „Chrome“ kūrėjo įrankį.

14 eilutė uždaro naršyklę.

Paleiskite „Python“ scenarijų ex01.py taip:

$ python3 ex01.py

Kaip matote, laiko žymos duomenys spausdinami ekrane.

Čia aš naudojau browser.find_element_by_xpath (parinkiklis) metodas. Vienintelis šio metodo parametras yra selektorius, kuris yra elemento „XPath“ parinkiklis.

Vietoj browser.find_element_by_xpath () metodą, taip pat galite naudoti browser.find_element (Iki, selektorius) metodas. Šiam metodui reikia dviejų parametrų. Pirmasis parametras Iki bus Iki. XPATH kaip mes naudosime „XPath“ parinkiklį ir antrąjį parametrą selektorius bus pats „XPath“ parinkiklis. Rezultatas bus tas pats.

Norėdami pamatyti, kaip browser.find_element () metodas tinka „XPath“ parinkikliui, sukurkite naują „Python“ scenarijų ex02.py , nukopijuokite ir įklijuokite visas eilutes iš ex01.py į ex02.py ir keistis 12 eilutė kaip pažymėta žemiau esančioje ekrano kopijoje.

Kaip matote, „Python“ scenarijus ex02.py duoda tą patį rezultatą kaip ex01.py .

$ python3 ex02.py

The browser.find_element_by_xpath () ir browser.find_element () metodai naudojami norint surasti ir pasirinkti vieną elementą iš tinklalapių. Jei norite rasti ir pasirinkti kelis elementus naudodami „XPath“ parinkiklius, turite naudoti browser.find_elements_by_xpath () arba browser.find_elements () metodus.

The browser.find_elements_by_xpath () metodas turi tą patį argumentą kaip ir browser.find_element_by_xpath () metodas.

The browser.find_elements () metodas turi tuos pačius argumentus kaip ir browser.find_element () metodas.

Pažiūrėkime, kaip išgauti vardų sąrašą naudojant „XPath“ parinkiklį iš atsitiktinis-pavadinimas-generator.info su seleno „Python“ biblioteka.

Netvarkingas sąrašas ( mirti žyma) turi 10 prie kiekvienos žymos, kuriose yra atsitiktinis pavadinimas. XPath pasirinkti visus prie žymės viduje mirti žyma šiuo atveju yra //*[@id = main]/div [3]/div [2]/ol // li

Pažvelkime į kelių elementų pasirinkimo iš tinklalapio pavyzdį naudojant „XPath“ parinkiklius.

Sukurkite naują „Python“ scenarijų ex03.py ir įveskite šias kodų eilutes.

nuoselenasimportasinterneto tvarkyklę
nuoselenas.interneto tvarkyklę.dažnas.raktai importasRaktai
nuoselenas.interneto tvarkyklę.dažnas.pagal importasIki
galimybės=interneto tvarkyklę.„Chrome“ parinktys()
galimybės.be galvos = Tiesa
naršyklė=interneto tvarkyklę.„Chrome“(vykdomasis_ kelias='./drivers/chromedriver',
galimybės=galimybės)
naršyklė.gauti(„http://random-name-generator.info/“)
vardus=naršyklė.find_elements_by_xpath('
//*[@id = 'main']/div [3]/div [2]/ol // li '
)
dėlvardasįvardai:
spausdinti(vardas.tekstas)
naršyklė.Uždaryti()

Baigę išsaugokite ex03.py „Python“ scenarijus.

1-8 eilutė yra tokia pati kaip ex01.py „Python“ scenarijus. Taigi, aš daugiau jų čia neaiškinsiu.

10 eilutė nurodo naršyklei įkelti svetainę random-name-generator.info.

12 eilutėje pasirenkamas vardų sąrašas naudojant browser.find_elements_by_xpath () metodas. Šis metodas naudoja XPath selektorių //*[@id = main]/div [3]/div [2]/ol // li rasti vardų sąrašą. Tada vardų sąrašas saugomas vardus kintamasis.

13 ir 14 eilutėse, a dėl kilpa naudojama iteracijai per vardus sąrašą ir atspausdinti pavadinimus konsolėje.

16 eilutė uždaro naršyklę.

Paleiskite „Python“ scenarijų ex03.py taip:

$ python3 ex03.py

Kaip matote, vardai išgaunami iš tinklalapio ir spausdinami konsolėje.

Užuot naudoję browser.find_elements_by_xpath () metodą, taip pat galite naudoti browser.find_elements () metodas kaip ir anksčiau. Pirmasis šio metodo argumentas yra XPATH, o antrasis argumentas yra XPath parinkiklis.

Norėdami eksperimentuoti su browser.find_elements () metodą, sukurkite naują „Python“ scenarijų ex04.py , nukopijuokite visus kodus iš ex03.py į ex04.py ir pakeiskite 12 eilutę, kaip pažymėta žemiau esančioje ekrano kopijoje.

Turėtumėte gauti tą patį rezultatą kaip ir anksčiau.

$ python3 ex04.py

„XPath Selector“ pagrindai:

„Firefox“ arba „Google Chrome“ žiniatinklio naršyklės kūrėjo įrankis automatiškai generuoja „XPath“ parinkiklį. Tačiau šių XPath parinkiklių kartais nepakanka jūsų projektui. Tokiu atveju turite žinoti, ką tam tikras XPath selektorius daro, kad sukurtų XPath selektorių. Šiame skyriuje aš jums parodysiu „XPath“ parinkiklių pagrindus. Tada turėtumėte turėti galimybę sukurti savo „XPath“ parinkiklį.

Sukurkite naują katalogą www/ savo projektų kataloge taip:

$mkdir -vwww

Sukurkite naują failą web01.html viduje konors www/ katalogą ir įveskite šias to failo eilutes.


< html lang='įjungtas'>
< galva >
< meta simbolių rinkinys=„UTF-8“>
< meta vardas='peržiūros sritis' turinys='plotis = įrenginio plotis, pradinė skalė = 1,0'>
< titulas >Pagrindinis HTML dokumentas</ titulas >
</ galva >
< kūnas >
< h1 >Labas pasauli</ h1 >
</ kūnas >
</ html >

Baigę išsaugokite web01.html failą.

Paleiskite paprastą HTTP serverį 8080 prievade naudodami šią komandą:

$ python3 -m http.serveris-katalogas www/8080

Turėtų būti paleistas HTTP serveris.

Turėtumėte turėti prieigą prie web01.html failą naudojant URL http: // localhost: 8080/web01.html , kaip matote žemiau esančioje ekrano kopijoje.

Kai atidaromas „Firefox“ arba „Chrome“ kūrėjo įrankis, paspauskite + F norėdami atidaryti paieškos laukelį. Čia galite įvesti „XPath“ parinkiklį ir pamatyti, ką jis labai lengvai pasirenka. Aš naudosiu šį įrankį šiame skyriuje.

XPath parinkiklis prasideda nuo brūkšnys į priekį (/) daugiausia laiko. Tai tarsi „Linux“ katalogų medis. The / yra visų tinklalapio elementų šaknis.

Pirmasis elementas yra html . Taigi, XPath parinkiklis /html parenka visą html žyma.

Viduje html žyma, mes turime kūnas žyma. The kūnas žymą galima pasirinkti naudojant XPath selektorių /html/body

The h1 antraštė yra viduje kūnas žyma. The h1 antraštę galima pasirinkti naudojant XPath selektorių /html/body/h1

Šis XPath selektoriaus tipas vadinamas absoliučiu kelio parinkikliu. Absoliučiame kelio parinkiklyje turite pereiti tinklalapį iš puslapio šaknies (/). Absoliutaus kelio parinkiklio trūkumas yra tas, kad net šiek tiek pakeitus tinklalapio struktūrą jūsų XPath parinkiklis gali būti netinkamas. Šios problemos sprendimas yra santykinis arba dalinis XPath parinkiklis.

Norėdami pamatyti, kaip veikia santykinis arba dalinis kelias, sukurkite naują failą web02.html viduje konors www/ katalogą ir įveskite šias kodų eilutes.


< html lang='įjungtas'>
< galva >
< meta simbolių rinkinys=„UTF-8“>
< meta vardas='peržiūros sritis' turinys='plotis = įrenginio plotis, pradinė skalė = 1,0'>
< titulas >Pagrindinis HTML dokumentas</ titulas >
</ galva >
< kūnas >
< h1 >Labas pasauli</ h1 >

< div >
< p >tai yra pranešimas</ p >
</ div >

< div >
< span >Labas pasauli</ span >
</ div >
</ kūnas >
</ html >

Baigę išsaugokite web02.html failą ir įkelkite jį į savo interneto naršyklę.

Kaip matote, „XPath“ parinkiklis // div/p pasirenka p žyma viduje div žyma. Tai yra santykinio XPath parinkiklio pavyzdys.

Santykinis XPath parinkiklis prasideda // . Tada nurodote norimo pasirinkti elemento struktūrą. Tokiu atveju, div/p .

Taigi, // div/p reiškia pasirinkti p elementas viduje a div elementas, nesvarbu, kas bus prieš tai.

Taip pat galite pasirinkti elementus pagal skirtingus atributus, pvz id , klasė , tipas, ir tt naudojant XPath selektorių. Pažiūrėkime, kaip tai padaryti.

Sukurkite naują failą web03.html viduje konors www/ katalogą ir įveskite šias kodų eilutes.


< html lang='įjungtas'>
< galva >
< meta simbolių rinkinys=„UTF-8“>
< meta vardas='peržiūros sritis' turinys='plotis = įrenginio plotis, pradinė skalė = 1,0'>
< titulas > Pagrindinis HTML dokumentas</ titulas >
</ galva >
< kūnas >
< h1 > Sveikas pasauli</ h1 >
< div klasė='konteineris1'>
< p > tai žinutė</ p >
< span > tai dar viena žinutė</ span >
</ div >
< div klasė='konteineris1'>
< h2 > antraštė2</ h2 >
< p > Kaikurie žmonės
protinga rinktis skausmus, bėdas, tuos, kurie nepatenka į išrinktąjį
lengvi skrydžiai ar kitos puikios paslaugos? Iš kur ar iš kur jis gimė?</ p >
</ div >

< span id='poraštė-žinutė'> tai yra poraštė</ span >
</poraštė>
</ kūnas >
</ html >

Baigę išsaugokite web03.html failą ir įkelkite jį į savo interneto naršyklę.

Tarkime, kad norite pasirinkti visus div elementai, turintys klasė vardas konteineris 1 . Norėdami tai padaryti, galite naudoti „XPath“ parinkiklį // div [@class = ’container1 ′]

Kaip matote, turiu 2 elementus, atitinkančius „XPath“ parinkiklį // div [@class = ’container1 ′]

Norėdami pasirinkti pirmąjį div elementas su klasė vardas konteineris 1 , papildyti [1] „XPath“ pabaigoje pasirinkite, kaip parodyta žemiau esančioje ekrano kopijoje.

Tuo pačiu būdu galite pasirinkti antrą div elementas su klasė vardas konteineris 1 naudojant XPath selektorių // div [@class = ’container1 ′] [2]

Galite pasirinkti elementus pagal id taip pat.

Pavyzdžiui, pasirinkite elementą, kuris turi id apie poraštė-žinutė , galite naudoti „XPath“ parinkiklį //*[@id = ’footer-msg’]

Čia, * anksčiau [@id = ’footer-msg’] naudojamas bet kuriam elementui pasirinkti, neatsižvelgiant į jų žymą.

Tai yra XPath selektoriaus pagrindai. Dabar turėtumėte turėti galimybę sukurti savo XPath selektorių savo seleno projektams.

Išvada:

Šiame straipsnyje aš jums parodžiau, kaip rasti ir pasirinkti elementus iš tinklalapių naudojant „XPath“ parinkiklį su „Selenium Python“ biblioteka. Taip pat aptariau dažniausiai naudojamus XPath parinkiklius. Perskaitę šį straipsnį, turėtumėte jaustis gana užtikrintai pasirinkdami elementus iš tinklalapių naudodami „XPath“ parinkiklį su „Selenium Python“ biblioteka.