Breaking

Post Top Ad

Your Ad Spot

viernes, 14 de junio de 2019

Comenzando con Selenium y Python

Introducción

La automatización del navegador web está ganando popularidad y han surgido muchos marcos / herramientas para ofrecer servicios de automatización a los desarrolladores.
La automatización del navegador web a menudo se usa para propósitos de prueba en entornos de desarrollo y producción, aunque también se usa a menudo para el rastreo de datos de fuentes públicas, análisis y procesamiento de datos.
En realidad, lo que haga con la automatización depende de usted, pero asegúrese de que lo que está haciendo es legal, ya que los "bots" creados con herramientas de automatización a menudo pueden infringir las leyes o los términos de servicio de un sitio.
Selenium es una de las herramientas más utilizadas para la automatización del navegador web, y ofrece una gran cantidad de funcionalidad y poder sobre un navegador.
Es compatible con muchos lenguajes como C #, Java, Perl, PHP y Ruby, aunque por este tutorial, lo usaremos con Python en Windows.

¿Qué es el selenio?

Selenium es una gran herramienta que permite a los desarrolladores simular usuarios finales con solo unas pocas líneas de código. Usando las herramientas que ofrece, es muy fácil usar páginas web y simular a un humano, aunque es difícil replicar realmente el comportamiento humano.
Para combatir los "bots", que están destinados a replicar humanos, muchos sistemas sofisticados se usan para reconocer comportamientos de tipo humano, que es imposible de replicar utilizando herramientas de programación.
Si está creando una aplicación con Selenium, asegúrese de cumplir con todas las leyes asociadas con la automatización del navegador web, o simplemente la utilice para realizar pruebas en su propio entorno de producción.
Algunas de las tareas más populares realizadas con Selenium incluyen, entre otras:
  • Botones de clic
  • Ingresar texto
  • Extrayendo texto
  • Acceso a las cookies
  • Pulsando teclas

Prerrequisitos

Antes de comenzar, tendremos que hacer algunas cosas para configurar:
  • Instale Google Chrome en su computadora: simularemos un usuario en Google Chrome, aunque podría simular otros navegadores, pero para este artículo usaré Google Chrome.
  • Obtén chromedriver.exe , porque para simular realmente el navegador necesitarás una ruta a este ejecutable en tu computadora.
  • Instale el paquete de selenio usando pip install seleniumla línea de comando.

Los basicos

Muy bien, ahora estamos listos para comenzar a trabajar con Selenium. Lo primero que debes hacer es iniciar el navegador:
from selenium import webdriver

EXE_PATH = r'path\to\chromedriver.exe'  
driver = webdriver.Chrome(executable_path=EXE_PATH)  
driver.get('https://google.com')  
Ejecutando esto abrirá Google Chrome y lo navegará a https://google.com.
Aquí, es importante tener en cuenta que la conexión a la página web se realiza con la get(URL)función del driverobjeto.
Como habrás notado, el driveres el WebDriverobjeto Selenium , lo usas para acceder al navegador mediante programación, por ejemplo:
print(driver.page_source)  
El código anterior imprime el código fuente HTML de toda la página. Si necesitas recopilar datos, esto es muy útil.

Elementos de localización

Por lo general, no necesita el contenido de una página completa, sino elementos específicos.
Para hacerlo, primero deberá detectar su objetivo en la página, y para eso puede usar la herramienta Inspeccionar elemento en Google Chrome.
Eso significa que si necesita el contenido de un determinado elemento de la página, para obtener el ID de las etiquetas, puede hacer lo siguiente (en una sesión regular de Google Chome):
  • Clic derecho sobre el elemento.
  • Elija "inspeccionar"
  • Y en la nueva ventana, puede echar un vistazo al HTML del elemento y la ID será después id=.
Al obtener los elementos que necesitamos, podemos realizar diferentes tipos de operaciones en ellos.

Obtención de elementos por ID

