Advertisement
  1. Code
  2. Python 3

Cómo Aprendí a Dejar de Preocuparme y Amar la Herramienta de Capitalización

by
Read Time:9 minsLanguages:

Spanish (Español) translation by Betty (you can also view the original English article)

Resumen

Escribo un montón de tutoriales de Envato Tuts +. Estos tutoriales tienen títulos que hay que seguir ciertas reglas de capitalización. Tuts + autores nos proporciona una herramienta basada en web que toma el texto de un encabezado y devuelve una partida adecuadamente capitalizado. Cuando escribo mis tutoriales estoy tratando de entrar en el flujo, y cambiar a la herramienta de capitalización rompe mi flujo. Utilicé para improvisar y hacer la capitalización yo.

Resulta que muchas veces he cometido errores, que causó un trabajo extra a los Tuts + editores que tuvieron que corregir. Ser un programador, decidió programar mi salida para el problema. Todavía escribo mis propias partidas, pero cuando he terminado, corro un poco que Python programa analiza mi artículo, detecta todas las cabeceras y ejecuta la herramienta a través Tuts + capitalización y correctamente capitaliza todos los rubros.

Puesto que la herramienta de capitalización es una aplicación basada en web y no un API, tuve que automatizar el navegador para poder invocarlo y extraer las partidas capitalizadas. En este tutorial, usted aprenderá a controlar el navegador en Python a través de selenio y hacer su hacer una oferta.

Cómo Aprovechar las Partidas

Capitalización de partidas no es ciencia espacial, pero no resulta trivial. Existen varios estilos, con cierta superposición y algunas variaciones. Esto es más o menos el consenso:

  • Capitalizar todas las palabras con cuatro o más letras.
  • Siempre mayúsculas las palabras de la primeras y la últimas.
  • No aprovechar artículos: un, una, la.
  • No capitalizar corto conjunciones: y, o, ni, pero, sin embargo.

Luego hay un montón de excepciones y situaciones especiales (por ejemplo partida corrientes a la línea siguiente). Pero esto es todo discutible. Aunque he decidido escribir mi propio código de capitalización entonces Tuts + ya escogió su sabor y necesito para ajustarse a su estilo seleccionado.

El Convertidor de Caso en Línea

La herramienta de capitalización Tuts + es una herramienta interna destinada a ser utilizado por Tuts+ instructores solamente, así que no puedo usar como un demo. Sin embargo, he encontrado una herramienta similar llamada Title Case Converter. Es una aplicación web con un área de texto grande donde escribes tu dirección (o título), un botón de convertir que usted haga clic para enviar el formulario, un área de salida que aparece con una partida adecuadamente capitalizado y finalmente un botón Copiar que copia la partida se puede convertir a la portapapeles.

The Online Case ConverterThe Online Case ConverterThe Online Case Converter

Un Plan para la Automatización de la Herramienta de Capitalización

Vale. Voy a utilizar el convertidor en línea del caso, pero no hay ninguna API. Esto no es un gran problema. Puedo automatizar el navegador y simular un usuario escribiendo el título en el campo de entrada, haga clic en el botón convertir, a la espera de la salida Mostrar, haga clic en el botón copiar y por último pegar la partida adecuadamente capitalizada desde el portapapeles.

El primer paso es escoger una automatización de navegador. Elegí WebDriver de selenio, que he utilizado con éxito antes. El resto del plan es:

  • Abra el navegador.
  • Navegar a la URL de conversor de caso en línea.
  • Encontrar todos los elementos necesarios.
  • Rellenar el campo de entrada.
  • Enviar el formulario.
  • Espere a la salida.
  • Haga clic en el botón Copiar.
  • Lea el epígrafe mayúsculas desde el portapapeles.

El código fuente completo puede encontrarse en GitLab.

Introducción a Selenium

El selenio ha sido automatización de navegadores desde 2004. En 2008 se fusionó con el proyecto WebDriver, que aborda algunas de las limitaciones de la original selenio (por ejemplo, funcionando en el entorno limitado de JavaScript).

El selenio ofrece el sabor original de selenio llamado Selenium RC (Control remoto). También tiene un IDE para escribir pruebas automatizadas y una herramienta llamada Selenium Grid que Selenium RC para suites de prueba grande que deben funcionar en varios entornos. Nos limitamos a acceso mediante programación al navegador a través de la API WebDriver (a.k.a. selenio 2).

Instalación de Selenium y un Controlador de Web

Selenio la instalación es tan simple como pipenv selenium. Si no estás familiarizado con Pipenv, si deseas Volver a Python Empaquetado Con Pipenv. También es necesario un controlador web específicas. Hay controladores de la web para distintos navegadores y back-ends. Puede encontrar la lista completa en la Página Web de Selenium.

Elegí el controlador web de Chrome para este tutorial. Aquí es la última versión.

Es un simple zip que contiene un único archivo ejecutable (hay versiones de Linux, macOS y Windows). Una vez que lo hayas descargado, descomprimirlo y colocar en su camino.

¡Felicidades! Ahora estás listo para usar selenio WebDriver de Python.

Lanzamiento del Navegador

Selenio es muy fácil lanzar un navegador. Como tienes el controlador correcto de la web en tu camino, solo importar el módulo de selenium.webdriver y llamar al método apropiado para el lanzamiento de su navegador de preferencia:

Navegar a una Dirección URL

