Automatizar navegación
Clase 13 de 24 • Curso de Introducción a Selenium con Python
Contenido del curso
Clase 13 de 24 • Curso de Introducción a Selenium con Python
Contenido del curso
Gerardo Alberto Soto Alvarez del Castillo
Fredy Mendoza Vargas
Miguel Angel Reyes Moreno
Korpi delfin
Jorge Chirinos
Miguel Angel Velazquez Romero
Hernan Felipe Diaz
Lautaro Cabral
Omar Rodríguez Aldama
Luis Antonio Ibarra Salgado
ANDRES ALFONSO MIRA MEJIA
estefany Liza
Miguel Angel Reyes Moreno
Jhonatan David Ibarra Lavado
jason alejandro martinez jimenez
Juan Antonio Aramburo Pasapera
Sebastián Andrade
Héctor Daniel Vega Quiñones
Emilio Ciappi
Omar Rodríguez Aldama
Jorge Heli Rueda Uribe
Katy García Bedoya
Jorge Heli Rueda Uribe
Esteban Henao
David Fernando Prieto Ayala
Camilo Cadavid Cardona
Miguel Andres Rendon Reyes
Miguel Andres Rendon Reyes
Cristian David Restrepo Marin
Miguel Angel Reyes Moreno
DAVID EDUARDO BAEZ SANCHEZ
Fredy Mendoza Vargas
Lista de comandos para WebDriver con su descripción, comparación y ejemplo: https://www.techbeamers.com/important-selenium-webdriver-commands/
Gracias por el aporte
Maravilloso aporte, ¡gracias!
import unittest from selenium import webdriver from time import sleep class CompareProducts(unittest.TestCase): def setUp(self): self.driver = webdriver.Chrome(executable_path = r'.\chromedriver.exe') driver = self.driver driver.implicitly_wait(30) driver.maximize_window() driver.get("https://www.google.com/") def test_browser_navigation(self): driver = self.driver search_field = driver.find_element_by_name('q') search_field.clear() search_field.send_keys('platzi') search_field.submit() driver.back()#retroceder navegador sleep(3) #espera 3 segundos driver.forward() #avanzar sleep(3) driver.refresh() # actualizar página sleep(3) def tearDown(self): self.driver.implicitly_wait(3) self.driver.close() if __name__ == "__main__": unittest.main(verbosity = 2)
Como puedo pegar mi cogido como este?
simplemente copiar y pegar?
Así:
Paso 1: Precinas el boron que dice codigo. Paso 2: Copias y pegas el codigo entre las 3 colmillas. Paso 3: Le indicas que lenjuage es de esta forma
print("Hola Mundo")
Hola. estoy tratando de acceder a Platzi con Selenium pero no me permite, me detecta como un Bot, alguna solución para este tipo de sitios?
Freddie: Te atreves a usar mis propios hechizos contra mí, Potter?
puedes agregar mas tiempo y pausas a las acciones, agregar un proxy rotativo, una vpn rotativa, pero lo mas importante es el tiempo en el que envias tus acciones
mi internet es tan lento que no necesito sleep XD
Para que el tiempo de espera no sea tan robótico se puede usar la librería random.
Se importa la librería: import random
Sentencia: sleep(random.uniform(5.0, 10.0))
Tiempo de espera entre 5 a 10 segundos, por ejemplo. Saludos!
Comparto mi codigo fuente
import unittest from pyunitreport import HTMLTestRunner from selenium import webdriver from time import sleep class Alerts(unittest.TestCase): def setUp(self): self.driver = webdriver.Chrome("D:\webdriver-chrome/chromedriver.exe") driver = self.driver driver.implicitly_wait(50) driver.maximize_window() driver.get('https://google.com/') def test_browser_navigation(self): driver = self.driver search_field = driver.find_element_by_name('q') search_field.clear() search_field.send_keys('platzi') search_field.submit() driver.back() #Regresar a la pagina anterior sleep(3) driver.forward() #Avanzar a la pagina posterior sleep(3) driver.refresh() #Actualizar la pagina sleep(3) def tearDown(self): self.driver.quit() if __name__ == "__main__": unittest.main(verbosity=2,testRunner=HTMLTestRunner(output="reportes", report_name="prueba_asssert"))
Las clases de este módulo fueron muy sencillas, entendibles y bien explicadas. Si sabes inglés es muy fácil de entender qué es lo que hacen las instrucciones de Selenium.
noo, Profe que cool, esto esta magnifico, lo estoy implementando en una encuesta diaria que se hace en la empresa, ahora necesito que esto se ejecute diario ¿Como se haría?
creo que se podría hacer como un script bash en la terminal de comandos, dando la orden de que ejecute tu script de python diariamente a tal hora. :D
Puedes agendar que se ejecuten scripts recurrentemente con crontab que está en practicamente todas las distribuciones de Linux. Deberás tener tu computadora encendida, claro.
No se podia usar el implicitly_wait como lo veniamos haciendo en lugar del sleep ?
De hecho utilizar sleep es una mala práctica en general, lo mejor es usar pausas explícitas o implícitas.
En mi caso, hubo veces que me sentí obligado a pone un sleep, porque de lo tan rápido que va, no llega a cargar la página y me da un error.
import unittest from pyunitreport import HTMLTestRunner from selenium import webdriver class CompareProducts(unittest.TestCase): def setUp(self): self.driver = webdriver.Chrome(executable_path='./chromedriver') driver = self.driver driver.implicitly_wait(30) driver.maximize_window() driver.get('https://www.google.com/') def test_browser_navigation(self): driver = self.driver search_field = driver.find_element_by_id('q') search_field.clear() search_field.send_keys('Platzi') search_field.submit() driver.back() driver.forward() driver.refresh() def tearDown(self): self.driver.close() if __name__ == '__main__': unittest.main(verbosity=2, testRunner= HTMLTestRunner(output= 'reports', report_name= 'hello-world-report'))
¿Cual sería entonces la diferencia entre driver.implicitly_wait(30) y sleep(3)? Gracias y saludos.
Básicamente, sleep(3) pone la ejecución de selenium, a dormir por exactamente el tiempo definido, en este caso 3. Si el elemento se encuentra antes de ese tiempo, la ejecución del código, no puede continuar antes de 3, por eso usar éste método, para esperar por elementos web, es una mala práctica. Mientras que con driver.implicitly_wait(30), se espera un máximo de 30 a que el elemento exista, si ésto sucede antes, la ejecución del programa continúa a partir del momento en que el elemento fué encontrado, sin esperar el tiempo que le falta para llegar a 30.
Excelente. ¡Muchas gracias!
Cual es la diferencia entre una pausa
sleep(3)
y una pausa implicita como
driver.implicitly_wait(15)
<code> No se pero a mi no me funciona el sleep
cuando uso
search_field('platzi')
arroja search_field('platzi') TypeError: 'WebElement' object is not callable
tuve que hacer la prueba con
search_field.send_keys('platzi')
El clásico sleep, puede ser contra producente para hacer automatización, con lo que para eso podemos importar otros módulos que se verán más adelante.
Para trabajar con los elementos del navegador como retroceder utilizamos: instancia.forwad() y shaaaa, luego para retroceder, solo tenemos que poner: instancia.back()
import unittest from selenium import webdriver from time import sleep #este modulo es para realizar las pausas y ver lo que sucede en el navegador class NavigationTest(unittest.TestCase): def setUp(self): self.driver = webdriver.Chrome(executable_path=r'./chromedriver.exe') driver = self.driver driver.implicitly_wait(30) driver.maximize_window() driver.get('https://google.com/') def test_browser_navigation(self): driver = self.driver #identificamos la barra de busqueda search_field = driver.find_element_by_name('q') #limpiamos search_field.clear() #enviamos el termino de busqueda search_field.send_keys('Platzi') #envio la busqueda search_field.submit() #retrocedo una pagina atras en el navegador driver.back() #pongo una pausa para ver lo que hace el navegafor sleep(3) #avanzo una pagina adelante driver.forward() #pongo una pausa para ver lo que hace el navegafor sleep(3) #refresco la ventana del navegador driver.refresh() #pongo una pausa para ver lo que hace el navegafor sleep(3) def tearDown(self): self.driver.quit() if __name__ == '__main__': unittest.main(verbosity=2)
23 comandos esenciales de Selenium WebDriver
En esta clase pudimos navegar en la web de manera automática
automatic_navigation.py
import unittest from pyunitreport import HTMLTestRunner from selenium import webdriver from selenium.webdriver.chrome.options import Options class NavigationTest(unittest.TestCase): @classmethod def setUpClass(cls): options = Options() options.add_argument('--headless') options.add_argument('--no-sandbox') options.add_argument('--disable-dev-shm-usage') cls.driver = webdriver.Chrome(executable_path = '/usr/bin/chromedriver' , options=options) driver = cls.driver driver.get('https://google.com') def test_browser_navigation(self): driver = self.driver search_field = driver.find_element_by_name('q') search_field.clear() search_field.send_keys('platzi') search_field.submit() driver.back() #Retroceder en la navegación web driver.forward() #Avanzar en la navegación web driver.refresh() #Actualizar ventana del navegador @classmethod def tearDownClass(cls): cls.driver.quit() if __name__ == '__main__': unittest.main(verbosity = 2)
Entendido
import unittest from selenium import webdriver from api_data_mock import ApiDataMock from selenium.webdriver.support.ui import Select # Modulo para poder seleccionar del dropdown from time import sleep class NavigationTest(unittest.TestCase): def setUp(self): self.driver = webdriver.Chrome(executable_path = r'./chromedriver.exe') driver = self.driver driver.implicitly_wait(30) driver.maximize_window() driver.get('https://google.com/') def test_browser_navigation(self): driver = self.driver search_field = driver.find_element_by_name('q') #Borrar lo que hay en la barra de busqueda search_field.clear() search_field.send_keys('cursos flask') search_field.submit() #Par retorceder driver.back() sleep(1) #Para avanzar driver.forward() sleep(1) #Para refrescar driver.refresh() sleep(1) def tearDown(self): self.driver.implicitly_wait(5) self.driver.close() if __name__ == '__main__': unittest.main(verbosity=2)
Muchas gracias