Introducció al seleni a Python 3

Introduction Selenium Python 3



El seleni és un marc utilitzat per provar aplicacions web. Selenium automatitza un navegador, com Chrome o Firefox, per fer proves al lloc web que desitgeu. El seleni també és una eina de rascat web molt potent. Selenium admet JavaScript i totes les funcions modernes del navegador. Aquesta eina és molt eficaç per extreure informació de llocs web.

Aquest article us mostrarà com configurar Selenium a la vostra distribució Linux (és a dir, Ubuntu), així com com es realitza l’automatització web bàsica i el desballestament web amb la biblioteca Selenium Python 3.







Requisits previs

Per provar les ordres i exemples utilitzats en aquest article, heu de tenir el següent:



1) Una distribució Linux (preferiblement Ubuntu) instal·lada al vostre ordinador.
2) Python 3 instal·lat al vostre ordinador.
3) PIP 3 instal·lat al vostre ordinador.
4) El navegador web Google Chrome o Firefox instal·lat a l’ordinador.



Podeu trobar molts articles sobre aquests temes a LinuxHint.com . Comproveu aquests articles si necessiteu més ajuda.





Preparació de l'entorn virtual de Python 3 per al projecte

L’entorn virtual Python s’utilitza per crear un directori de projectes Python aïllat. Els mòduls Python que instal·leu amb PIP s’instal·laran només al directori del projecte, en lloc de fer-ho globalment.

El Python virtualenv El mòdul s'utilitza per gestionar entorns virtuals de Python.



Podeu instal·lar Python virtualenv mòdul de forma global mitjançant PIP 3, de la següent manera:

$ sudo pip3 instal·la virtualenv

PIP3 descarregarà i instal·larà globalment tots els mòduls necessaris.

En aquest punt, el Python virtualenv el mòdul s’hauria d’instal·lar globalment.

Creeu el directori del projecte python-selenium-basic / al directori de treball actual, de la següent manera:

$ mkdir -pv python-selenium-basic / drivers

Aneu al directori del projecte recentment creat python-selenium-basic / , com segueix:

$cdpython-selenium-basic /

Creeu un entorn virtual Python al directori del projecte amb l'ordre següent:

$ Virtualenv.env

Ara s’hauria de crear l’entorn virtual Python al directori del vostre projecte. '

Activeu l'entorn virtual Python al directori del projecte mitjançant l'ordre següent:

$ font.env/ bin / activate

Com podeu veure, l'entorn virtual Python està activat per a aquest directori del projecte.

Instal·lació de la biblioteca Selenium Python

La biblioteca Selenium Python està disponible al repositori oficial Python PyPI.

Podeu instal·lar aquesta biblioteca mitjançant PIP 3, de la següent manera:

$ pip3 instal·la seleni

Ara s’hauria d’instal·lar la biblioteca Selenium Python.

Ara que la biblioteca Selenium Python està instal·lada, el següent que heu de fer és instal·lar un controlador web per al vostre navegador web preferit. En aquest article, us mostraré com instal·lar els controladors web de Firefox i Chrome per a Selenium.

Instal·lació del controlador de Firefox Gecko

El controlador Firefox Gecko us permet controlar o automatitzar el navegador web Firefox mitjançant Selenium.

Per descarregar el controlador de Firefox Gecko, visiteu GitHub llança la pàgina de mozilla / geckodriver des d’un navegador web.

Com podeu veure, v0.26.0 és l’última versió del controlador de Firefox Gecko en el moment de la redacció d’aquest article.

Per descarregar el controlador del Firefox Gecko, desplaceu-vos una mica cap avall i feu clic a l'arxiu Linux geckodriver tar.gz, en funció de l'arquitectura del vostre sistema operatiu.

Si feu servir un sistema operatiu de 32 bits, feu clic a geckodriver-v0.26.0-linux32.tar.gz enllaç.

