Element voor tekst zoeken met selenium

How Find Element Text With Selenium



Het lokaliseren en selecteren van elementen van de webpagina is de sleutel tot webscraping met Selenium. U kunt elementen selecteren met behulp van een tagnaam, ID, klassenaam, XPath-selector, CSS-selector, enz. in Selenium. Met Selenium kunt u ook elementen selecteren die een specifieke tekst hebben. Dit is handig om eenvoudig links en knoppen op de webpagina te selecteren. Zelfs als de paginastructuur verandert, zolang de tekst van het webpagina-element hetzelfde blijft, zou je selector prima moeten werken. Dit is het voordeel van het selecteren van links en knoppen met tekst in Selenium.

In dit artikel laat ik je zien hoe je elementen van webpagina's kunt lokaliseren en selecteren met tekst in Selenium met de Selenium-pythonbibliotheek. Dus laten we beginnen.







Vereisten:

Om de opdrachten en voorbeelden van dit artikel uit te proberen, moet u beschikken over:



  1. Een Linux-distributie (bij voorkeur Ubuntu) die op uw computer is geïnstalleerd.
  2. Python 3 geïnstalleerd op uw computer.
  3. PIP 3 geïnstalleerd op uw computer.
  4. Python virtueel pakket geïnstalleerd op uw computer.
  5. Mozilla Firefox- of Google Chrome-webbrowsers op uw computer geïnstalleerd.
  6. Moet weten hoe de Firefox Gecko Driver of Chrome Web Driver te installeren.

Lees mijn artikel om aan de vereisten 4, 5 en 6 te voldoen Inleiding tot selenium in Python 3 .



U kunt veel artikelen over de andere onderwerpen vinden op LinuxHint.com . Zorg ervoor dat je ze bekijkt als je hulp nodig hebt.





Een projectmap opzetten:

Maak een nieuwe projectdirectory om alles overzichtelijk te houden selenium-tekst-select/ als volgt:

$mkdir -pvselenium-tekst-select/chauffeurs



Navigeer naar de selenium-tekst-select/ projectmap als volgt:

$CDselenium-tekst-select/

Maak als volgt een virtuele Python-omgeving in de projectdirectory:

$virtualenv .venv

Activeer de virtuele omgeving als volgt:

$bron.venv/ben/activeren

Installeer de Selenium Python-bibliotheek als volgt met PIP3:

$ pip3 installeer selenium

Download en installeer alle vereiste webstuurprogramma's in de chauffeurs/ map van het project. Ik heb het proces van het downloaden en installeren van webstuurprogramma's in mijn artikel uitgelegd Inleiding tot selenium in Python 3 .

Elementen zoeken op tekst:

In dit gedeelte laat ik u enkele voorbeelden zien van het zoeken en selecteren van webpagina-elementen op tekst met de Selenium Python-bibliotheek.

Ik ga beginnen met het eenvoudigste voorbeeld van het selecteren van webpagina-elementen op tekst, het selecteren van links op de webpagina.

Op de inlogpagina van facebook.com hebben we een link Rekening vergeten? Zoals je kunt zien in de onderstaande schermafbeelding. Laten we deze link selecteren met Selenium.

Een nieuw Python-script maken ex01.py en typ de volgende regels codes erin.

vanseleniumimporterenwebstuurprogramma
vanselenium.webstuurprogramma.gemeenschappelijk.sleutels importerenSleutels
vanselenium.webstuurprogramma.gemeenschappelijk.door importerenDoor
van tijd importerenslaap
browser=webstuurprogramma.Chroom(uitvoerbaar_pad='./drivers/chromedriver')
browser.krijgen('https://www.facebook.com/')
accountLink vergeten=browser.find_element(Door.XPATH, '
//*[text()='Account vergeten?']'
)
AccountLink vergeten.send_keys(Sleutels.BINNENKOMEN)

Als u klaar bent, slaat u de ex01.py Python-script.

Regel 1-4 importeert alle vereiste componenten in het Python-programma.

Lijn 6 maakt een Chrome browser object met behulp van de chromedriver binair van de chauffeurs/ map van het project.

Regel 8 vertelt de browser om de website facebook.com te laden.

Regel 10 vindt de link met de tekst Rekening vergeten? XPath-selector gebruiken. Daarvoor heb ik de XPath-selector gebruikt //*[text()='Account vergeten?'] .

De XPath-selector begint met //, wat betekent dat het element overal op de pagina kan staan. De * symbool vertelt Selenium om een ​​tag te selecteren ( tot of P of span, etc.) die overeenkomt met de voorwaarde tussen de vierkante haken [] . Hier is de voorwaarde dat de elementtekst gelijk is aan de Rekening vergeten?

De tekst() De XPath-functie wordt gebruikt om de tekst van een element te krijgen.

Bijvoorbeeld, tekst() geeft terug Hallo Wereld als het het volgende HTML-element selecteert.

< tot href='http://dummysite.com'>Hallo Wereld</ tot >

Lijn 11 stuurt de toets indrukken om de Rekening vergeten? Koppeling.

Voer het Python-script uit ex01.py met het volgende commando:

$ python ex01.py

Zoals u kunt zien, vindt, selecteert en drukt de webbrowser op de sleutel op de Rekening vergeten? Koppeling.

De Rekening vergeten? De link brengt de browser naar de volgende pagina.

Op dezelfde manier kunt u eenvoudig zoeken naar elementen die uw gewenste attribuutwaarde hebben.

Hier de Log in knop is een invoer element dat de heeft waarde attribuut Log in . Laten we eens kijken hoe we dit element op tekst kunnen selecteren.

