Introducere în Seleniu în Python 3

Introduction Selenium Python 3



Seleniul este un cadru utilizat pentru testarea aplicațiilor web. Selenium automatizează un browser, cum ar fi Chrome sau Firefox, pentru a rula teste pe site-ul web dorit. Seleniul este, de asemenea, un instrument foarte puternic de răzuire web. Selenium acceptă JavaScript și toate funcțiile moderne ale browserului. Acest instrument este foarte eficient la extragerea informațiilor de pe site-uri web.

Acest articol vă va arăta cum să configurați Selenium pe distribuția dvs. Linux (adică Ubuntu), precum și cum să efectuați automatizarea web de bază și casarea web cu biblioteca Selenium Python 3.







Condiții prealabile

Pentru a încerca comenzile și exemplele utilizate în acest articol, trebuie să aveți următoarele:



1) O distribuție Linux (de preferință Ubuntu) instalată pe computer.
2) Python 3 instalat pe computer.
3) PIP 3 instalat pe computer.
4) Browserul web Google Chrome sau Firefox instalat pe computer.



Puteți găsi multe articole despre aceste subiecte la LinuxHint.com . Asigurați-vă că verificați aceste articole dacă aveți nevoie de asistență suplimentară.





Pregătirea mediului virtual Python 3 pentru proiect

Mediul virtual Python este utilizat pentru a crea un director de proiect Python izolat. Modulele Python pe care le instalați utilizând PIP vor fi instalate numai în directorul proiectului, mai degrabă decât la nivel global.

Python virtualenv modulul este utilizat pentru a gestiona mediile virtuale Python.



Puteți instala Python virtualenv modul global utilizând PIP 3, după cum urmează:

$ sudo pip3 instala virtualenv

PIP3 va descărca și va instala la nivel global toate modulele necesare.

În acest moment, Python virtualenv modulul ar trebui instalat la nivel global.

Creați directorul proiectului python-seleniu-bazic / în directorul curent de lucru, după cum urmează:

$ mkdir -pv python-selenium-basic / drivers

Navigați la directorul de proiect nou creat python-seleniu-bazic / , după cum urmează:

$CDpython-seleniu-bazic /

Creați un mediu virtual Python în directorul de proiect cu următoarea comandă:

$ virtualenv.env

Mediul virtual Python ar trebui acum creat în directorul dvs. de proiect. '

Activați mediul virtual Python în directorul de proiect prin următoarea comandă:

$ sursa.env/ bin / activate

După cum puteți vedea, mediul virtual Python este activat pentru acest director de proiect.

Instalarea bibliotecii Selenium Python

Biblioteca Selenium Python este disponibilă în depozitul oficial Pypi Python.

Puteți instala această bibliotecă utilizând PIP 3, după cum urmează:

$ pip3 instalează seleniu

Ar trebui acum instalată biblioteca Selenium Python.

Acum că biblioteca Selenium Python este instalată, următorul lucru pe care trebuie să-l faceți este să instalați un driver web pentru browserul dvs. web preferat. În acest articol, vă voi arăta cum să instalați driverele web Firefox și Chrome pentru Selenium.

Instalarea driverului Firefox Gecko

Driverul Firefox Gecko vă permite să controlați sau să automatizați browserul web Firefox utilizând Selenium.

Pentru a descărca driverul Firefox Gecko, vizitați GitHub lansează pagina mozilla / geckodriver dintr-un browser web.

După cum puteți vedea, v0.26.0 este cea mai recentă versiune a driverului Firefox Gecko în momentul în care a fost scris acest articol.

Pentru a descărca Firefox Gecko Driver, derulați puțin și faceți clic pe arhiva Linux geckodriver tar.gz, în funcție de arhitectura sistemului dvs. de operare.

Dacă utilizați un sistem de operare pe 32 de biți, faceți clic pe geckodriver-v0.26.0-linux32.tar.gz legătură.

