Hvordan finne element etter tekst med selen

How Find Element Text With Selenium



Å finne og velge elementer fra nettsiden er nøkkelen til nettskraping med Selenium. Du kan velge elementer ved hjelp av et tagnavn, ID, klassenavn, XPath -velger, CSS -velger, etc. i Selenium. Du kan også velge elementer som har en bestemt tekst med Selenium. Dette er nyttig for enkelt å velge lenker og knapper fra websiden. Selv om sidestrukturen endres, så lenge teksten til nettsideelementet forblir den samme, bør velgeren din fungere helt fint. Dette er fordelen med å velge lenker og knapper ved hjelp av tekst i Selenium.

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







Forutsetninger:

For å prøve kommandoene og eksemplene på 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.
  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 temaene på LinuxHint.com . Husk å sjekke dem hvis du trenger hjelp.





Sette opp en prosjektkatalog:

For å holde alt organisert, opprett en ny prosjektkatalog selen-tekst-velg/ følgende:

$mkdir -pvselen-tekst-velg/sjåfører



Naviger til selen-tekst-velg/ prosjektkatalog som følger:

$CDselen-tekst-velg/

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

$virtualenv .venv

Aktiver det virtuelle miljøet som følger:

$kilde.venv/er/aktivere

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

$ pip3 installer selen

Last ned og installer all nødvendig webdriver i sjåfører/ katalog over prosjektet. Jeg har forklart prosessen med å laste ned og installere webdrivere i artikkelen min Introduksjon til selen i Python 3 .

Finne elementer etter tekst:

I denne delen skal jeg vise deg noen eksempler på hvordan du kan finne og velge websideelementer etter tekst med Selenium Python -biblioteket.

Jeg skal begynne med det enkleste eksempelet på å velge websideelementer etter tekst, velge lenker fra websiden.

På påloggingssiden til facebook.com har vi en lenke Glemt konto? Som du kan se på skjermbildet nedenfor. La oss velge denne lenken med Selenium.

Lag et nytt Python -skript ex01.py og skriv inn følgende koderader.

fraselenimportwebdriver
fraselen.webdriver.felles.nøkler importNøkler
fraselen.webdriver.felles.av importAv
fra tid importsøvn
nettleser=webdriver.Chrome(kjørbar_bane='./drivers/chromedriver')
nettleser.('https://www.facebook.com/')
forgotAccountLink=nettleser.finn_element(Av.XPATH, '
//*[text () = 'Glemt konto?'] '
)
forgotAccountLink.send_key(Nøkler.TAST INN)

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

Linje 1-4 importerer alle nødvendige komponenter til Python-programmet.

Linje 6 lager en Chrome nettleser objektet ved hjelp av chromedriver binær fra sjåfører/ katalog over prosjektet.

Linje 8 forteller nettleseren å laste inn nettstedet facebook.com.

Linje 10 finner lenken som har teksten Glemt konto? Bruker XPath -velgeren. Til det har jeg brukt XPath -velgeren //*[text () = ‘Glemt konto?’] .

XPath -velgeren starter med //, noe som betyr at elementet kan være hvor som helst på siden. De * symbolet forteller Selenium å velge hvilken som helst tag ( til eller s eller spenn, etc.) som samsvarer med tilstanden inne i firkantede parenteser [] . Her er betingelsen at elementteksten er lik Glemt konto?

De tekst() XPath -funksjonen brukes til å hente teksten til et element.

For eksempel, tekst() returnerer Hei Verden hvis den velger følgende HTML -element.

< til href='http://dummysite.com'>Hei Verden</ til >

Linje 11 sender tastetrykk for å Glemt konto? Lenke.

Kjør Python -skriptet ex01.py med følgende kommando:

$ python ex01.py

Som du kan se, finner, velger og trykker nettleseren på nøkkelen på Glemt konto? Lenke.

De Glemt konto? Koblingen tar nettleseren til neste side.

På samme måte kan du enkelt søke etter elementer som har ønsket attributtverdi.

Her, den Logg Inn knappen er en input element som har verdi Egenskap Logg Inn . La oss se hvordan du velger dette elementet etter tekst.

Lag et nytt Python -skript ex02.py og skriv inn følgende koderader.