Una vez que un objeto de controlador, puede llamar el método get() para navegar a cualquier página web. Aquí es cómo navegar al convertidor de la caja de título:

Buscar Elementos

Necesitamos una manera de ubicar los elementos en la página que desea interactuar con. La forma más sencilla es inspeccionar la página web en el navegador y buscar los ID de los elementos del objetivo. En la siguiente pantalla, usted puede ver que el campo de entrada tiene el id "título":

Finding ElementsFinding ElementsFinding Elements

El botón de convertir no tiene ninguna identificación, pero que no es un problema, como veremos pronto. Aquí está el código para localizar el formulario y los campos de texto por id:

Si un elemento con que quiere interactuar no tiene un id, encontrarás con varios otros métodos tales como nombre, nombre de la clase o selector CSS. Ver todas las opciones en esta guía de Selenium.

Por ejemplo, para localizar el botón de convertir, he utilizado su nombre de clase:

Rellenar Campos de Texto

Para rellenar el campo de entrada, podemos utilizar el método send_keys() de nuestro elemento de campo de entrada. Pero claro primero. De lo contrario, sólo a añadir al texto existente.

Fue bastante fácil.

Clic en Botones y Envío de Formularios

Ahora, es momento de enviar el formulario. Puede hacerlo de dos maneras:

  • Busque el elemento de formulario en la página y llamar a su método submit().
  • Encontrar el botón de convertir y haga clic en él.

Inicialmente presenté el formulario directamente:

Por alguna razón, no funciona. No hay ningún error, pero no pasa nada. No pasé mucho tiempo investigando ya que el punto entero de selenio y este tutorial es para simular a una persona. Así que utiliza el otro método y solo hacer clic en el botón que aparece anteriormente:

Esperando el Envío del Formulario

El convertidor de caso en línea es algo elegante. El campo de salida no existe inicialmente. Después de hacer clic en el botón convertir y se envía el formulario, se muestra la salida junto con el botón Copiar. Eso significa que tenemos que esperar hasta que el envío del formulario se complete antes de que aparece el botón de copia y nosotros podemos click para copiar el resultado en el portapapeles.

El selenio te tiene cubierto. Tiene soporte para la espera de condiciones arbitrarias y tiempo si no se materializan. Aquí está el código que espera el botón Copiar. Crea un objeto WebDriverWait con un tiempo de espera de 5 segundos. A continuación, crea una condición para la presencia de un elemento con el copyButton de nombre de clase, y luego llama al método until() del objeto de esperar con la condición.

El resultado es que después de hacer clic en el botón convertir, esperará hasta que el botón de copia demuestra para arriba o tiempo después de cinco segundos. Si todo está bien, devuelve el elemento copyButton.

Leyendo el Título de Capitalización

Usted puede leer el contenido de los campos de texto con field.get_attribute('value'). Pero, como mencioné antes, el Convertor de caso es un poco elegante. Su salida es una estructura anidada de los palmos y los divs, y cuando pasa el cursor sobre cada parte de la producción, que le dice por se escribe con mayúscula o no.

Podría desglosar de este laberinto y analizar el título real, pero hay una manera más fácil. El botón copiar copia el título capitalizado en el portapapeles. Podemos sólo Haz clic en el botón y leer el título desde el portapapeles. He utilizado el módulo de Portapapeles, que puede instalar con pipenv install clipboard. El código siguiente borra el Portapapeles al copiar una cadena vacía en él, haga clic en el botón de copia y Lee varias veces el Portapapeles hasta que no esté vacío.

Aprovechando un Descuento Todo Documento

Vale. Podemos aprovechar una sola partida. Puse este código en una sola función:

Ahora, armado con esta capacidad, podemos analizar un artículo entero y capitalizar todos los rubros. Escribo mis tutoriales en descuento. Todos mis títulos comienzan con uno o más valores de hash (#).

Definí una función auxiliar que toma una línea y, si contiene un encabezado, capitaliza correctamente con la función capitalize_heading() y devuelve el resultado. Lo principal es remover todos los hashes y espacios principales y restaurarlos más tarde. No podemos alimentar un título con los principales espacios porque confunde el conversor en línea de caja:

En este punto, podemos aprovechar una línea de descuento. Es el momento para capitalizar un documento entero de descuentos. Este código es bastante simple: iterar sobre todas las líneas, aprovechar cada línea que comienza con un hash y devolver el texto correctamente capitalizado:

def capitalize_all_headings(markdown):

La función principal tiene un documento de descuento entrado lo capitaliza y guarda el resultado como "capitalized.md", que puedes consultar y utilizar. Lo unico a tener cuidado es si el documento de descuento contiene no partida líneas que comienzan con un hash. Esto puede suceder si se dirige a bloques de código que contienen Python o bash Comentarios.

Dato curioso: el tutorial que estás leyendo ahora mismo fue capitalizado con este programa.

Conclusión

Automatizar el navegador le permite controlar mediante programación de aplicaciones web que no proporcionan una API. Esto es útil sobre todo para la forma de llenado y otras actividades web interactiva (clic en "Siguiente" en muchas EULAs?).

Selenium fue diseñado principalmente para pruebas de aplicaciones web, pero es muy bueno automatizar cualquier interacción basada en navegador. Si piensas un poco, probablemente puede encontrar muchas aplicaciones web que pueden automatizar y hacer su vida más fácil.

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.