Usando Pyautogui para automatizar interacciones web
Al trabajar como científico de datos, a menudo tengo que recopilar datos de ciertos sitios web. Algunos de estos datos, como las tablas que se encuentran en los sitios web del gobierno, deben actualizarse periódicamente y tener que actualizar manualmente sus datos desde las páginas web puede llevar mucho tiempo. Afortunadamente, Python proporciona algunas herramientas que le permiten interactuar fácilmente con los navegadores web. En este artículo, analizaremos la biblioteca de Python pyautogui y cómo se puede usar para automatizar los procesos de recopilación de datos.
Contenido
Pyautogui
Pyautogui de Python es un paquete que permite a los usuarios crear scripts que pueden simular los movimientos del mouse, hacer clic en objetos, enviar texto e incluso usar teclas de acceso rápido. Si bien no es una solución tan elegante como Selenium, pyautogui se puede usar para eludir los sistemas que bloquean el uso automatizado del navegador. En este artículo, le mostraré los conceptos básicos de pyautogui a través de un ejemplo de web scraping. Usaremos pyautogui para crear un script de Python que abrirá un navegador web, navegará a un artículo específico de Wikipedia y copiará y pegará los datos de una tabla en esa página web.
Instalando pyautogui
Si aún no tiene el paquete instalado, simplemente abra un símbolo del sistema o una terminal y realice una instalación pip (consulte el programa Introducción a Python de Udacity para obtener un repaso de los conceptos básicos de Python).
(base) C:Usersblars>pip install pyautogui
import pyautogui as pg
import time
Tenga en cuenta que también usaremos el paquete de tiempo durante esta lección, por lo que si no lo tiene, también deberá instalarlo.
A prueba de fallos
Pyautogui tomará el control de su mouse y teclado. Si por alguna razón necesita detener la ejecución del programa, simplemente use el mouse para forzar el cursor hacia la esquina superior izquierda de la pantalla. Esto activará el modo a prueba de fallas y el programa con parada.
Información del ratón()
Comencemos con una utilidad útil que se encuentra en pyautogui, mouseInfo() trae una interfaz gráfica de usuario útil:

Si bien esto brinda mucha información útil, para esta lección nos enfocaremos en la posición XY. Notará que a medida que mueve el mouse por la pantalla, cambia la posición XY. Esto le proporciona las coordenadas exactas de la ubicación actual de su mouse.
Elija un lugar en su pantalla, mueva el mouse allí y observe la Posición XY. Voy a elegir el cuadro de búsqueda en mi barra de tareas.
Mis coordenadas XY son 1101, 2090. Usando el mover a() método de pyautogui, puedo hacer que Python le diga a mi mouse que se mueva al cuadro de búsqueda. **Tenga en cuenta que lo más probable es que su XY no coincida con el mío. No intente simplemente copiar mi código, deberá reemplazar mis coordenadas XY con las suyas.
pg.moveTo(1101,2090, duration = 1)
Tenga en cuenta que la duración = 1 significa que quiero que el movimiento del mouse tome 1 segundo. Sin este argumento, el cursor del mouse simplemente salta a la siguiente ubicación. Hacer que tome uno o dos segundos es útil, no solo para ver cómo se desarrolla la tarea, sino que también parece que un ser humano real está operando el mouse y no un bot que podría ser bloqueado por las funciones de seguridad de un sitio web.
Hacer clic () y escribir ()
pg.click(1101,2090, duration = 1)
pg.write('Chrome')
time.sleep(2)
Usando las mismas coordenadas del cuadro de búsqueda, ahora use el hacer clic() función para hacer clic en este lugar. hacer clicI) usará cualquiera que sea el botón predeterminado del mouse (el mío está configurado a la izquierda). Si quieres diferenciarte, hay click izquierdo() y botón derecho del ratón() métodos disponibles.
A continuación, utilice el escribir() para escribir la palabra Chrome en la barra de búsqueda.
Entonces tiempo.dormir(2) para dar a la computadora dos segundos para responder.