Si feu servir un sistema operatiu de 64 bits, feu clic a geckodriver-v0.26.0-linuxx64.tar.gz enllaç.

En el meu cas, descarregaré la versió de 64 bits del controlador Firefox Gecko.

El vostre navegador us demanarà que deseu l'arxiu. Seleccioneu Guardar arxiu i després feu clic a D'acord .

L'arxiu del controlador del Firefox Gecko s'ha de descarregar a la carpeta ~ / Baixades directori.

Extraieu el fitxer geckodriver-v0.26.0-linux64.tar.gz arxiu des del fitxer ~ / Baixades al directori conductors / del directori del vostre projecte introduint l'ordre següent:

$quitrà -xzf~/Descàrregues/geckodriver-v0.26.0-linux64.tar.gz-Cconductors/

Un cop s'ha extret l'arxiu del controlador del Firefox Gecko, se n'obté un de nou conductor de gecko El fitxer binari s'hauria de crear al fitxer conductors / directori del vostre projecte, com podeu veure a la captura de pantalla següent.

Provant el controlador Selenium Firefox Gecko

En aquesta secció, us mostraré com configurar el vostre primer script Selenium Python per comprovar si el controlador Firefox Gecko funciona.

Primer, obriu el directori del projecte python-selenium-basic / amb el vostre IDE o editor preferit. En aquest article, utilitzaré Visual Studio Code.

Creeu el nou script Python ex01.py i escriviu les línies següents a l'script.

des deseleniimportaciócontrolador web
des deseleni.controlador web.comú.claus importacióClaus
des de temps importaciódormir
navegador=controlador web.Firefox(ruta_executable='./drivers/geckodriver')
navegador.aconseguir('Http://www.google.com')
dormir(5)
navegador.deixar de fumar()

Un cop hàgiu acabat, deseu el fitxer ex01.py Script Python.

Explicaré el codi en una secció posterior d’aquest article.

La següent línia configura Selenium per utilitzar el controlador de Firefox Gecko des del conductors / directori del vostre projecte.

Per provar si el controlador del Firefox Gecko funciona amb Selenium, executeu el següent ex01.py Script Python:

$ python3 ex01.py

El navegador web Firefox hauria de visitar Google.com automàticament i tancar-se al cap de 5 segons. Si això passa, el controlador Selenium Firefox Gecko funciona correctament.

Instal·lació de Chrome Web Driver

El controlador web de Chrome us permet controlar o automatitzar el navegador web de Google Chrome mitjançant Selenium.

Heu de baixar la mateixa versió del controlador web de Chrome que la del navegador web Google Chrome.

Per trobar el número de versió del navegador web Google Chrome, visiteu chrome: // settings / help a Google Chrome. El número de versió hauria de figurar al fitxer Quant a Chrome secció, com podeu veure a la captura de pantalla següent.

En el meu cas, el número de versió és 83.0.4103.116 . Les tres primeres parts del número de versió ( 83.0.4103 , en el meu cas) ha de coincidir amb les tres primeres parts del número de versió de Chrome Web Driver.

Per descarregar Chrome Web Driver, visiteu el pàgina oficial de descàrrega del controlador Chrome .

A la Versions actuals a la secció, el controlador web de Chrome per a les versions més recents del navegador web Google Chrome estarà disponible, tal com podeu veure a la captura de pantalla següent.

Si la versió de Google Chrome que utilitzeu no es troba a Versions actuals , desplaceu-vos una mica cap avall i hauríeu de trobar la versió desitjada.

Un cop feu clic a la versió correcta de Chrome Web Driver, us hauria de dirigir a la pàgina següent. Feu clic al botó chromedriver_linux64.zip , tal com s’indica a la captura de pantalla següent.

Ara s'hauria de descarregar l'arxiu Chrome Web Driver.

Ara s'hauria de descarregar l'arxiu del controlador web Chrome a ~ / Baixades directori.

Podeu extreure el fitxer chromedriver-linux64.zip arxiu des del fitxer ~ / Baixades al directori conductors / directori del vostre projecte amb l'ordre següent:

