Inleiding tot selenium in Python 3

Introduction Selenium Python 3



Selenium is een framework dat wordt gebruikt voor het testen van webapplicaties. Selenium automatiseert een browser, zoals Chrome of Firefox, om tests uit te voeren op uw gewenste website. Selenium is ook een zeer krachtige tool voor webschrapen. Selenium ondersteunt JavaScript en alle moderne browserfuncties. Deze tool is zeer effectief in het extraheren van informatie van websites.

Dit artikel laat je zien hoe je Selenium instelt op je Linux-distributie (d.w.z. Ubuntu), en hoe je basiswebautomatisering en webscraping uitvoert met de Selenium Python 3-bibliotheek.







Vereisten

Om de opdrachten en voorbeelden die in dit artikel worden gebruikt uit te proberen, moet u over het volgende beschikken:



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) De Google Chrome- of Firefox-webbrowser die op uw computer is geïnstalleerd.



U kunt veel artikelen over deze onderwerpen vinden op: LinuxHint.com . Zorg ervoor dat u deze artikelen leest als u meer hulp nodig heeft.





Python 3 virtuele omgeving voorbereiden voor het project

De Python Virtual Environment wordt gebruikt om een ​​geïsoleerde Python-projectdirectory te maken. De Python-modules die u met PIP installeert, worden alleen in de projectdirectory geïnstalleerd in plaats van globaal.

De Python virtueel module wordt gebruikt om virtuele Python-omgevingen te beheren.



U kunt de Python installeren virtueel module wereldwijd met behulp van PIP 3, als volgt:

$ sudo pip3 installeer virtualenv

PIP3 zal alle vereiste modules downloaden en wereldwijd installeren.

Op dit punt, de Python virtueel module moet wereldwijd worden geïnstalleerd.

Maak de projectdirectory python-selenium-basic/ in uw huidige werkmap, als volgt:

$ mkdir -pv python-selenium-basic/drivers

Navigeer naar uw nieuw gemaakte projectdirectory python-selenium-basic/ , als volgt:

$CDpython-selenium-basic/

Maak een virtuele Python-omgeving in uw projectdirectory met de volgende opdracht:

$ virtueel.env

De virtuele Python-omgeving zou nu in uw projectdirectory moeten worden gemaakt.'

Activeer de virtuele Python-omgeving in uw projectdirectory via het volgende commando:

$ bron .benijden/bin/activeren

Zoals u kunt zien, is de virtuele Python-omgeving geactiveerd voor deze projectdirectory.

Selenium Python-bibliotheek installeren

De Selenium Python-bibliotheek is beschikbaar in de officiële Python PyPI-repository.

U kunt deze bibliotheek als volgt installeren met PIP 3:

$ pip3 installeer selenium

De Selenium Python-bibliotheek zou nu moeten worden geïnstalleerd.

Nu de Selenium Python-bibliotheek is geïnstalleerd, is het volgende dat u hoeft te doen een webstuurprogramma voor uw favoriete webbrowser installeren. In dit artikel laat ik u zien hoe u de Firefox- en Chrome-webstuurprogramma's voor Selenium installeert.

Firefox Gecko-stuurprogramma installeren

Met de Firefox Gecko Driver kunt u de Firefox-webbrowser besturen of automatiseren met Selenium.

Om de Firefox Gecko Driver te downloaden, gaat u naar de: GitHub geeft pagina van mozilla/geckodriver vrij vanuit een webbrowser.

Zoals u kunt zien, is v0.26.0 de nieuwste versie van de Firefox Gecko Driver op het moment dat dit artikel werd geschreven.

Om de Firefox Gecko Driver te downloaden, scrolt u een beetje naar beneden en klikt u op het Linux geckodriver tar.gz-archief, afhankelijk van de architectuur van uw besturingssysteem.

Als u een 32-bits besturingssysteem gebruikt, klikt u op de geckodriver-v0.26.0-linux32.tar.gz koppeling.

Als u een 64-bits besturingssysteem gebruikt, klikt u op de geckodriver-v0.26.0-linuxx64.tar.gz koppeling.