Dacă utilizați un sistem de operare pe 64 de biți, faceți clic pe geckodriver-v0.26.0-linuxx64.tar.gz legătură.

În cazul meu, voi descărca versiunea pe 64 de biți a driverului Firefox Gecko.

Browserul dvs. ar trebui să vă solicite să salvați arhiva. Selectați Salvează fișierul și apoi faceți clic pe Bine .

Arhiva Firefox Gecko Driver ar trebui să fie descărcată în ~ / Descărcări director.

Extrageți geckodriver-v0.26.0-linux64.tar.gz arhiva din ~ / Descărcări director la drivere / directorul proiectului dvs. introducând următoarea comandă:

$gudron -xzf~/Descărcări/geckodriver-v0.26.0-linux64.tar.gz-Cșoferii/

Odată ce arhiva Firefox Gecko Driver este extrasă, o nouă șofer de gecko fișierul binar ar trebui creat în drivere / directorul proiectului dvs., după cum puteți vedea în captura de ecran de mai jos.

Testarea driverului Selenium Firefox Gecko

În această secțiune, vă voi arăta cum să configurați primul dvs. script Selenium Python pentru a testa dacă driverul Firefox Gecko funcționează.

Mai întâi, deschideți directorul proiectului python-seleniu-bazic / cu IDE-ul sau editorul dvs. preferat. În acest articol, voi folosi Visual Studio Code.

Creați noul script Python ex01.py și tastați următoarele linii în script.