$ descomprimir~/ Descàrregues / chromedriver_linux64.cremallera-d controladors /

Un cop s'ha extret l'arxiu del controlador web Chrome, se n'ha creat un de nou riu cromat El fitxer binari s'hauria de crear al fitxer conductors / directori del vostre projecte, com podeu veure a la captura de pantalla següent.

Prova del controlador web Selenium Chrome

En aquesta secció, us mostraré com configurar el primer script Selenium Python per comprovar si el controlador web Chrome funciona.

En primer lloc, creeu el nou script Python ex02.py i escriviu les següents línies de codis a l'script.

des deseleniimportaciócontrolador web
des deseleni.controlador web.comú.claus importacióClaus
des de temps importaciódormir
navegador=controlador web.Chrome(ruta_executable='./drivers/chromedriver')
navegador.aconseguir('Http://www.google.com')
dormir(5)
navegador.deixar de fumar()

Un cop hàgiu acabat, deseu el fitxer ex02.py Script Python.

Explicaré el codi en una secció posterior d’aquest article.

La línia següent configura Selenium per utilitzar el controlador web de Chrome des de conductors / directori del vostre projecte.

Per provar si el controlador web de Chrome funciona amb Selenium, executeu el fitxer ex02.py Script Python, de la següent manera:

$ python3 ex01.py

El navegador web Google Chrome hauria de visitar Google.com automàticament i tancar-se al cap de 5 segons. Si això passa, el controlador Selenium Firefox Gecko funciona correctament.

Conceptes bàsics del rascat web amb seleni

A partir d’ara faré servir el navegador web Firefox. Si voleu, també podeu utilitzar Chrome.

Un script bàsic de Selenium Python hauria d’assemblar-se a l’escript que es mostra a la captura de pantalla següent.

Primer, importeu el seleni controlador web des del seleni mòdul.

A continuació, importeu el fitxer Claus des de selenium.webdriver.common.keys . Això us ajudarà a enviar premudes de tecles al navegador que esteu automatitzant des de Selenium.

La línia següent crea un fitxer navegador objecte per al navegador web Firefox mitjançant el controlador Firefox Gecko (Webdriver). Podeu controlar les accions del navegador Firefox mitjançant aquest objecte.

Per carregar un lloc web o URL (carregaré el lloc web https://www.duckduckgo.com ), truqueu al aconseguir() mètode de la navegador objecte al navegador Firefox.

Mitjançant Selenium, podeu escriure les vostres proves, realitzar un desballestament web i, finalment, tancar el navegador mitjançant el fitxer deixar () mètode de la navegador objecte.

A la part superior es mostra el disseny bàsic d’un script Selenium Python. Escrivireu aquestes línies en tots els vostres scripts Selenium Python.

Exemple 1: Impressió del títol d'una pàgina web

Aquest serà l’exemple més senzill que es parla de Selenium. En aquest exemple, imprimirem el títol de la pàgina web que visitarem.

Creeu el fitxer nou ex04.py i escriviu-hi les línies de codis següents.

des deseleniimportaciócontrolador web
des deseleni.controlador web.comú.claus importacióClaus

navegador=controlador web.Firefox(ruta_executable='./drivers/geckodriver')

navegador.aconseguir('Https://www.duckduckgo.com')
imprimir('Títol:% s'% navegador.títol)
navegador.deixar de fumar()

Un cop hàgiu acabat, deseu el fitxer.

Aquí, el navegador.títol s'utilitza per accedir al títol de la pàgina web visitada i al fitxer imprimir() s'utilitzarà per imprimir el títol a la consola.

Després d'executar el fitxer ex04.py script, hauria de:

1) Obriu Firefox
2) Carregueu la pàgina web desitjada
3) Obteniu el títol de la pàgina
4) Imprimiu el títol a la consola
5) I, finalment, tanqueu el navegador