In mijn geval zal ik de 64-bits versie van de Firefox Gecko Driver downloaden.

Uw browser zou u moeten vragen om het archief op te slaan. Selecteer Sla bestand op en klik vervolgens op Oke .

Het Firefox Gecko Driver-archief moet worden gedownload in de ~/Downloads map.

Pak de geckodriver-v0.26.0-linux64.tar.gz archief van de ~/Downloads map naar de chauffeurs/ directory van uw project door de volgende opdracht in te voeren:

$teer -xzf~/Downloads/geckodriver-v0.26.0-linux64.tar.gz-Cchauffeurs/

Zodra het Firefox Gecko Driver-archief is uitgepakt, verschijnt een nieuwe gekko bestuurder binair bestand moet worden aangemaakt in de chauffeurs/ directory van uw project, zoals u kunt zien in de onderstaande schermafbeelding.

Selenium Firefox Gecko-stuurprogramma testen

In dit gedeelte laat ik u zien hoe u uw allereerste Selenium Python-script instelt om te testen of de Firefox Gecko Driver werkt.

Open eerst de projectmap python-selenium-basic/ met je favoriete IDE of editor. In dit artikel zal ik Visual Studio Code gebruiken.

Het nieuwe Python-script maken ex01.py en typ de volgende regels in het script.

vanseleniumimporterenwebstuurprogramma
vanselenium.webstuurprogramma.gemeenschappelijk.sleutels importerenSleutels
van tijd importerenslaap
browser=webstuurprogramma.Firefox(uitvoerbaar_pad='./drivers/gekkodriver')
browser.krijgen('http://www.google.com')
slaap(5)
browser.ontslag nemen()

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

Ik zal de code in een later gedeelte van dit artikel uitleggen.

De volgende regel configureert Selenium om de Firefox Gecko Driver te gebruiken vanaf de chauffeurs/ map van uw project.

Om te testen of de Firefox Gecko Driver werkt met Selenium, voer je het volgende uit: ex01.py Python-script:

$python3 ex01.py

De Firefox-webbrowser zou automatisch Google.com moeten bezoeken en zichzelf na 5 seconden moeten sluiten. Als dit gebeurt, werkt de Selenium Firefox Gecko Driver correct.

Chrome Web Driver installeren

Met de Chrome Web Driver kunt u de Google Chrome-webbrowser besturen of automatiseren met Selenium.

U moet dezelfde versie van de Chrome Web Driver downloaden als die van uw Google Chrome-webbrowser.

Om het versienummer van uw Google Chrome-webbrowser te vinden, gaat u naar chrome://instellingen/help in Google Chrome. Het versienummer moet in de staan Over Chrome sectie, zoals u kunt zien in de onderstaande schermafbeelding.

In mijn geval is het versienummer 83.0.4103.116 . De eerste drie delen van het versienummer ( 83.0.4103 , in mijn geval) moet overeenkomen met de eerste drie delen van het versienummer van de Chrome Web Driver.

Om Chrome Web Driver te downloaden, gaat u naar de: officiële Chrome Driver downloadpagina .

In de Huidige releases sectie, zal de Chrome Web Driver voor de meest recente releases van de Google Chrome-webbrowser beschikbaar zijn, zoals u kunt zien in de onderstaande schermafbeelding.

Als de versie van Google Chrome die u gebruikt niet in de Huidige releases sectie, scrol een beetje naar beneden en je zou de gewenste versie moeten vinden.

Zodra u op de juiste Chrome Web Driver-versie klikt, zou u naar de volgende pagina moeten gaan. Klik op de chromedriver_linux64.zip link, zoals aangegeven in de onderstaande schermafbeelding.

Het Chrome Web Driver-archief zou nu moeten worden gedownload.

Het Chrome Web Driver-archief zou nu moeten worden gedownload in de ~/Downloads map.

U kunt de . uitpakken chromedriver-linux64.zip archief van de ~/Downloads map naar de chauffeurs/ directory van uw project met het volgende commando:

$ uitpakken~/Downloads/chromedriver_linux64.zip-d stuurprogramma's/