dinseleniuimportwebdriver
dinseleniu.webdriver.uzual.chei importTaste
din timp importdormi
browser=webdriver.Firefox(calea_executabilă=„./drivers/geckodriver”)
browser.obține(„http://www.google.com”)
dormi(5)
browser.părăsi()

Odată ce ați terminat, salvați fișierul ex01.py Script Python.

Voi explica codul într-o secțiune ulterioară a acestui articol.

Următoarea linie configurează Selenium pentru a utiliza driverul Firefox Gecko de pe drivere / directorul proiectului dumneavoastră.

Pentru a testa dacă driverul Firefox Gecko funcționează cu Selenium, rulați următoarele ex01.py Script Python:

$ python3 ex01.py

Browserul web Firefox ar trebui să viziteze automat Google.com și să se închidă după 5 secunde. Dacă se întâmplă acest lucru, atunci driverul Selenium Firefox Gecko funcționează corect.

Instalarea driverului web Chrome

Driverul web Chrome vă permite să controlați sau să automatizați browserul web Google Chrome folosind Selenium.

Trebuie să descărcați aceeași versiune a driverului web Chrome ca și cea a browserului web Google Chrome.

Pentru a găsi numărul versiunii browserului dvs. web Google Chrome, vizitați chrome: // settings / help în Google Chrome. Numărul versiunii ar trebui să fie în Despre Chrome secțiunea, așa cum puteți vedea în captura de ecran de mai jos.

În cazul meu, numărul versiunii este 83.0.4103.116 . Primele trei părți ale numărului versiunii ( 83.0.4103 , în cazul meu) trebuie să se potrivească cu primele trei părți ale numărului de versiune al driverului web Chrome.

Pentru a descărca Chrome Web Driver, vizitați pagina oficială de descărcare a Driverului Chrome .

În Lansări curente secțiunea, Driverul web Chrome pentru cele mai recente versiuni ale browserului web Google Chrome va fi disponibil, după cum puteți vedea în captura de ecran de mai jos.

Dacă versiunea Google Chrome pe care o utilizați nu se află în Lansări curente , derulați puțin în jos și ar trebui să găsiți versiunea dorită.

După ce faceți clic pe versiunea corectă a driverului web Chrome, acesta ar trebui să vă ducă la pagina următoare. Faceți clic pe chromedriver_linux64.zip link, așa cum este notat în captura de ecran de mai jos.

Arhiva Chrome Web Driver ar trebui să fie acum descărcată.

Arhiva Chrome Web Driver ar trebui să fie acum descărcată în ~ / Descărcări director.

Puteți extrage fișierul chromedriver-linux64.zip arhiva din ~ / Descărcări director la drivere / directorul proiectului dvs. cu următoarea comandă:

$ dezarhivați~/ Descărcări / chromedriver_linux64.fermoar-d drivere /

Odată ce arhiva Chrome Web Driver a fost extrasă, o nouă râu cromat fișierul binar ar trebui creat în drivere / directorul proiectului dvs., după cum puteți vedea în captura de ecran de mai jos.

Testarea driverului web Selenium Chrome

În această secțiune, vă voi arăta cum să configurați primul dvs. script Selenium Python pentru a testa dacă funcționează Chrome Web Driver.

Mai întâi, creați noul script Python ex02.py și tastați următoarele linii de coduri în script.

dinseleniuimportwebdriver
dinseleniu.webdriver.uzual.chei importTaste
din timp importdormi
browser=webdriver.Crom(calea_executabilă=„./drivers/chromedriver”)
browser.obține(„http://www.google.com”)
dormi(5)
browser.părăsi()

Odată ce ați terminat, salvați fișierul ex02.py Script Python.

Voi explica codul într-o secțiune ulterioară a acestui articol.

Următoarea linie configurează Selenium pentru a utiliza Chrome Web Driver din drivere / directorul proiectului dumneavoastră.

Pentru a testa dacă Driverul web Chrome funcționează cu Selenium, rulați ex02.py Script Python, după cum urmează:

$ python3 ex01.py

Browserul web Google Chrome ar trebui să viziteze automat Google.com și să se închidă după 5 secunde. Dacă se întâmplă acest lucru, atunci driverul Selenium Firefox Gecko funcționează corect.

Noțiuni de bază ale răzuirii web cu seleniu

De acum înainte voi folosi browserul web Firefox. De asemenea, puteți utiliza Chrome, dacă doriți.

Un script de bază Selenium Python ar trebui să arate ca scriptul prezentat în captura de ecran de mai jos.

Mai întâi, importați Seleniu webdriver de la seleniu modul.

Apoi, importați fișierul Taste din seleniu.webdriver.common.keys . Acest lucru vă va ajuta să trimiteți apăsări de tastatură pe browserul pe care îl automatizați din Selenium.

Următoarea linie creează un browser obiect pentru browserul web Firefox utilizând driverul Firefox Gecko (Webdriver). Puteți controla acțiunile browserului Firefox folosind acest obiect.

Pentru a încărca un site web sau o adresă URL (voi încărca site-ul web https://www.duckduckgo.com ), suna obține() metoda browser obiect pe browserul dvs. Firefox.

Folosind Selenium, puteți scrie testele, efectua casarea web și, în cele din urmă, puteți închide browserul folosind părăsi() metoda browser obiect.

Mai sus este aspectul de bază al unui script Selenium Python. Veți scrie aceste rânduri în toate scripturile Selenium Python.

Exemplul 1: Tipărirea titlului unei pagini web

Acesta va fi cel mai simplu exemplu discutat folosind Selenium. În acest exemplu, vom imprima titlul paginii web pe care o vom vizita.

Creați noul fișier ex04.py și introduceți următoarele linii de coduri în el.

dinseleniuimportwebdriver
dinseleniu.webdriver.uzual.chei importTaste

browser=webdriver.Firefox(calea_executabilă=„./drivers/geckodriver”)

browser.obține(„https://www.duckduckgo.com”)
imprimare(„Titlu:% s”% browser.titlu)
browser.părăsi()

Odată ce ați terminat, salvați fișierul.

Aici browser.title este folosit pentru a accesa titlul paginii web vizitate și fișierul imprimare() funcția va fi utilizată pentru a imprima titlul în consolă.

După rularea ex04.py script, ar trebui:

1) Deschideți Firefox
2) Încărcați pagina web dorită
3) Obțineți titlul paginii
4) Imprimați titlul pe consolă
5) Și, în cele din urmă, închideți browserul