Een nieuw Python-script maken ex02.py en typ de volgende regels codes erin.

vanseleniumimporterenwebstuurprogramma
vanselenium.webstuurprogramma.gemeenschappelijk.sleutels importerenSleutels
vanselenium.webstuurprogramma.gemeenschappelijk.door importerenDoor
van tijd importerenslaap
browser=webstuurprogramma.Chroom(uitvoerbaar_pad='./drivers/chromedriver')
browser.krijgen('https://www.facebook.com/')
slaap(5)
e-mailinvoer=browser.find_element(Door.XPATH, '//invoer[@id='e-mail']')
wachtwoordInvoer=browser.find_element(Door.XPATH, '//invoer[@id='pass']')
loginKnop=browser.find_element(Door.XPATH, '//*[@value='Inloggen']')
e-mailInvoer.send_keys(' [e-mail beveiligd]')
slaap(5)
wachtwoordInvoer.send_keys('geheime pas')
slaap(5)
loginKnop.send_keys(Sleutels.BINNENKOMEN)

Als u klaar bent, slaat u de ex02.py Python-script.

Regel 1-4 importeert alle vereiste componenten.

Lijn 6 maakt een Chrome browser object met behulp van de chromedriver binair van de chauffeurs/ map van het project.

Regel 8 vertelt de browser om de website facebook.com te laden.

Alles gebeurt zo snel als je het script eenmaal hebt uitgevoerd. Dus ik heb de gebruikt slaap() functie vele malen in ex02.py voor het uitstellen van browseropdrachten. Zo kun je zien hoe alles werkt.

Regel 11 vindt het e-mailinvoertekstvak en slaat een verwijzing van het element op in de e-mailinvoer variabel.

Regel 12 vindt het e-mailinvoertekstvak en slaat een verwijzing van het element op in de e-mailinvoer variabel.

Regel 13 vindt het invoerelement met het attribuut waarde van Log in XPath-selector gebruiken. Daarvoor heb ik de XPath-selector gebruikt //*[@value=’Inloggen’] .

De XPath-selector begint met // . Het betekent dat het element overal op de pagina kan staan. De * symbool vertelt Selenium om een ​​tag te selecteren ( invoer of P of span, etc.) die overeenkomt met de voorwaarde tussen de vierkante haken [] . Hier is de voorwaarde, het elementattribuut waarde is gelijk aan Log in .

Lijn 15 verzendt de invoer[e-mail beveiligd]naar het e-mailinvoertekstvak en regel 16 vertraagt ​​de volgende bewerking.

Regel 18 stuurt de invoergeheime pas naar het invoertekstvak voor het wachtwoord, en regel 19 vertraagt ​​de volgende bewerking.

Lijn 21 stuurt de druk op de toets voor de login-knop.

Voer de ... uit ex02.py Python-script met het volgende commando:

$python3 ex02.py

Zoals u kunt zien, zijn de tekstvakken voor e-mail en wachtwoord gevuld met onze dummy-waarden en de Log in knop wordt ingedrukt.

Vervolgens navigeert de pagina naar de volgende pagina.

Elementen zoeken op gedeeltelijke tekst:

In het eerdere gedeelte heb ik u laten zien hoe u elementen kunt vinden op specifieke tekst. In dit gedeelte laat ik u zien hoe u elementen van webpagina's kunt vinden met behulp van gedeeltelijke tekst.

In het voorbeeld, ex01.py , ik heb gezocht naar het link-element met de tekst Rekening vergeten? . U kunt hetzelfde linkelement doorzoeken met gedeeltelijke tekst zoals acc vergeten . Om dat te doen, kunt u de bevat() XPath-functie, zoals weergegeven in regel 10 van ex03.py . De rest van de codes zijn hetzelfde als in ex01.py . De resultaten zullen hetzelfde zijn.

In lijn 10 van ex03.py , de selectievoorwaarde gebruikte de bevat (bron, tekst) XPath-functie. Deze functie heeft 2 argumenten, bron, en tekst .

De bevat() functie controleert of de tekst gegeven in het tweede argument komt gedeeltelijk overeen met de bron waarde in het eerste argument.

De bron kan de tekst van het element zijn ( tekst() ) of de attribuutwaarde van het element ( @attr_name ).

In ex03.py , wordt de tekst van het element gecontroleerd.

Een andere handige XPath-functie om elementen van de webpagina te vinden met behulp van gedeeltelijke tekst is: begint-met(bron, tekst) . Deze functie heeft dezelfde argumenten als de bevat() functie en wordt op dezelfde manier gebruikt. Het enige verschil is dat de begint met() functie controleert of het tweede argument tekst is de startreeks van het eerste argument bron .

Ik heb het voorbeeld herschreven ex03.py om te zoeken naar het element waar de tekst mee begint vergeten, zoals je kunt zien in regel 10 van ex04.py . Het resultaat is hetzelfde als in ex02 en ex03.py .

Ik heb ook herschreven ex02.py zodat het zoekt naar het invoerelement waarvoor de waarde attribuut begint met logboek, zoals je kunt zien in regel 13 van ex05.py . Het resultaat is hetzelfde als in ex02.py .

Conclusie:

In dit artikel heb ik je laten zien hoe je elementen van webpagina's kunt vinden en selecteren op tekst met de Selenium Python-bibliotheek. Nu zou je in staat moeten zijn om elementen van webpagina's te vinden op specifieke tekst of gedeeltelijke tekst met de Selenium Python-bibliotheek.