Nadat het Chrome Web Driver-archief is uitgepakt, verschijnt een nieuwe chromedriver binair bestand moet worden aangemaakt in de chauffeurs/ directory van uw project, zoals u kunt zien in de onderstaande schermafbeelding.

Selenium Chrome-webstuurprogramma testen

In dit gedeelte laat ik u zien hoe u uw allereerste Selenium Python-script instelt om te testen of de Chrome Web Driver werkt.

Maak eerst het nieuwe Python-script ex02.py en typ de volgende coderegels in het script.

vanseleniumimporterenwebstuurprogramma
vanselenium.webstuurprogramma.gemeenschappelijk.sleutels importerenSleutels
van tijd importerenslaap
browser=webstuurprogramma.Chroom(uitvoerbaar_pad='./drivers/chromedriver')
browser.krijgen('http://www.google.com')
slaap(5)
browser.ontslag nemen()

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

Ik zal de code in een later gedeelte van dit artikel uitleggen.

De volgende regel configureert Selenium om de Chrome Web Driver te gebruiken van de chauffeurs/ map van uw project.

Om te testen of de Chrome Web Driver werkt met Selenium, voert u de ex02.py Python-script, als volgt:

$python3 ex01.py

De Google Chrome-webbrowser zou automatisch Google.com moeten bezoeken en zichzelf na 5 seconden moeten sluiten. Als dit gebeurt, werkt de Selenium Firefox Gecko Driver correct.

Basisprincipes van webscraping met selenium

Ik zal vanaf nu de Firefox-webbrowser gebruiken. U kunt ook Chrome gebruiken, als u dat wilt.

Een basis Selenium Python-script zou eruit moeten zien als het script dat wordt getoond in de onderstaande schermafbeelding.

Importeer eerst het selenium webstuurprogramma van de selenium module.

Importeer vervolgens de Sleutels van selenium.webdriver.common.keys . Dit zal u helpen bij het verzenden van toetsaanslagen op het toetsenbord naar de browser die u automatiseert vanuit Selenium.

De volgende regel creëert een browser object voor de Firefox-webbrowser met behulp van de Firefox Gecko Driver (Webdriver). Met dit object kunt u de browseracties van Firefox besturen.

Om een ​​website of URL te laden (ik zal de website laden) https://www.duckduckgo.com ), bel de krijgen() methode van de browser object in uw Firefox-browser.

Met Selenium kunt u uw tests schrijven, webscraping uitvoeren en ten slotte de browser sluiten met de ontslag nemen() methode van de browser object.

Hierboven ziet u de basislay-out van een Selenium Python-script. Je gaat deze regels in al je Selenium Python-scripts schrijven.

Voorbeeld 1: De titel van een webpagina afdrukken

Dit is het gemakkelijkste voorbeeld dat wordt besproken met Selenium. In dit voorbeeld drukken we de titel af van de webpagina die we gaan bezoeken.

Maak het nieuwe bestand ex04.py en typ de volgende regels codes erin.

vanseleniumimporterenwebstuurprogramma
vanselenium.webstuurprogramma.gemeenschappelijk.sleutels importerenSleutels

browser=webstuurprogramma.Firefox(uitvoerbaar_pad='./drivers/gekkodriver')

browser.krijgen('https://www.duckduckgo.com')
afdrukken('Titel: %s'% browser.titel)
browser.ontslag nemen()

Als u klaar bent, slaat u het bestand op.

Hier de browser.titel wordt gebruikt om toegang te krijgen tot de titel van de bezochte webpagina en de afdrukken() functie wordt gebruikt om de titel in de console af te drukken.

Na het uitvoeren van de ex04.py script, moet het:

1) Open Firefox
2) Laad uw gewenste webpagina
3) Haal de titel van de pagina op
4) Druk de titel af op de console
5) En tot slot, sluit de browser

Zoals je kunt zien, is de ex04.py script heeft de titel van de webpagina netjes in de console afgedrukt.

$python3 ex04.py

Voorbeeld 2: De titels van meerdere webpagina's afdrukken