Se abre la barra de búsqueda y Google Chrome es la mejor opción. Usando mouseInfo() encuentra las coordenadas XY del ícono de Google Chrome en la barra de búsqueda y envía un hacer clic() método para ir y hacer clic en él.
pg.click(1188,539, duration = 1)
time.sleep(2)
Nota: No es necesario utilizar mover a() primero. Hacer clic() se moverá a las coordenadas XY proporcionadas y hará clic en él.
Prensa()
pg.click(641, 137, duration = 1)
pg.write('en.wikipedia.org')
pg.press('enter')
time.sleep(4)
A continuación, utilice las coordenadas de la barra de búsqueda del navegador Chrome para enviar un hacer clic(). Entonces usa escribir() para entrar en en.wikipedia.org. Después, usa un nuevo método. prensa() para simular presionar la tecla Enter.
Nótese el uso de tiempo.dormir(4) para permitir que la página web se renderice.
Desplazarse()
pg.click(1286,344, duration = 1)
pg.write('List of Microsoft Windows Versions')
time.sleep(1)
pg.press('enter')
time.sleep(2)
pg.scroll(-4650)
Primero hacer clic() en la barra de búsqueda de la página principal de Wikipedia y luego use write() para enviar el texto «Lista de versiones de Microsoft Windows». Utilizar el prensa() método para simular la tecla enter.
Ahora usa un nuevo método Desplazarse() para imitar el uso de la barra de desplazamiento para mover la página hacia abajo. Tendrás que jugar un poco para encontrar el valor adecuado para tu pergamino.
Para este ejemplo, el objetivo es desplazarse hacia abajo hasta la tabla de versiones móviles aproximadamente un cuarto de la página.

arrastrar a () tecla de acceso directo ()
A continuación, utilice dos métodos nuevos: arrastre a() y tecla de acceso rápido () para copiar la información de esta tabla.
pg.moveTo(850,421, duration =2)
pg.dragTo(2473,1981, duration=2, button = 'left')
pg.hotkey('ctrlleft', 'c')
Gastado mover a() para ir a la coordenada XY justo a la izquierda de “Pocket PC 2000”. Nota, estoy usando mover a() y no hacer clic() aquí ya que no quiero un clic de ratón todavía. quiero esperar a que arrastre a() método para realizar el clic del ratón.
Té arrastre a() El método se puede usar para simular mantener presionado el botón del mouse que designamos (botón = ‘izquierda’ en este ejemplo) y arrastrar el mouse hacia abajo a la derecha. Este es el mismo efecto que hacer clic y arrastrar el mouse por el contenido de la tabla donde se resalta el texto.
Con el texto seleccionado, podemos usar el método tecla de acceso rápido () para enviar un comando de tecla de acceso rápido. En este caso estamos enviando CTRL izquierdo y C (Ctrl-C = Copiar).
Pegar en el Bloc de notas
pg.moveTo(1101,2090, duration = 1)
pg.click(1101,2090, duration = 1)
pg.write('notepad')
time.sleep(2)
pg.click(1188,539, duration = 1)
time.sleep(2)
pg.hotkey('ctrlleft','v')
Usando el mismo método que usamos para abrir Chrome, envíe pyautogui a la ventana de búsqueda de la barra de tareas, escriba «Bloc de notas» y luego haga clic en el ícono del bloc de notas de los resultados de búsqueda.
Una vez que se cargue el Bloc de notas, envíe la combinación de teclas de acceso directo CTRL V para pegar el contenido de la tabla.

Conclusión
Pyautogui no es mi destino. Para la mayoría de mis interacciones de web scraping y navegador web, uso solicitudes o selenio. Sin embargo, parece que cada vez más sitios web están agregando métodos de prevención de bots que hacen que el uso de herramientas automatizadas como el selenio sea difícil, si no imposible. Pyautogui llena ese vacío. Dado que se basa en la simulación de movimientos del mouse y pulsaciones de teclas, es difícil para los sitios web saber que no es un ser humano el que opera el navegador.
Lleve sus habilidades de Python aún más al inscribirse en el curso de introducción a Python de Udacity o en el programa de nanogrado de Python intermedio.