Python permite crear bots que interactúan con:
páginas web
redes sociales
formularios
correos electrónicos
APIs
Y también permite enviar emails automáticos usando smtplib.
Vamos por partes.
1. Envío de correos con Python (smtplib)
Python incluye un módulo estándar para enviar emails.
Enviar un correo básico
import smtplib
from email.mime.text import MIMEText
mensaje = MIMEText("Hola, este es un mensaje automático.")
mensaje["Subject"] = "Notificación"
mensaje["From"] = "tu_correo@gmail.com"
mensaje["To"] = "destino@mail.com"
with smtplib.SMTP("smtp.gmail.com", 587) as servidor:
servidor.starttls()
servidor.login("tu_correo@gmail.com", "tu_contraseña")
servidor.send_message(mensaje)
Nota: Para Gmail, es necesario usar contraseñas de aplicación.
2. Enviar correos con HTML
html = """
<h1>Informe Diario</h1>
<p>Todo funciona correctamente.</p>
"""
mensaje = MIMEText(html, "html")
3. Enviar archivos adjuntos
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders
msg = MIMEMultipart()
msg["Subject"] = "Archivo adjunto"
msg["From"] = "tu_correo@gmail.com"
msg["To"] = "destino@mail.com"
# Adjuntar archivo
with open("informe.pdf", "rb") as f:
parte = MIMEBase("application", "octet-stream")
parte.set_payload(f.read())
encoders.encode_base64(parte)
parte.add_header("Content-Disposition", "attachment; filename=informe.pdf")
msg.attach(parte)
4. Bots con Python
Hay muchos tipos de bots:
Bots web (con Selenium)
Bots de Telegram
Bots de Discord
Bots de correo
Bots de automatización interna
Vamos a ver los más útiles para FP.
Bot con Selenium (automatización web)
Ejemplo: iniciar sesión automáticamente.
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
driver = webdriver.Chrome()
driver.get("https://example.com/login")
driver.find_element(By.ID, "usuario").send_keys("admin")
driver.find_element(By.ID, "password").send_keys("1234")
driver.find_element(By.ID, "login").click()
time.sleep(3)
driver.quit()
Bot de Telegram (muy usado en FP)
Instalación
pip install python-telegram-bot
Bot que responde mensajes
from telegram.ext import Updater, CommandHandler
def start(update, context):
update.message.reply_text("Hola, soy tu bot!")
updater = Updater("TOKEN_DEL_BOT")
dispatcher = updater.dispatcher
dispatcher.add_handler(CommandHandler("start", start))
updater.start_polling()
updater.idle()
5. Integrar Bots + Email
Aquí es donde se vuelve interesante: Un bot puede enviar correos automáticos cuando ocurre un evento.
Ejemplos:
Bot que avisa por email cuando detecta un precio bajo
Bot que envía un informe diario
Bot que notifica errores en un sistema
Bot que envía un correo cuando recibe un comando
ACTIVIDAD PRÁCTICA: “Bot de alertas que envía correos”
Objetivo: crear un bot que monitoriza una web y envía un correo si detecta un cambio.
Enunciado
Crea un programa que:
Acceda a una página web con Selenium
Extraiga un precio o dato con BeautifulSoup
Si el valor baja de un umbral, envíe un correo automático
Registre la alerta en un archivo de texto
Se ejecute cada X minutos (con
time.sleep)
Pistas
Usa
driver.page_sourceUsa
soup.find()Usa
smtplibpara enviar el correoUsa un bucle
while True
Solución propuesta (simplificada)
import time
import smtplib
from email.mime.text import MIMEText
from selenium import webdriver
from selenium.webdriver.common.by import By
from bs4 import BeautifulSoup
URL = "https://example.com/producto"
UMBRAL = 50 # precio mínimo para alertar
def enviar_alerta(precio):
mensaje = MIMEText(f"ALERTA: El precio ha bajado a {precio}€")
mensaje["Subject"] = "Alerta de precio"
mensaje["From"] = "tu_correo@gmail.com"
mensaje["To"] = "destino@mail.com"
with smtplib.SMTP("smtp.gmail.com", 587) as servidor:
servidor.starttls()
servidor.login("tu_correo@gmail.com", "tu_contraseña")
servidor.send_message(mensaje)
def monitorizar():
driver = webdriver.Chrome()
driver.get(URL)
html = driver.page_source
driver.quit()
soup = BeautifulSoup(html, "html.parser")
precio = float(soup.find("span", class_="precio").text.replace("€", ""))
if precio < UMBRAL:
enviar_alerta(precio)
with open("alertas.txt", "a") as f:
f.write(f"Alerta enviada. Precio: {precio}\n")
while True:
monitorizar()
time.sleep(300) # cada 5 minutos
Resultado esperado
Si el precio baja, recibes un email automático
Se registra la alerta en un archivo
El bot sigue funcionando en segundo plano