Si tiene un ID exacto del elemento que está buscando, es fácil recuperarlo:
element = driver.find_element_by_id('element_id')  

Obteniendo elementos por nombre

Similar al enfoque anterior:
element = driver.find_element_by_name('element_name')  

Obtención de elementos por clase

Y de nuevo, similar al enfoque anterior:
element = driver.find_element_by_class_name('element_class_name')  

Obtención de elementos por etiqueta HTML

En algunos casos, es posible que desee obtener todos los elementos mediante una etiqueta determinada:
links = driver.find_elements_by_tag_name('a')  
En este caso, linksse rellena con todas las aetiquetas, que ahora contiene cada enlace en la página. Esto puede ser útil para propósitos de rastreo web.

Obtención de elementos por XPath

No todos los elementos tienen una ID, o tal vez no quiera acceder a todas las aetiquetas HTML. Hay otras formas de recuperar un elemento muy específico, como XPath , que es otra forma de recuperar elementos. Con XPath, puedes encontrar elementos de manera más fácil y eficiente:
tag_list = driver.find_elements_by_xpath("//tag[@attr='val']")  
tag_listahora contiene cada uno tagque tiene un atributo attrestablecido en val:
<tag attr='val'>Foo</tag>  
Ahora puedes iterar tag_liste interactuar con cada Selenium WebElementen él.
Puede leer más sobre el sistema XPath en Selenium aquí .

Selenium WebElement

