Skip to content

Instantly share code, notes, and snippets.

@ssalvatella
Created June 13, 2018 00:33
Show Gist options
  • Save ssalvatella/6acaf5d6f61a29c49d305030f80b67e5 to your computer and use it in GitHub Desktop.
Save ssalvatella/6acaf5d6f61a29c49d305030f80b67e5 to your computer and use it in GitHub Desktop.
Pequeño ejemplo de script de web scraping sobre la web plusdede.com
import time
import subprocess
from bs4 import BeautifulSoup
from PIL import Image
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
URL = "https://www.plusdede.com"
opciones = Options()
opciones.set_headless(headless=True)
opciones.add_argument("log-level=3")
# Arrancamos el navegador
navegador = webdriver.Chrome("chromedriver", chrome_options=opciones)
def guardar_captcha(elemento, ruta):
# Obtenemos la posición y la medida del elemento
posicion = elemento.location
medida = elemento.size
# Guardamos una imagen de la página en la ruta indicada
navegador.save_screenshot(ruta)
# Utilizamos la librería para abrir la imagen en memoria
image = Image.open(ruta)
# Obtenemos las coordenadas a recortar de la imagen
izquierda = posicion['x']
arriba = posicion['y']
derecha = posicion['x'] + medida['width']
abajo = posicion['y'] + medida['height']
# Recortamos la imagen para dejar solo el captcha
imagen = image.crop((izquierda, arriba, derecha, abajo))
# Guardamos la imagen después de recortarla
imagen.save(ruta, 'png')
return image
def login(usuario, contraseña):
print("Entrando en Plusdede.com para realizar login...")
navegador.get(URL + "/login")
captcha = navegador.find_element_by_css_selector("img")
guardar_captcha(captcha, "captcha.png") # guarda el captcha en un fichero
Image.open("captcha.png").show() # mostramos la imagen en el visor por defecto
# Se escribe el captcha y se pone en el input
texto_captcha = input("Introduce los números de la imagen: ")
campo_captcha = navegador.find_element_by_id("input-captcha")
campo_captcha.clear()
campo_captcha.send_keys(texto_captcha)
# Se escribe el usuario y la contraseña en el resto de campos
campo_usuario = navegador.find_element_by_id("input-email")
campo_usuario.clear()
campo_usuario.send_keys(usuario)
campo_contraseña = navegador.find_element_by_name("password")
campo_contraseña.clear()
campo_contraseña.send_keys(contraseña)
boton_entrar = navegador.find_element_by_css_selector("button")
boton_entrar.click()
# Esperamos un máximo de 3 segundos a que aparezca el elemento 'username' en la página
try:
WebDriverWait(navegador, 3).until(
EC.presence_of_element_located((By.CLASS_NAME, 'username'))
)
except TimeoutException:
return False
return True
def mostrar_capitulos_pendientes():
print("Tienes pendientes los siguientes capítulos: ")
# Utilizamos BeautifulSoup para parsear el código de la página del navegador
pagina = BeautifulSoup(navegador.page_source, "html.parser")
# Obtenemos todos los elementos que contengan capítulos
capitulos = pagina.findAll("div", {"class": "media-container"})
# Recorremos cada capitulo
for capitulo in capitulos:
# Obtenemos el nombre del capítulo
nombre = capitulo.find("div", {"class": "media-title"}).getText()
# Obtenemos el enlace a la serie
enlace = capitulo.find("a", {"data-container": "body"})['href']
# Imprimimos por pantalla cada capítulo pendiente de ver
print("-> " + nombre + " " + enlace)
## SCRIPT ## ---
if login("ErKilloKoh", "tzuqng"):
print("Logeado correctamente!")
mostrar_capitulos_pendientes()
else:
print("Error en el login.")
navegador.quit() # Cerramos el navegador
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment