Hvordan finne element etter tekst med selen

Hvordan finne element etter tekst med selen
Å finne og velge elementer fra websiden er nøkkelen til skraping av nettet med Selenium. Du kan velge elementer ved hjelp av et tagnavn, ID, klassenavn, XPath -velger, CSS -velger osv. i selen. Du kan også velge elementer som har en spesifikk tekst med selen. Dette er nyttig for å velge lenker og knapper fra websiden enkelt. Selv om sidestrukturen endres, så lenge teksten til websideelementet forblir den samme, skal velgeren din fungere helt fint. Dette er fordelen med å velge lenker og knapper ved hjelp av tekst i selen.

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

Forutsetninger:

For å prøve ut 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 din.
  4. Python Virtualenv pakke 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. Sørg for å sjekke dem ut hvis du trenger hjelp.

Sette opp en prosjektkatalog:

For å holde alt organisert, opprette en ny prosjektkatalog selen-text-select/ følgende:

$ mkdir -pv selen-text-select/drivere

Naviger til selen-text-select/ Prosjektkatalog som følger:

$ CD Selenium-text-Select/

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

$ virtualenv .Venv

Aktiver det virtuelle miljøet som følger:

$ kilde .Venv/bin/aktiverer

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

$ pip3 installer selen

Last ned og installer all nødvendig nettdriver i drivere/ Katalogen til prosjektet. Jeg har forklart prosessen med å laste ned og installere nettdrivere i artikkelen min Introduksjon til selen i Python 3.

Finne elementer etter tekst:

I dette avsnittet skal jeg vise deg noen eksempler på å finne og velge elementer i websiden etter tekst med Selenium Python Library.

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

På påloggingssiden på Facebook.com, vi har 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 koder i den.

Fra Selenium Import WebDriver
fra Selenium.Webdriver.felles.nøkler importerer nøkler
fra Selenium.Webdriver.felles.ved import av
Fra tid importer søvn
nettleser = webdriver.Krom (kjørbar_path = "./Drivere/Chromedriver ")
nettleser.få ("https: // www.Facebook.com/")
GLEMTACCOUNTLINK = nettleser.find_element (av.XPath, "Post-66569 -_hlk47727696">
//*[text () = 'glemt konto?'] ")
glemteaccountlink.send_keys (nøkler.TAST INN)

Når du er ferdig, kan du lagre EX01.py Python -manus.

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

Linje 6 skaper et krom nettleser objekt ved å bruke Chromedriver binær fra drivere/ Katalogen til prosjektet.

Linje 8 ber nettleseren om å laste inn nettstedet Facebook.com.

Linje 10 finner lenken som har teksten Glemt konto? Ved hjelp av XPath -velgeren. For 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 (en eller p eller spenn, etc.) som samsvarer med tilstanden i firkantede parenteser []. Her er tilstanden, elementteksten er lik Glemt konto?

De tekst() XPath -funksjon brukes til å få teksten til et element.

For eksempel, tekst() Returnerer Hei Verden Hvis det velger følgende HTML -element.

Hei Verden

Linje 11 sender tastetrykk til Glemt konto? Lenke.

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

$ Python EX01.py

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

De Glemt konto? Koblingen tar nettleseren til følgende side.

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

Her, The Logg Inn knappen er en inngang 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 koder i den.

Fra Selenium Import WebDriver
fra Selenium.Webdriver.felles.nøkler importerer nøkler
fra Selenium.Webdriver.felles.ved import av
Fra tid importer søvn
nettleser = webdriver.Krom (kjørbar_path = "./Drivere/Chromedriver ")
nettleser.få ("https: // www.Facebook.com/")
søvn (5)
E -postInput = nettleser.find_element (av.Xpath, "// input [@id = 'e -post']")
PasswordInput = nettleser.find_element (av.Xpath, "// input [@id = 'pass']")
LoginButton = nettleser.find_element (av.Xpath, "//*[@value = 'log in']")
e -post.send_keys ('dummy@e -post.com ')
søvn (5)
PasswordInput.Send_Keys ('Secret-Pass')
søvn (5)
Loginbutton.send_keys (nøkler.TAST INN)

Når du er ferdig, kan du lagre EX02.py Python -manus.

Linje 1-4 importerer alle nødvendige komponenter.

Linje 6 skaper et krom nettleser objekt ved å bruke Chromedriver binær fra drivere/ Katalogen til prosjektet.

Linje 8 ber nettleseren om å laste inn nettstedet Facebook.com.

Alt skjer så raskt når du kjører skriptet. Så jeg har brukt sove() Funksjon mange ganger i EX02.py For å utsette nettleserkommandoer. På denne måten kan du observere hvordan alt fungerer.

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

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

Linje 13 finner inngangselementet som har attributtet verdi av Logg Inn ved hjelp av XPath -velgeren. For det har jeg brukt XPath -velgeren //*[@verdi = '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 (inngang eller p eller spenn, etc.) som samsvarer med tilstanden i firkantede parenteser []. Her er tilstanden, elementattributtet verdi er lik Logg Inn.

Linje 15 sender inndata -dummy@e -post.com til tekstboksen E -postinngangen, og linje 16 forsinker neste operasjon.

Linje 18 sender inngangshemmeligpasset til tekstboksen for passordinngang, og linje 19 forsvinner neste operasjon.

Linje 21 sender Tast Trykk på påloggingsknappen.

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

$ Python3 EX02.py

Som du kan se, er tekstboksen e -post og passord fylt med dummyverdiene våre, og Logg Inn Knappen trykkes.

Så navigerer siden til følgende side.

Finne elementer etter delvis tekst:

I den tidligere delen har jeg vist deg hvordan du finner elementer ved 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 koblingselementet som har teksten Glemt konto?. Du kan søke på det samme koblingselementet ved å bruke delvis tekst som for eksempel Glemt akk. 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 vil være de samme.

I linje 10 av EX03.py, utvelgelsesbetingelsen brukte inneholder (kilde, tekst) Xpath -funksjon. Denne funksjonen tar to argumenter, kilde, og tekst.

De inneholder () Funksjonen sjekker om tekst gitt i det andre argumentet samsvarer delvis kilde Verdi i det første argumentet.

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

I EX03.py, Teksten til elementet er sjekket.

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 å 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 EX02 og EX03.py.

Jeg har også skrevet om EX02.py slik at det søker etter inngangselementet som verdi Attributt starter med Logg, Som du kan se på linje 13 av EX05.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 Library. Nå skal du kunne finne elementer fra websider med spesifikk tekst eller delvis tekst med Selenium Python Library.