fraselenimportwebdriver
fraselen.webdriver.felles.nøkler importNøkler
fraselen.webdriver.felles.av importAv
fra tid importsøvn
nettleser=webdriver.Chrome(kjørbar_bane='./drivers/chromedriver')
nettleser.('https://www.facebook.com/')
søvn(5)
emailInput=nettleser.finn_element(Av.XPATH, '// input [@id =' email ']')
passwordInput=nettleser.finn_element(Av.XPATH, '// input [@id =' pass ']')
innloggingsknapp=nettleser.finn_element(Av.XPATH, '//*[@value =' Logg inn ']')
emailInput.send_key('[e -postbeskyttet]')
søvn(5)
passwordInput.send_key('hemmelig pass')
søvn(5)
innloggingsknapp.send_key(Nøkler.TAST INN)

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

Linje 1-4 importerer alle nødvendige komponenter.

Linje 6 lager en Chrome nettleser objektet ved hjelp av chromedriver binær fra sjåfører/ katalog over prosjektet.

Linje 8 forteller nettleseren å laste inn nettstedet facebook.com.

Alt skjer så fort når du kjører skriptet. Så, jeg har brukt søvn() fungere mange ganger i ex02.py for å forsinke nettleserkommandoer. På denne måten kan du observere hvordan alt fungerer.

Linje 11 finner tekstboksen for e -postinngang og lagrer en referanse til elementet i emailInput variabel.

Linje 12 finner tekstboksen for e -postinngang og lagrer en referanse til elementet i emailInput variabel.

Linje 13 finner inngangselementet som har attributtet verdi av Logg Inn bruker XPath -velgeren. Til det har jeg brukt XPath -velgeren //*[@value = 'Logg inn'] .

XPath -velgeren starter med // . Det betyr at elementet kan være hvor som helst på siden. De * symbolet forteller Selenium å velge hvilken som helst tag ( input eller s eller spenn, etc.) som samsvarer med tilstanden inne i firkantede parenteser [] . Her er betingelsen elementattributtet verdi er lik Logg Inn .

Linje 15 sender inngangen[e -postbeskyttet]til tekstboksen for e -postinndata, og linje 16 forsinker neste operasjon.

Linje 18 sender inngangshemmelig pass til tekstboksen for passordinndata, og linje 19 forsinker neste operasjon.

Linje 21 sender tastetrykk til påloggingsknappen.

Kjør ex02.py Python -skript med følgende kommando:

$ python3 ex02.py

Som du kan se, er tekstboksene for e -post og passord fylt med dummy -verdiene våre og Logg Inn knappen trykkes.

Deretter navigerer siden til neste side.

Finne elementer etter delvis tekst:

I den tidligere delen har jeg vist deg hvordan du finner elementer etter spesifikk tekst. I denne delen skal jeg vise deg hvordan du finner elementer fra websider ved hjelp av delvis tekst.

I eksemplet, ex01.py , Jeg har søkt etter lenkeelementet som har teksten Glemt konto? . Du kan søke i det samme lenkeelementet ved å bruke delvis tekst som f.eks Glemt iht . For å gjøre det, kan du bruke inneholder () XPath -funksjon, som vist på linje 10 av ex03.py . Resten av kodene er de samme som i ex01.py . Resultatene blir de samme.

På linje 10 av ex03.py , valgte betingelsen inneholder (kilde, tekst) XPath -funksjon. Denne funksjonen tar 2 argumenter, kilde, og tekst .

De inneholder () funksjonen sjekker om tekst gitt i det andre argumentet samsvarer delvis med kilde verdi i det første argumentet.

Kilden kan være teksten til elementet ( tekst() ) eller attributtverdien til elementet ( @attr_name ).

I ex03.py , er teksten til elementet merket.

En annen nyttig XPath -funksjon for å finne elementer fra websiden ved hjelp av delvis tekst er starter med (kilde, tekst) . Denne funksjonen har de samme argumentene som inneholder () funksjon og brukes på samme måte. Den eneste forskjellen er at begynner med() funksjonen sjekker om det andre argumentet tekst er startstrengen til det første argumentet kilde .

Jeg har skrevet om eksemplet ex03.py for å søke etter elementet som teksten starter med Glemt, som du kan se på linje 10 av ex04.py . Resultatet er det samme som i eks02 og ex03.py .

Jeg har også skrevet om ex02.py slik at den søker etter inngangselementet som verdi attributtet starter med Logg, som du kan se på linje 13 av eks05.py . Resultatet er det samme som i ex02.py .

Konklusjon:

I denne artikkelen har jeg vist deg hvordan du finner og velger elementer fra websider etter tekst med Selenium Python -biblioteket. Nå bør du kunne finne elementer fra websider etter spesifikk tekst eller delvis tekst med Selenium Python -biblioteket.