Net als in het vorige voorbeeld, kunt u dezelfde methode gebruiken om de titel van meerdere webpagina's af te drukken met behulp van de Python-lus.

Maak het nieuwe Python-script om te begrijpen hoe dit werkt ex05.py en typ de volgende regels code in het script:

vanseleniumimporterenwebstuurprogramma
vanselenium.webstuurprogramma.gemeenschappelijk.sleutels importerenSleutels

browser=webstuurprogramma.Firefox(uitvoerbaar_pad='./drivers/gekkodriver')


URL's= ['https://www.duckduckgo.com', 'https://linuxhint.com', 'https://yahoo.com']
voorurlinURL's:
browser.krijgen(url)
afdrukken('Titel: %s'% browser.titel)
browser.ontslag nemen()

Als u klaar bent, slaat u het Python-script op ex05.py .

Hier de URL's list houdt de URL van elke webpagina bij.

TOT voor lus wordt gebruikt om door de te itereren URL's lijst items.

Bij elke iteratie vertelt Selenium de browser om de url en krijg de titel van de webpagina. Zodra Selenium de titel van de webpagina heeft geëxtraheerd, wordt deze afgedrukt in de console.

Voer het Python-script uit ex05.py , en u zou de titel van elke webpagina moeten zien in de URL's lijst.

$ python3 ex05.py

Dit is een voorbeeld van hoe Selenium dezelfde taak kan uitvoeren met meerdere webpagina's of websites.

Voorbeeld 3: Gegevens van een webpagina extraheren

In dit voorbeeld laat ik u de basis zien van het extraheren van gegevens van webpagina's met Selenium. Dit wordt ook wel webscraping genoemd.

Bezoek eerst de Random.org link van Firefox. De pagina zou een willekeurige string moeten genereren, zoals je kunt zien in de onderstaande schermafbeelding.

Om de willekeurige stringgegevens met Selenium te extraheren, moet u ook de HTML-representatie van de gegevens kennen.

Om te zien hoe de willekeurige tekenreeksgegevens in HTML worden weergegeven, selecteert u de willekeurige tekenreeksgegevens en drukt u op de rechtermuisknop (RMB) en klikt u op Inspecteer element (Q) , zoals aangegeven in de onderstaande schermafbeelding.

De HTML-representatie van de gegevens moet worden weergegeven in de Inspecteur tabblad, zoals u kunt zien in de onderstaande schermafbeelding.

U kunt ook klikken op de Inspecteer icoon ( ) om de gegevens van de pagina te inspecteren.

Klik op het inspectiepictogram ( ) en plaats de muisaanwijzer op de willekeurige tekenreeksgegevens die u wilt extraheren. De HTML-representatie van de gegevens moet worden weergegeven zoals voorheen.

Zoals u kunt zien, zijn de willekeurige tekenreeksgegevens verpakt in een HTML voor tag en bevat de klasse gegevens .

Nu we de HTML-representatie kennen van de gegevens die we willen extraheren, zullen we een Python-script maken om de gegevens te extraheren met Selenium.

Het nieuwe Python-script maken ex06.py en typ de volgende regels codes in het script:

vanseleniumimporterenwebstuurprogramma
vanselenium.webstuurprogramma.gemeenschappelijk.sleutels importerenSleutels

browser=webstuurprogramma.Firefox(uitvoerbaar_pad='./drivers/gekkodriver')

browser.krijgen('https://www.random.org/strings/?num=1&len=20&digits
=aan&upperalpha=on&loweralpha=on&unique=on&format=html&rnd=new'
)

dataElement=browser.find_element_by_css_selector('pre.gegevens')
afdrukken(dataElement.tekst)
browser.ontslag nemen()

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

Hier de browser.get() methode laadt de webpagina in de Firefox-browser.

De browser.find_element_by_css_selector() methode zoekt in de HTML-code van de pagina naar een specifiek element en geeft dit terug.

In dit geval zou het element zijn pre.data , de voor tag met de klassenaam gegevens .

Onder de pre.data element is opgeslagen in de dataElement variabel.

Het script drukt vervolgens de tekstinhoud van de geselecteerde pre.data element.

