Selenium Installatie
Voor gebruik SELENIUM module in python, we moeten het installeren. Voer de volgende opdracht uit in de terminal om het te installeren:.
pip installeer seleniumOF
pip3 installeer seleniumDit zal installeren SELENIUM module en nu is het klaar voor gebruik.
Webstuurprogramma's
Voordat u de webbrowser kunt automatiseren met de SELENIUM-module, is een webstuurprogramma van de gekozen browser vereist. Om de Chrome-browser te automatiseren, hebben we een Chrome-webstuurprogramma nodig. Het pad, waar het webstuurprogrammabestand wordt geplaatst, wordt als argument doorgegeven. Het webstuurprogramma communiceert met de webbrowser via een protocol. Ga naar de volgende link om webstuurprogramma's van verschillende browsers te downloaden.
https://www.seleniumhq.org/download/
Beginnen
Nadat je de vereiste modules hebt geïnstalleerd, kun je python CLI openen en beginnen met spelen met je browser. Dus laten we eerst webdriver en andere modules importeren, deze modules en klassen laten je Python-programma toetsaanslagen en andere informatie naar je browser sturen.
C:\Users\Usama Azad>pythonPython 3.6.4 (v3.6.4:d48eceb, 19 december 2017, 06:54:40) [MSC v.1900 64 bit (AMD64)] op win32
Typ "help", "copyright", "credits" of "licentie" voor meer informatie.
>>> van selenium import webdriver
>>> van selenium.webstuurprogramma.gemeenschappelijk.sleutels importeren Sleutels
#pad naar uw Chrome-stuurprogramma's
>>> stuurprogramma = webstuurprogramma.Chrome('C:\chromedriver')
Dit opent een nieuw Chrome-browservenster voor u. Nu kunt u selenium krijgen om naar elke website te gaan met behulp van .get() methode. Deze methode opent de website en wacht tot deze is geladen, waarna u uw volgende opdracht kunt invoeren.
>>> chauffeur.get("https://www.facebook.com")
Elementen in een webpagina zoeken
We kunnen een specifiek element op een webpagina vinden door de volgende methode te volgen:.
- Druk eerst op de F12 Er wordt een bronpagina geopend aan de rechterkant van het venster, zoals hieronder weergegeven:
- Druk nu op 'Ctrl+Shift+C' of klik op het symbool in de linkerbovenhoek van de bronpagina.
- Zet de pijl op 'Email of telefoon' veld en klik op. Dit element wordt geselecteerd en de broncode van dit element wordt gemarkeerd op de bronpagina zoals hieronder weergegeven. Het is te zien dat we de volgende attributen hebben voor het geselecteerde element:
- naam = "e-mail"
- class= “inputtext login_form_input_box”
- id = "e-mail"
We kunnen lokaliseren 'Email of telefoon' element door een van de bovenstaande attributen te gebruiken.
- Als we geen van de bovengenoemde attributen hebben, kunnen we ook een element selecteren met 'XPath'. Om XPath te kopiëren, klikt u met de rechtermuisknop op de gemarkeerde broncode op de bronpagina. Ga dan naar 'Kopiëren > XPath kopiëren'.
Elementen lokaliseren met Selenium
Om elementen op een webpagina te lokaliseren gebruiken we 'find_element' methode'. Hieronder volgen de 'find_element' methoden beschikbaar in SELENIUM.
- find_element_by_class_name(naam)
- find_element_by_tag_name(naam)
- find_element_by_link_text(tekst)
- find_element_by_css_selector(selector)
- find_element_by_name(naam)
- find_element_by_id(id)
- find_element_by_xpath(XPath)
Door de bovenstaande methoden te gebruiken, kunnen we een element op een webpagina lokaliseren en gebruiken in onze automatiseringscode.
Klikken op verschillende webpagina-elementen
click()-methode in selenium kan worden gebruikt om op verschillende links en knopelementen te klikken die u met de bovenstaande methoden hebt gevonden. U wilt bijvoorbeeld klikken op "Account vergeten"?” op de Facebook-pagina
>>> link_button = stuurprogramma.find_element_by_link_text('Account vergeten?')>>> link_button.Klik()
Speciale sleutels verzenden
Selenium heeft ook een module waarmee je speciale sleutels (bijv.g, Enter, Escape, Page down, page up etc) tijdens het surfen op het web. U moet deze module importeren met de volgende opdracht:
>>> van selenium.webstuurprogramma.gemeenschappelijk.sleutels importeren SleutelsU leest bijvoorbeeld een artikel op Wikipedia over de geschiedenis van de Verenigde Staten, maar u bent te lui om na een tijdje op de pijl-omlaag te drukken. U kunt automatiseren door deze sleutel naar de browser te sturen met Selenium
van selenium import webdrivervan selenium.webstuurprogramma.gemeenschappelijk.sleutels importeren Sleutels
import tijd
stuurprogramma = webstuurprogramma.Chrome('C:\chromedriver')
#Open de artikellink met de get-methode
bestuurder.get("https://nl.wikipedia.org/wiki/United_States")
#Begin vanaf het begin van de pagina
elem = bestuurder.find_element_by_tag_name('html')
terwijl waar:
tijd.slapen(5)
elem.send_keys(Sleutels.OMLAAG)
Hoe de browser te automatiseren
In deze sectie zullen we zien hoe we onze webbrowser kunnen automatiseren met behulp van enkele gebruiksscenario's.
Automatisch inloggen op sociale media-websites
Met webautomatisering kunt u uw inlogproces eenvoudig automatisch laten verlopen. Als u uw sociale media-websites regelmatig op een bepaald tijdstip (bijvoorbeeld 20.00 uur) controleert, is het goed om dit proces te automatiseren. Hieronder volgt de code om het inlogproces van twee sociale-mediasites 'facebook' en 'twitter' te automatiseren met behulp van SELENIUM module in Python.
# webdriver importeren uit seleniummodulevan selenium import webdriver
# speciale sleutels importeren uit selenium
van selenium.webstuurprogramma.gemeenschappelijk.sleutels importeren Sleutels
# 'driver'-object maken voor 'Google-Chrome'
stuurprogramma = webstuurprogramma.Chrome('pad naar Chrome-stuurprogramma')
# het venster maximaliseren
bestuurder.maximaliseren_window()
# facebook openen
bestuurder.krijgen('http://www.facebook.com')
# lokaliseren van 'E-mail of Telefoon' element met 'id' attribuut
gebruikersnaam = stuurprogramma.find_element_by_id('e-mail')
# Gebruikersnaam of het e-mailadres voor facebook invoeren
gebruikersnaam.send_keys('Voer gebruikersnaam/e-mail in')
# lokaliseren van 'Password' element met behulp van 'id' attribuut
wachtwoord = stuurprogramma.find_element_by_id('pass')
# wachtwoord invoeren voor facebook
wachtwoord.send_keys("Voer wachtwoord in")
# zoek het 'login button'-element met behulp van het 'id' attribuut en druk op 'Enter'
bestuurder.find_element_by_id('u_0_b').send_keys(Sleutels.ENTER)
# openen nieuw tabblad voor twitter
bestuurder.execute_script("venster.open('http://www.twitteren.com', 'tab2');")
# overschakelen naar nieuw tabblad
bestuurder.switch_to_window('tab2')
#zoek het 'log in'-element en klik erop
bestuurder.find_element_by_xpath('//*[@id="doc"]/div/div[1]/div[1]/div[2]/div[1]').Klik()
# zoekelement 'Telefoon, e-mail of gebruikersnaam'
gebruikersnaam = stuurprogramma.find_element_by_xpath('//*[@id="page-container"]/div/div[1]/form/
fieldset/div[1]/input')
# gebruikersnaam invoeren voor twitter
gebruikersnaam.send_keys('Voer gebruikersnaam in')
# zoeken naar 'Wachtwoord'-element'
wachtwoord = stuurprogramma.find_element_by_xpath('//*[@id="page-container"]/div/div[1]/form/
fieldset/div[2]/input')
# wachtwoord invoeren voor twitter
wachtwoord.send_keys('Voer wachtwoord in')
# zoek de knop 'inloggen' en klik erop
bestuurder.find_element_by_xpath('//*[@id="page-container"]/div/div[1]/form/div[2]/button')
.Klik()
Bovenstaande code automatiseert de browser om in te loggen op sociale-mediawebsites. Allereerst hebben we een object van onze favoriete browser gemaakt. In dit geval hebben we 'Chrome' als browser genomen. Om een object te maken, hebben we het pad van onze 'chromedriver' als argument doorgegeven. Vervolgens hebben we de url van Facebook ingevoerd en ingelogd op Facebook door elementen te selecteren en gebruikersnaam en wachtwoord door te geven.
Hierna hebben we een nieuw tabblad geopend en de url van twitter ingevoerd. Hierna schakelden we over naar het nieuwe tabblad omdat de besturing van de code nog steeds op het eerste tabblad stond, hoewel het tweede tabblad open was. Daarna logden we in op Twitter door elementen te selecteren en gebruikersnaam en wachtwoord door te geven.
Automatisering van online winkelen
Een ander goed voorbeeld van browserautomatisering zou online winkelen kunnen zijn. U wilt bijvoorbeeld online een camera kopen maar de prijzen zijn te hoog. Je checkt elke dag of de prijs binnen jouw bereik ligt of niet. Deze taak kan worden geautomatiseerd met: SELENIUM en u kunt het controleren van de prijs elke dag vermijden. De volgende code laat je via e-mail weten of de prijs van je gewenste product betaalbaar is of niet. Als uw gewenste product in de uitverkoop is, zal het programma u hiervan op de hoogte stellen via een e-mail.
# webdriver importeren uit seleniummodulevan selenium import webdriver
# smtplib-module importeren voor het verzenden van e-mail
smtplib importeren
# definiërende e-mailfunctie om via e-mail te informeren
def mail():
# verbinding maken met de gmail-server met domeinnaam en poortnummer.
Dit verschilt per e-mailprovider
verbinding = smtplib.SMTP('smtp.gmail.com', 587)
# zeg hallo tegen de server
verbinding.ehlo()
# versleutelde TLS-verbinding starten
verbinding.schrikt()
# log in op de gmail-server met uw hoofdadres en wachtwoord
verbinding.login('mailadres afzender', 'wachtwoord')
# mail naar jezelf sturen om je te informeren over de prijs van de camera
verbinding.sendmail('mailadres afzender', 'mailadres ontvanger',
'Onderwerp: u kunt de camera kopen')
# verbinding beëindigen
verbinding.stoppen()
# mailfunctie eindigt hier
# Google Chrome starten door het pad van chromedriver als argument op te geven
stuurprogramma = webstuurprogramma.Chrome('pad naar chromedriver')
# het Chrome-venster minimaliseren
bestuurder.minimal_window()
# openingsdraz.pk-site
bestuurder.krijgen('https://www.daraz.pk/')
# lokaliseren van element van zoekbalk met id-attribuut om naar camera te zoeken
zoekbalk = stuurprogramma.find_element_by_id('q')
#schrijfcamera in zoekbalk
zoekbalk.send_keys('camera')
#zoekknopelement zoeken met xpath van element
zoeken = bestuurder.find_element_by_xpath('//*[@id="topActionHeader"]/div/div[2]/div/div[2]
/form/div/div[2]/knop')
#klikken op de zoekknop
zoeken.Klik()
# lokaliseren element van uw gewenste product met xpath attribuut
product = bestuurder.find_element_by_xpath('//*[@id="root"]/div/div[3]/div[1]/div/div[1]
/div[2]/div[1]/div/div/div[2]/div[2]/a')
# klikken op je gewenste product
Product.Klik()
# lokaliseren van prijselement met xpath-kenmerk
prijs = chauffeur.find_element_by_xpath('//*[@id="module_product_price_1"]/div/div/span')
# tekst extraheren uit prijselement. Dit geeft de prijs van het product zoals 'Rs. 24.500'
prijs = prijs.tekst
# prijs omzetten in string
Prijs = str(prijs)
# een lege array definiëren. Dit wordt gebruikt bij het extraheren van cijfers uit de prijs zoals '24500'
vorm 'Rs'. 24.500'
aantal = []
# alle vermeldingen van prijsreeks één voor één lezen met for-lus
voor x in prijs:
# controleren of de invoer een cijfer is of niet, omdat we alleen cijfers in de prijs willen
als x.iscijfer():
# alleen cijfers toevoegen aan nummerlijst
aantal.toevoegen(x)
# samenvoegen met alle vermeldingen van num list. Nu is de prijs een string die alleen cijfers bevat
prijs = ".join(aantal)
# string van prijs omzetten in geheel getal
prijs = int(prijs)
# controleren of de prijs betaalbaar is of niet
als prijs <= 25000:
# bellen mail functie om u te informeren over de prijs
mail()
# browser sluiten
bestuurder.stoppen()
Bovenstaande code opent daraz.pk-site en zoekt naar de camera en informeert u via e-mail of de prijs betaalbaar is. Allereerst hebben we geïmporteerd SELENIUM en SMTPLIB modules. Vervolgens hebben we de 'mail'-functie gedefinieerd die u een e-mail stuurt met de mededeling dat de prijs betaalbaar is, wanneer u wordt gebeld.
Hierna hebben we de Chrome-browser geopend met chromedriver en gezocht naar 'daraz.pk'. Vervolgens lokaliseren we ons gewenste product met behulp van elementen en hun attributen. Hoe elementen worden gevonden en gelokaliseerd, is hierboven beschreven. De prijs die we kregen was een string, dus we hebben deze string omgezet in een geheel getal en vervolgens gecontroleerd of de prijs betaalbaar is of niet. Als de prijs betaalbaar is, bel dan de 'mail'-functie.
Cron-taak maken
Bovenstaande twee automatiseringsscripts moeten eenmaal per dag op een specifiek tijdstip worden uitgevoerd. We kunnen dit beheren met behulp van cron job. Taken die aan crontab zijn toegevoegd, kunnen herhaaldelijk op een specifiek tijdstip worden uitgevoerd. Om bovenstaande taken in crontab toe te voegen, voer je eerst de volgende opdracht uit in Linux Terminal:.
[e-mail beveiligd]:~$ crontab -eBovenstaande opdracht opent crontab-bestand om te bewerken. Voer aan het einde van het bestand de volgende opdracht in:.
0 8 * * * python /pad/naar/python/scriptWe zien vermeldingen voor het commando van rechts naar links.
- Eerste sterretje, van rechts, betekent dat deze opdracht elke dag van de week wordt uitgevoerd.
- Tweede asterisk betekent dat deze opdracht elke maand wordt uitgevoerd
- Het derde sterretje geeft aan dat deze opdracht elke dag van de maand wordt uitgevoerd
- Het vierde item is '8', wat betekent dat dit script op het 8e uur van de dag wordt uitgevoerd
- Vijfde invoer die '0' is, betekent dat deze opdracht op de 0e minuut wordt uitgevoerd.
Dus deze opdracht wordt elke dag om 8 uur uitgevoerd.
Conclusie
In dit artikel hebben we besproken hoe u kunt gebruiken SELENIUM samen met Python om uw browser te automatiseren met behulp van verschillende technieken. Je kunt je dagelijkse routinewerk automatiseren, formulieren invullen, je spullen downloaden en nog veel meer ermee. We hebben hier slechts twee voorbeelden besproken, maar je kunt alles automatiseren wat een mens handmatig kan doen met de browser.