Com podeu veure, el ex04.py script ha imprès molt bé el títol de la pàgina web a la consola.

$ python3 ex04.py

Exemple 2: Impressió de títols de diverses pàgines web

Com a l'exemple anterior, podeu utilitzar el mateix mètode per imprimir el títol de diverses pàgines web mitjançant el bucle Python.

Per entendre com funciona això, creeu el nou script Python ex05.py i escriviu les línies de codi següents a l'script:

des deseleniimportaciócontrolador web
des deseleni.controlador web.comú.claus importacióClaus

navegador=controlador web.Firefox(ruta_executable='./drivers/geckodriver')


urls= ['Https://www.duckduckgo.com', 'Https://linuxhint.com', 'Https://yahoo.com']
perurldinsURL:
navegador.aconseguir(url)
imprimir('Títol:% s'% navegador.títol)
navegador.deixar de fumar()

Un cop hàgiu acabat, deseu l'script de Python ex05.py .

Aquí, el urls La llista manté l'URL de cada pàgina web.

A per loop s'utilitza per iterar a través del fitxer urls elements de la llista.

A cada iteració, Selenium diu al navegador que visiti el fitxer url i obtenir el títol de la pàgina web. Un cop Selenium ha extret el títol de la pàgina web, s’imprimeix a la consola.

Executeu l'script Python ex05.py , i hauríeu de veure el títol de cada pàgina web a urls llista.

$ python3 ex05.py

Aquest és un exemple de com Selenium pot realitzar la mateixa tasca amb diverses pàgines web o llocs web.

Exemple 3: extracció de dades d'una pàgina web

En aquest exemple, us mostraré els conceptes bàsics per extreure dades de pàgines web mitjançant Selenium. Això també es coneix com a rascat web.

En primer lloc, visiteu el Random.org enllaç des de Firefox. La pàgina hauria de generar una cadena aleatòria, com podeu veure a la captura de pantalla següent.

Per extreure les dades de cadenes aleatòries mitjançant Selenium, també heu de conèixer la representació HTML de les dades.

Per veure com es representen les dades de la cadena aleatòria en HTML, seleccioneu les dades de la cadena aleatòria i premeu el botó dret del ratolí (RMB) i feu clic a Inspecciona l'element (Q) , tal com es nota a la captura de pantalla següent.

La representació HTML de les dades s'hauria de mostrar al fitxer Inspector , com podeu veure a la captura de pantalla següent.

També podeu fer clic a Icona inspecciona ( ) per inspeccionar les dades de la pàgina.

Feu clic a la icona inspecciona () i passeu el cursor per sobre de les dades de cadena aleatòries que vulgueu extreure. La representació HTML de les dades s'ha de mostrar com abans.

Com podeu veure, les dades de la cadena aleatòria s’emmagatzemen en un HTML per etiqueta i conté la classe dades .

Ara que coneixem la representació HTML de les dades que volem extreure, crearem un script Python per extreure les dades mitjançant Selenium.

Creeu el nou script Python ex06.py i escriviu les següents línies de codis a l'script

des deseleniimportaciócontrolador web
des deseleni.controlador web.comú.claus importacióClaus

navegador=controlador web.Firefox(ruta_executable='./drivers/geckodriver')

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

dataElement=navegador.find_element_by_css_selector('Pre.data')
imprimir(dataElement.text)
navegador.deixar de fumar()

Un cop hàgiu acabat, deseu el fitxer ex06.py Script Python.

Aquí, el browser.get () mètode carrega la pàgina web al navegador Firefox.

El browser.find_element_by_css_selector () El mètode cerca el codi HTML de la pàgina per cercar un element específic i el retorna.

En aquest cas, l’element seria pre.data , el per etiqueta que té el nom de la classe dades .

A sota, el pre.data s'ha emmagatzemat a la carpeta dataElement variable.

A continuació, l'script imprimeix el contingut de text de la selecció pre.data element.

Si executeu el fitxer ex06.py Script Python, hauria d’extreure les dades de cadenes aleatòries de la pàgina web, tal com podeu veure a la captura de pantalla següent.

$ python3 ex06.py

Com podeu veure, cada vegada que executo el ex06.py Script Python, extreu dades de cadenes aleatòries diferents de la pàgina web.

Exemple 4: extracció de la llista de dades de la pàgina web

L'exemple anterior us va mostrar com extreure un sol element de dades d'una pàgina web mitjançant Selenium. En aquest exemple, us mostraré com utilitzar Selenium per extreure una llista de dades d'una pàgina web.

En primer lloc, visiteu el random-name-generator.info des del navegador web Firefox. Aquest lloc web generarà deu noms aleatoris cada vegada que torneu a carregar la pàgina, tal com podeu veure a la captura de pantalla següent. El nostre objectiu és extreure aquests noms aleatoris mitjançant Selenium.

Si inspeccioneu més de prop la llista de noms, podreu veure que és una llista ordenada ( morir etiqueta). El morir L'etiqueta també inclou el nom de la classe nomLista . Cadascun dels noms aleatoris es representa com un element de llista ( al etiqueta) dins del fitxer morir etiqueta.

Per extreure aquests noms aleatoris, creeu el nou script Python ex07.py i escriviu les següents línies de codis a l'script.

des deseleniimportaciócontrolador web
des deseleni.controlador web.comú.claus importacióClaus

navegador=controlador web.Firefox(ruta_executable='./drivers/geckodriver')

navegador.aconseguir('Http://random-name-generator.info/')

nomLista=navegador.find_elements_by_css_selector('ol.nameList li')

pernomdinsnomLista:
imprimir(nom.text)

navegador.deixar de fumar()

Un cop hàgiu acabat, deseu el fitxer ex07.py Script Python.

Aquí, el browser.get () mètode carrega la pàgina web del generador de noms aleatoris al navegador Firefox.

El browser.find_elements_by_css_selector () el mètode utilitza el selector CSS ol.nameList li per trobar-ho tot al elements dins del fitxer morir etiqueta amb el nom de la classe nomLista . He emmagatzemat tots els seleccionats al elements del fitxer nomLista variable.

A per loop s'utilitza per iterar a través del fitxer nomLista llista de al elements. A cada iteració, el contingut del fitxer al element s’imprimeix a la consola.

Si executeu el fitxer ex07.py Script Python, recuperarà tots els noms aleatoris de la pàgina web i l’imprimirà a la pantalla, com podeu veure a la captura de pantalla següent.

$ python3 ex07.py

Si executeu l'script una segona vegada, hauria de tornar una nova llista de noms d'usuari aleatoris, com podeu veure a la captura de pantalla següent.

Exemple 5: enviament del formulari: cerca a DuckDuckGo

Aquest exemple és tan senzill com el primer exemple. En aquest exemple, visitaré el motor de cerca DuckDuckGo i buscaré el terme seleni hq amb seleni.

Primer, visita Motor de cerca de DuckDuckGo des del navegador web Firefox.

Si inspeccioneu el camp d'entrada de cerca, hauria de tenir l'identificador search_form_input_homepage , com podeu veure a la captura de pantalla següent.

Ara, creeu el nou script Python ex08.py i escriviu les següents línies de codis a l'script.

des deseleniimportaciócontrolador web
des deseleni.controlador web.comú.claus importacióClaus
navegador=controlador web.Firefox(ruta_executable='./drivers/geckodriver')
navegador.aconseguir('Https://duckduckgo.com/')
searchInput=navegador.find_element_by_id('search_form_input_homepage')
searchInput.enviar_ claus('seleni hq'+ Tecles.ENTRAR)

Un cop hàgiu acabat, deseu el fitxer ex08.py Script Python.

Aquí, el browser.get () mètode carrega la pàgina inicial del motor de cerca DuckDuckGo al navegador web Firefox.

