CherryAS Parte I

Comenzando una librería de automation desde cero.

Algo que quiero hacer desde hace mucho tiempo es poder armar un librería que pueda usar en lugar de Selenium. Hay muchas librerías, muchos frameworks creados (casi una invasión diría) y la verdad es que quería no reinventar la rueda pero ver si podía hacer algo que sea un buen producto, sólido, basado en Webdriver.

¿Y por qué escribir todo esto? básicamente porque mi idea es poder programarlo mientras explico que hacer, cómo, que más allá de que todo sea open source quede super documentad, explicado, enseñado (de hecho mi idea es aprender MUCHO con todo esto) y que veamos cómo es el proceso de creación de software (al menos en un equipo de UNA persona). Queda planteado así el desafío.

Y por donde comenzamos esto? Por la documentación de webdriver, donde podemos obtener toda la información de los endpoints a los cuales llamar para hacer la base del asunto. Entonces que mejor para comenzar que leyendo esta hermosa documentación de algunas cientos de páginas.

Básicamente nuestro programa tiene que pegarle a la API del webdriver, con eso voy a tener gran parte de esta historia ganada.

Lo primero que necesito para jugar con mi webDriver es crear una sesión, ya que todo lo que haga luego requiere del id de esa sesión. Y obviamente debo pasarle ‘capabilities’ (recuerden que ustedes al crear el objeto de tipo webdriver en Selenium lo hacen).

import requests
import json
import subprocess

subprocess.Popen('chromedriver.exe --port=9000')
host = 'http://127.0.0.1/9000/'
capabilities={
  'desiredCapabilities':{
    'browserName':'chrome',
    'chromeoptions':{
      'binary': 'C:\\Program Files (x86)\\Google 
      Chrome\\Application\\chrome.exe'
    },
    'platform':'ANY'
  }
}
response = requests.request('POST', host+'session', data=json.dumps(capabilities).encode('utf8'))
process.terminate()

Y qué es todo este código? Vamos por lineas y comencemos por los imports.

El primero es requests, librería que va a ser la más utilizada por el simple hecho de que todo va a a ser hacer requests a mi webdriver. El segundo json, es necesario porque obviamente si voy a trabajar con requests, voy a tener que manejarme con json. El tercer import subprocess es quizá el que muchos no conocen, la idea de usar subprocesos tiene que ver con el hecho de que si yo ejecuto algo que queda vivo sin devolverme el control del programa, no voy a poder seguir ejecutando, lo cual sucede si yo ejecuto el webdriver (chromedriver en este caso) que queda vivo mientras nada lo mate.

Entonces ahora que tengo con qué trabajar, la primer linea va a ser ejecutar el webdriver en un puerto (se me ocurrió 9000 pero eso obviamente tiene que ser algo modificable por el usuario) en un subroproceso.

Luego vienen las capabilities y supongo que ese json es algo en lo que voy a tener que trabajar por mucho tiempo, por ahora, como solo quiero ver que todo funcione, voy a darle un par de cositas para tener que postear, solo le vamos a decir que usa Chrome y le vamos a decir adonde está.

Por último, solo debemos ejecutar el post que nos va a crear nuestro id de sesión, posteando a nuestro localhost/session y pasandole las capabilities. Una vez ejecutado esto, matamos el subproceso del chromedriver para finalizar.

Esto va a ser muy largo de hacer, meter nuevos videos y explicar por escrito, pero me parece un buen desafío, poder al menos explicarme que estoy haciendo por escrito, es como querer convencerme a mi, a mi blog y al público de que el código está bien.

Nos vemos la próxima para más!

2 comentarios

  1. Hola, porque tu canal se llama draculino

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

© 2020 Dracux

Tema por Anders NorénSubir ↑