Un Selenio WebElementrepresenta prácticamente un elemento HTML. Puedes realizar operaciones en estos elementos de manera similar a como lo harías como usuario final.
Estas operaciones incluyen:
  • Acceso a propiedades simples del elemento, como el texto dentro de ( element.text)
  • Accediendo a elementos padre, que también son de tipo WebElementelement.parent).
  • Acceso a atributos específicos, como el hrefde una aetiqueta ( element.get_attribute('href'))
  • Buscando dentro de él (de la misma manera que buscarías driver)
  • Haciendo clic en él ( element.click())
  • Ingresando texto si es posible ( element.send_keys(‘Input Text'))

Selenium WebDriver

WebDriverEs similar a WebElement, sin embargo, la principal diferencia es su alcance. El alcance de este último es el elemento en sí mismo, mientras que el alcance del primero es la página completa.
También puedes hacer muchas cosas con un WebDriverobjeto de Selenium , prácticamente cualquier cosa que puedas hacer como un humano con un navegador normal.
Algunas otras cosas muy útiles son:
  • Ejecutando JavaScript: driver.execute_script("script")
  • Guardando una captura de pantalla: driver.save_screenshot('image.png')
  • Inicie en "modo sin cabeza", donde el navegador ahorra tiempo al no mostrar la página:
from selenium.webdriver.chrome.options import Options

options = Options()  
options.headless = True  
driver = webdriver.Chrome(executable_path=EXE_PATH, chrome_options=options)  
driver.set_window_size(1440, 900)  
Tenga en cuenta que el tamaño de la ventana se establece en (1440, 900), es decir, para evitar todo tipo de errores relacionados con algunos elementos que no se cargan correctamente debido al modo sin cabeza.
Puede cambiar la resolución a cualquier otra resolución razonablemente grande, pero debe asegurarse de que la resolución cambie de los valores predeterminados cuando se entra en modo sin cabeza.

Acceso a las cookies

Es posible que necesite agregar o eliminar las cookies del navegador :
ck = {'some_attr': 'foo', 'some_other_attr': 'bar'}  
driver.add_cookie(ck)  
Esto agrega una cookie al navegador, que puede ser útil si necesita agregar cookies de autenticación o de preferencia, por ejemplo. Es importante asegurarse de que la cookie esté en dictformato.
También es muy fácil recuperar las cookies desde el navegador:
cookies = driver.get_cookies()  
for ck in cookies:  
    print(ck)
El código de arriba imprime cada cookie en el navegador.

Alterando el HTML

A veces es posible que necesite cambiar la propiedad de un elemento determinado.
Como se mencionó anteriormente, puede usar un Selenium WebDriverpara ejecutar JavaScript, y cambiar las propiedades de los elementos para que sea muy fácil hacerlo con JavaScript:
driver.execute_script("arguments[0].setAttribute('attr','value')", element)  
Aquí elementestá el elemento a alterar, attres el atributo a cambiar y valuees el nuevo valor.
A veces es posible que necesite descargar un archivo de un sitio web:
from selenium import webdriver  
from selenium.webdriver.chrome.options import Options

options = Options()  
options.add_experimental_option("prefs", {  
    "download.default_directory": r"path\to\directory",
    "download.prompt_for_download": False,
    "download.directory_upgrade": True,
    "safebrowsing.enabled": True
})

driver = webdriver.Chrome(executable_path=EXE_PATH, chrome_options=options)  
Puede especificar la ruta de la ubicación de guardado definiendo download.default_directory, como por ejemplo path\to\directory.

Pulsando teclas

import time  
from selenium.webdriver import ActionChains  
from selenium.webdriver.common.keys import Keys

action = ActionChains(driver)  
for _ in range(3):  
    action.send_keys(Keys.ARROW_DOWN)
    time.sleep(.1)
action.perform()  
Este código presiona la flecha hacia abajo ( Keys.ARROW_DOWN) 3 veces. Después de cada uno action.send_keys(Keys.ARROW_DOWN)el programa espera un poco. Esto se recomienda para asegurarse de que todas las claves se registren.
Si simplemente ejecutamos varios comandos, es posible que se pierdan en el proceso y no se registren.
Keyscontiene todas las teclas del teclado, lo que significa que también puede usar este método para tabular ( Keys.TAB) entre los elementos de la página, lo que facilita la interacción con él ( Keys.RETURNy también Keys.SPACEes muy importante).

Botones de clic

Tenga en cuenta que puede usar las pulsaciones de teclas para navegar entre los elementos de una página, por ejemplo, puede usar las Tabulaciones y Espacios para rellenar las casillas de verificación y las teclas de flecha para navegar entre los elementos del menú desplegable.
Por supuesto, una forma más natural de seleccionar casillas de verificación y elementos desplegables sería simplemente recuperar el elemento utilizando el controlador y hacer clic en él:
checkbox = driver.find_element_by_id('checkbox')  
checkbox.click()  

Introducción de formularios

También puede simular pulsaciones de teclas dentro de los propios elementos:
element.send_keys(Keys.CONTROL, 'a')  
element.send_keys(value)  
De esta manera, las teclas se registran en el interior element, de modo que si desea completar una textarea, puede hacerlo así.
Por cierto, este código utiliza un método abreviado de teclado (CTRL + A) para seleccionar todo el texto dentro del elemento. La siguiente línea reemplaza el texto seleccionado con el valueingresado.
Para registrar los atajos de teclado, pase todas las teclas deseadas en los parámetros a send_keys.

De desplazamiento

A veces, partes de la página solo se cargan después de que se desplaza hacia abajo (como un feed de Instagram o cualquier otra página de desplazamiento infinito). Esto se puede hacer fácilmente mediante la ejecución de un script de JavaScript simple:
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")  
El código anterior utiliza un comando de JavaScript para desplazarse a la parte inferior de la página, ahora puede usarlo driver.page_sourcenuevamente y obtener el nuevo contenido.

Conclusión

Selenium es una de las herramientas más utilizadas para la automatización del navegador web, y ofrece una gran cantidad de funcionalidad y poder sobre un navegador controlado por humanos.
Se utiliza principalmente para pruebas / automatización de entornos de producción o integración, aunque también puede usarse como raspador web para fines de investigación, etc. Asegúrese de cumplir todas las leyes cuando practique el raspado web de contenido público para no infringir ninguna ley. las leyes

No hay comentarios.:

Publicar un comentario

Dejanos tu comentario para seguir mejorando!

Post Top Ad

Your Ad Spot

Páginas