El browser.find_element_by_id () El mètode selecciona l'element d'entrada amb l'identificador search_form_input_homepage i el guarda a searchInput variable.

El searchInput.send_keys () s'utilitza el mètode per enviar dades de premsa de tecles al camp d'entrada. En aquest exemple, envia la cadena seleni hq i es prem la tecla Retorn amb el botó Claus.ENTER constant.

Tan bon punt el motor de cerca DuckDuckGo rep la tecla Retorn premeu ( Claus.ENTER ), cerca i mostra el resultat.

Executeu el fitxer ex08.py Script Python, de la següent manera:

$ python3 ex08.py

Com podeu veure, el navegador web Firefox va visitar el motor de cerca DuckDuckGo.

S'ha escrit automàticament seleni hq al quadre de text de cerca.

Tan bon punt el navegador ha rebut la tecla Retorn, premeu ( Claus.ENTER ), va mostrar el resultat de la cerca.

Exemple 6: enviament d’un formulari a W3Schools.com

A l'exemple 5, l'enviament de formularis del motor de cerca DuckDuckGo va ser fàcil. Tot el que havíeu de fer era prémer la tecla Retorn. Però aquest no serà el cas de tots els enviaments de formularis. En aquest exemple, us mostraré un tractament de formularis més complex.

En primer lloc, visiteu el Pàgina de formularis HTML de W3Schools.com del navegador web Firefox. Un cop carregada la pàgina, hauríeu de veure un formulari d'exemple. Aquest és el formulari que enviarem en aquest exemple.

Si inspeccioneu el formulari, el fitxer Nom el camp d'entrada ha de tenir l'identificador fname , el Cognom el camp d'entrada ha de tenir l'identificador nom , i la Botó Envia hauria de tenir el tipus Presentar , com podeu veure a la captura de pantalla següent.

Per enviar aquest formulari mitjançant Selenium, creeu el nou script Python ex09.py i escriviu les següents línies de codis a l'script.

des deseleniimportaciócontrolador web
des deseleni.controlador web.comú.claus importacióClaus
navegador=controlador web.Firefox(ruta_executable='./drivers/geckodriver')
navegador.aconseguir('Https://www.w3schools.com/html/html_forms.asp')
fname=navegador.find_element_by_id('fname')
fname.clar()
fname.enviar_ claus('Shahriar')
nom=navegador.find_element_by_id('lname')
nom.clar()
nom.enviar_ claus('Shovon')
enviarButó=navegador.find_element_by_css_selector('input [type =' submit ']')
enviarButó.enviar_ claus(Claus.ENTRAR)

Un cop hàgiu acabat, deseu el fitxer ex09.py Script Python.

Aquí, el browser.get () mètode obre la pàgina de formularis HTML de W3schools al navegador web Firefox.

El browser.find_element_by_id () mètode troba els camps d'entrada per l'identificador fname i nom i els emmagatzema a fname i nom variables, respectivament.

El fname.clear () i lname.clear () els mètodes esborren el nom predeterminat (John) fname valor i cognom (Doe) nom valor dels camps d'entrada.

El fname.send_keys () i lname.send_keys () tipus de mètodes Shahriar i Shovon al Nom i Cognom camps d'entrada, respectivament.

El browser.find_element_by_css_selector () el mètode selecciona Botó Envia del formulari i el guarda al fitxer enviarButó variable.

El submitButton.send_keys () el mètode envia la tecla Enter prement ( Claus.ENTER ) fins al Botó Envia de la forma. Aquesta acció envia el formulari.

Executeu el fitxer ex09.py Script Python, de la següent manera:

$ python3 ex09.py

Com podeu veure, el formulari s’ha enviat automàticament amb les entrades correctes.

Conclusió

Aquest article us ajudarà a començar amb les biblioteques de proves del navegador Selenium, automatització web i desballestament web a Python 3. Per obtenir més informació, consulteu el Documentació oficial de Selenium Python .