După cum puteți vedea, ex04.py scriptul a tipărit frumos titlul paginii web în consolă.

$ python3 ex04.py

Exemplul 2: Tipărirea titlurilor de mai multe pagini web

La fel ca în exemplul anterior, puteți utiliza aceeași metodă pentru a imprima titlul mai multor pagini web folosind bucla Python.

Pentru a înțelege cum funcționează acest lucru, creați noul script Python ex05.py și tastați următoarele linii de cod în script:

dinseleniuimportwebdriver
dinseleniu.webdriver.uzual.chei importTaste

browser=webdriver.Firefox(calea_executabilă=„./drivers/geckodriver”)


urluri= [„https://www.duckduckgo.com”, „https://linuxhint.com”, „https://yahoo.com”]
pentruurlînadrese URL:
browser.obține(url)
imprimare(„Titlu:% s”% browser.titlu)
browser.părăsi()

Odată ce ați terminat, salvați scriptul Python ex05.py .

Aici urluri lista păstrează adresa URL a fiecărei pagini web.

LA pentru bucla este utilizată pentru a itera prin urluri elemente de listă.

La fiecare iterație, Selenium spune browserului să viziteze url și obțineți titlul paginii web. Odată ce Selenium a extras titlul paginii web, acesta este tipărit în consolă.

Rulați scriptul Python ex05.py , și ar trebui să vedeți titlul fiecărei pagini web în urluri listă.

$ python3 ex05.py

Acesta este un exemplu al modului în care Selenium poate îndeplini aceeași sarcină cu mai multe pagini web sau site-uri web.

Exemplul 3: Extragerea datelor dintr-o pagină web

În acest exemplu, vă voi arăta noțiunile de bază pentru extragerea datelor din pagini web folosind Selenium. Acest lucru este, de asemenea, cunoscut sub numele de web scraping.

Mai întâi, vizitați Random.org link din Firefox. Pagina ar trebui să genereze un șir aleatoriu, după cum puteți vedea în captura de ecran de mai jos.

Pentru a extrage datele șirului aleatoriu folosind Selenium, trebuie să cunoașteți și reprezentarea HTML a datelor.

Pentru a vedea cum sunt reprezentate datele șirului aleatoriu în HTML, selectați datele șirului aleatoriu și apăsați butonul din dreapta al mouse-ului (RMB) și faceți clic pe Inspectați elementul (Q) , așa cum este notat în captura de ecran de mai jos.

Reprezentarea HTML a datelor ar trebui să fie afișată în Inspector , după cum puteți vedea în captura de ecran de mai jos.

De asemenea, puteți face clic pe Pictograma inspectează ( ) pentru a inspecta datele din pagină.

Faceți clic pe pictograma inspectați () și plasați cursorul peste datele șirului aleatoriu pe care doriți să le extrageți. Reprezentarea HTML a datelor ar trebui să fie afișată ca înainte.

După cum puteți vedea, datele șirului aleatoriu sunt împachetate într-un HTML pentru etichetă și conține clasa date .

Acum că știm reprezentarea HTML a datelor pe care dorim să le extragem, vom crea un script Python pentru a extrage datele folosind Selenium.

Creați noul script Python ex06.py și tastați următoarele linii de coduri în script

dinseleniuimportwebdriver
dinseleniu.webdriver.uzual.chei importTaste

browser=webdriver.Firefox(calea_executabilă=„./drivers/geckodriver”)

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

dataElement=browser.find_element_by_css_selector(„pre.data”)
imprimare(dataElement.text)
browser.părăsi()

Odată ce ați terminat, salvați fișierul ex06.py Script Python.

Aici browser.get () metoda încarcă pagina web în browserul Firefox.

The browser.find_element_by_css_selector () metoda caută în codul HTML al paginii un anumit element și îl returnează.

În acest caz, elementul ar fi pre.data , pentru etichetă care are numele clasei date .

Sub pre.data elementul a fost stocat în dataElement variabil.

Scriptul imprimă apoi conținutul textului selectat pre.data element.

Dacă rulați ex06.py Script Python, ar trebui să extragă datele șirului aleatoriu de pe pagina web, așa cum puteți vedea în captura de ecran de mai jos.

$ python3 ex06.py

După cum puteți vedea, de fiecare dată când rulez ex06.py Script Python, extrage un șir de date aleatoare diferite de pe pagina web.

Exemplul 4: extragerea listei de date de pe pagina web

Exemplul anterior v-a arătat cum să extrageți un singur element de date dintr-o pagină web folosind Selenium. În acest exemplu, vă voi arăta cum să utilizați Selenium pentru a extrage o listă de date dintr-o pagină web.

Mai întâi, vizitați random-name-generator.info din browserul dvs. web Firefox. Acest site web va genera zece nume aleatorii de fiecare dată când reîncărcați pagina, după cum puteți vedea în captura de ecran de mai jos. Scopul nostru este de a extrage aceste nume aleatorii folosind seleniu.

Dacă inspectați mai atent lista de nume, puteți vedea că este o listă ordonată ( a muri etichetă). The a muri eticheta include și numele clasei lista de nume . Fiecare dintre numele aleatorii sunt reprezentate ca element de listă ( la tag) în interiorul a muri etichetă.

Pentru a extrage aceste nume aleatorii, creați noul script Python ex07.py și tastați următoarele linii de coduri în script.

dinseleniuimportwebdriver
dinseleniu.webdriver.uzual.chei importTaste

browser=webdriver.Firefox(calea_executabilă=„./drivers/geckodriver”)

browser.obține(„http://random-name-generator.info/”)

lista de nume=browser.find_elements_by_css_selector(„ol.nameList li”)

pentruNumeînlista de nume:
imprimare(Nume.text)

browser.părăsi()

Odată ce ați terminat, salvați fișierul ex07.py Script Python.

Aici browser.get () metoda încarcă pagina web generatoare de nume aleatorii în browserul Firefox.

The browser.find_elements_by_css_selector () metoda folosește selectorul CSS ol.nameList li pentru a găsi toate la elemente din interiorul a muri etichetă având numele clasei lista de nume . Am stocat toate cele selectate la elemente din lista de nume variabil.

LA pentru bucla este utilizată pentru a itera prin lista de nume lista de la elemente. În fiecare iterație, conținutul fișierului la elementul este tipărit pe consolă.

Dacă rulați ex07.py Script Python, va prelua toate numele aleatorii de pe pagina web și îl va imprima pe ecran, după cum puteți vedea în captura de ecran de mai jos.

$ python3 ex07.py

Dacă rulați scriptul a doua oară, acesta ar trebui să returneze o nouă listă de nume de utilizatori aleatorii, așa cum puteți vedea în captura de ecran de mai jos.

Exemplul 5: Trimiterea formularului - Căutarea pe DuckDuckGo

Acest exemplu este la fel de simplu ca primul exemplu. În acest exemplu, voi vizita motorul de căutare DuckDuckGo și voi căuta termenul seleniu hq folosind Seleniu.

Prima vizita Motor de căutare DuckDuckGo din browserul web Firefox.

Dacă inspectați câmpul de introducere a căutării, acesta ar trebui să aibă codul search_form_input_homepage , după cum puteți vedea în captura de ecran de mai jos.

Acum, creați noul script Python ex08.py și tastați următoarele linii de coduri în script.

dinseleniuimportwebdriver
dinseleniu.webdriver.uzual.chei importTaste
browser=webdriver.Firefox(calea_executabilă=„./drivers/geckodriver”)
browser.obține(„https://duckduckgo.com/”)
searchInput=browser.find_element_by_id('search_form_input_homepage')
searchInput.send_keys(„seleniu hq”+ Taste.INTRODUCE)

Odată ce ați terminat, salvați fișierul ex08.py Script Python.

Aici browser.get () metoda încarcă pagina de pornire a motorului de căutare DuckDuckGo în browserul web Firefox.

The browser.find_element_by_id () metoda selectează elementul de intrare cu id-ul search_form_input_homepage și o stochează în searchInput variabil.

The searchInput.send_keys () metoda este utilizată pentru a trimite date de apăsare a tastei către câmpul de introducere. În acest exemplu, trimite șirul seleniu hq , iar tasta Enter este apăsată folosind Taste.ENTER constant.

De îndată ce motorul de căutare DuckDuckGo primește tasta Enter apăsați ( Taste.ENTER ), caută și afișează rezultatul.

Rulați ex08.py Script Python, după cum urmează:

$ python3 ex08.py

După cum puteți vedea, browserul web Firefox a vizitat motorul de căutare DuckDuckGo.

S-a tastat automat seleniu hq în caseta de text de căutare.

De îndată ce browserul a primit tasta Enter, apăsați ( Taste.ENTER ), a afișat rezultatul căutării.

Exemplul 6: trimiterea unui formular pe W3Schools.com

În exemplul 5, trimiterea formularului motorului de căutare DuckDuckGo a fost ușoară. Tot ce trebuia să faceți este să apăsați tasta Enter. Dar acest lucru nu va fi cazul tuturor trimiterilor de formulare. În acest exemplu, vă voi arăta o manipulare a formularelor mai complexă.

Mai întâi, vizitați Pagina Formulare HTML a W3Schools.com din browserul web Firefox. După ce pagina se încarcă, ar trebui să vedeți un exemplu de formular. Acesta este formularul pe care îl vom trimite în acest exemplu.

Dacă inspectați formularul, Nume câmpul de intrare ar trebui să aibă ID-ul fname , Nume câmpul de intrare ar trebui să aibă ID-ul numele meu , si Buton de trimitere ar trebui să aibă tip Trimite , după cum puteți vedea în captura de ecran de mai jos.

Pentru a trimite acest formular folosind Selenium, creați noul script Python ex09.py și tastați următoarele linii de coduri în script.

dinseleniuimportwebdriver
dinseleniu.webdriver.uzual.chei importTaste
browser=webdriver.Firefox(calea_executabilă=„./drivers/geckodriver”)
browser.obține(„https://www.w3schools.com/html/html_forms.asp”)
fname=browser.find_element_by_id(„fname”)
fname.clar()
fname.send_keys(„Shahriar”)
numele meu=browser.find_element_by_id('lname')
numele meu.clar()
numele meu.send_keys(„Shovon”)
buton de trimitere=browser.find_element_by_css_selector('input [type =' submit ']')
buton de trimitere.send_keys(Taste.INTRODUCE)

Odată ce ați terminat, salvați fișierul ex09.py Script Python.

Aici browser.get () metoda deschide pagina formularelor HTML W3schools în browserul web Firefox.

The browser.find_element_by_id () metoda găsește câmpurile de intrare după id fname și numele meu și le stochează în fname și numele meu variabile, respectiv.

The fname.clear () și lname.clear () metode șterge prenumele implicit (John) fname valoare și prenume (Doe) numele meu valoare din câmpurile de intrare.

The fname.send_keys () și lname.send_keys () tipul metodelor Shahriar și Shovon în Nume și Nume câmpuri de intrare, respectiv.

The browser.find_element_by_css_selector () metoda selectează Buton de trimitere a formei și o stochează în buton de trimitere variabil.

The submitButton.send_keys () metoda trimite tasta Enter apăsând ( Taste.ENTER ) la Buton de trimitere a formei. Această acțiune trimite formularul.

Rulați ex09.py Script Python, după cum urmează:

$ python3 ex09.py

După cum puteți vedea, formularul a fost trimis automat cu intrările corecte.

Concluzie

Acest articol ar trebui să vă ajute să începeți cu testarea browserului Selenium, automatizarea web și bibliotecile de casare web în Python 3. Pentru mai multe informații, consultați Documentație oficială Selenium Python .