Als u de ex06.py Python-script, het zou de willekeurige stringgegevens van de webpagina moeten extraheren, zoals je kunt zien in de onderstaande schermafbeelding.

$python3 ex06.py

Zoals je kunt zien, elke keer dat ik de ex06.py Python-script, het extraheert een andere willekeurige tekenreeksgegevens van de webpagina.

Voorbeeld 4: Lijst met gegevens van webpagina extraheren

Het vorige voorbeeld liet zien hoe je een enkel data-element uit een webpagina haalt met Selenium. In dit voorbeeld laat ik u zien hoe u Selenium kunt gebruiken om een ​​lijst met gegevens van een webpagina te extraheren.

Bezoek eerst de willekeurige-naam-generator.info vanuit uw Firefox-webbrowser. Deze website genereert elke keer dat u de pagina herlaadt tien willekeurige namen, zoals u kunt zien in de onderstaande schermafbeelding. Ons doel is om deze willekeurige namen te extraheren met Selenium.

Als je de namenlijst nauwkeuriger bekijkt, kun je zien dat het een geordende lijst is ( dood gaan label). De dood gaan tag bevat ook de klassenaam namenlijst . Elk van de willekeurige namen wordt weergegeven als een lijstitem ( bij de tag) in de dood gaan label.

Om deze willekeurige namen te extraheren, maakt u het nieuwe Python-script ex07.py en typ de volgende regels codes in het script.

vanseleniumimporterenwebstuurprogramma
vanselenium.webstuurprogramma.gemeenschappelijk.sleutels importerenSleutels

browser=webstuurprogramma.Firefox(uitvoerbaar_pad='./drivers/gekkodriver')

browser.krijgen('http://random-name-generator.info/')

namenlijst=browser.find_elements_by_css_selector('ol.nameLijst li')

voornaaminnamenlijst:
afdrukken(naam.tekst)

browser.ontslag nemen()

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

Hier de browser.get() methode laadt de willekeurige naamgenerator-webpagina in de Firefox-browser.

De browser.find_elements_by_css_selector() methode gebruikt de CSS-selector ol.nameList li alles vinden bij de elementen binnen de dood gaan tag met de klassenaam namenlijst . Ik heb alle geselecteerde opgeslagen bij de elementen in de namenlijst variabel.

TOT voor lus wordt gebruikt om door de te itereren namenlijst lijst van bij de elementen. In elke iteratie wordt de inhoud van de bij de element is afgedrukt op de console.

Als je de ex07.py Python-script, zal het alle willekeurige namen van de webpagina ophalen en op het scherm afdrukken, zoals je kunt zien in de onderstaande schermafbeelding.

$ python3 ex07.py

Als u het script een tweede keer uitvoert, zou het een nieuwe lijst met willekeurige gebruikersnamen moeten retourneren, zoals u kunt zien in de onderstaande schermafbeelding.

Voorbeeld 5: Formulier indienen – Zoeken op DuckDuckGo

Dit voorbeeld is net zo eenvoudig als het eerste voorbeeld. In dit voorbeeld ga ik naar de DuckDuckGo-zoekmachine en zoek ik op de term selenium hq Selenium gebruiken.

Eerste bezoek DuckDuckGo-zoekmachine vanuit de Firefox-webbrowser.

Als u het zoekinvoerveld inspecteert, zou het de id . moeten hebben search_form_input_homepage , zoals je kunt zien in de onderstaande schermafbeelding.

Maak nu het nieuwe Python-script ex08.py en typ de volgende regels codes in het script.

vanseleniumimporterenwebstuurprogramma
vanselenium.webstuurprogramma.gemeenschappelijk.sleutels importerenSleutels
browser=webstuurprogramma.Firefox(uitvoerbaar_pad='./drivers/gekkodriver')
browser.krijgen('https://duckduckgo.com/')
zoekenInvoer=browser.find_element_by_id('search_form_input_homepage')
zoekenInvoer.send_keys('selenium hq'+ Sleutels.BINNENKOMEN)

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

Hier de browser.get() methode laadt de startpagina van de DuckDuckGo-zoekmachine in de Firefox-webbrowser.

De browser.find_element_by_id() methode selecteert het invoerelement met de id search_form_input_homepage en bewaart het in de zoekenInvoer variabel.

De searchInput.send_keys() methode wordt gebruikt om toetsaanslaggegevens naar het invoerveld te sturen. In dit voorbeeld stuurt het de string selenium hq , en de Enter-toets wordt ingedrukt met de Toetsen.ENTER constante.

Zodra de DuckDuckGo-zoekmachine de Enter-toets ontvangt, drukt u op ( Toetsen.ENTER ), het zoekt en geeft het resultaat weer.

Voer de ... uit ex08.py Python-script, als volgt:

$ python3 ex08.py

Zoals u kunt zien, heeft de Firefox-webbrowser de DuckDuckGo-zoekmachine bezocht.

Het typte automatisch selenium hq in het zoektekstvak.

Zodra de browser de Enter-toets heeft ontvangen, drukt u op ( Toetsen.ENTER ), werd het zoekresultaat weergegeven.

Voorbeeld 6: Een formulier indienen op W3Schools.com

In voorbeeld 5 was het indienen van formulieren in de DuckDuckGo-zoekmachine eenvoudig. Het enige wat je hoefde te doen was op de Enter-toets te drukken. Maar dit zal niet het geval zijn voor alle formulierinzendingen. In dit voorbeeld laat ik u complexere formulierafhandeling zien.

Bezoek eerst de HTML Forms-pagina van W3Schools.com vanuit de Firefox-webbrowser. Zodra de pagina is geladen, zou u een voorbeeldformulier moeten zien. Dit is het formulier dat we in dit voorbeeld zullen indienen.

Als u het formulier inspecteert, Voornaam invoerveld moet de id . hebben fname , de Achternaam invoerveld moet de id . hebben naam , en de Verzendknop zou moeten hebben type indienen , zoals je kunt zien in de onderstaande schermafbeelding.

Om dit formulier in te dienen met Selenium, maakt u het nieuwe Python-script ex09.py en typ de volgende regels codes in het script.

vanseleniumimporterenwebstuurprogramma
vanselenium.webstuurprogramma.gemeenschappelijk.sleutels importerenSleutels
browser=webstuurprogramma.Firefox(uitvoerbaar_pad='./drivers/gekkodriver')
browser.krijgen('https://www.w3schools.com/html/html_forms.asp')
fname=browser.find_element_by_id('voornaam')
naam.Doorzichtig()
naam.send_keys('Shariar')
naam=browser.find_element_by_id('naam')
naam.Doorzichtig()
naam.send_keys('Shovon')
verzendknop=browser.find_element_by_css_selector('invoer[type='submit']')
verzendknop.send_keys(Sleutels.BINNENKOMEN)

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

Hier de browser.get() methode opent de W3schools HTML-formulierenpagina in de Firefox-webbrowser.

De browser.find_element_by_id() methode vindt de invoervelden door de id fname en lname en het slaat ze op in de fname en lname variabelen resp.

De fname.clear() en lnaam.clear() methoden wissen de standaard voornaam (John) fname waarde en achternaam (Doe) lname waarde uit de invoervelden.

De fname.send_keys() en lname.send_keys() methoden type: Shahriar en Shovon in de Voornaam en Achternaam invoervelden resp.

De browser.find_element_by_css_selector() methode selecteert de Verzendknop van het formulier en slaat het op in de verzendknop variabel.

De submitButton.send_keys() methode verzendt de Enter-toets ( Toetsen.ENTER ) naar de Verzendknop van het formulier. Met deze actie wordt het formulier verzonden.

Voer de ... uit ex09.py Python-script, als volgt:

$ python3 ex09.py

Zoals u kunt zien, is het formulier automatisch verzonden met de juiste invoer.

Conclusie

Dit artikel zou u moeten helpen om aan de slag te gaan met Selenium-browsertests, webautomatisering en webscrapingbibliotheken in Python 3. Raadpleeg voor meer informatie de officiële Selenium Python-documentatie .