Underc0de

Programación Scripting => Python => Mensaje iniciado por: Once en Enero 02, 2013, 06:31:55 PM

Título: [PyQt4] CSS Extractor
Publicado por: Once en Enero 02, 2013, 06:31:55 PM
(http://www.image-share.com/upload/1969/43.png) (http://www.image-share.com/ipng-1969-43.html)
Un pequeño script que saca las hojas de estilo externas (incluidas en la etiquetas link de HTML) El código no hace mucho pero necesitaba tener claro el threading en pyqt4 antes de codear algo más "grande" y esto fue lo que salió
Código (python) [Seleccionar]

#!/usr/bin/python
# -*- coding:utf-8 -*-
# Once

from PyQt4 import QtCore, QtGui
import urllib
import time
import sys
import re

URL = ""

class GUI(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)
        self.setWindowTitle("CSS Extractor -Once-")
        self.resize(500, 500)

        self.Caja = QtGui.QVBoxLayout()
        self.Caja1 = QtGui.QHBoxLayout()
        self.Caja2 = QtGui.QHBoxLayout()
        self.Caja3 = QtGui.QHBoxLayout()
        self.Barra = QtGui.QHBoxLayout()

        self.Tab = QtGui.QTabWidget()

        self.BtnEnviar = QtGui.QPushButton("Buscar estilos")
        self.connect(self.BtnEnviar, QtCore.SIGNAL("clicked()"), self.Comprobar)

        self.TxtDireccion = QtGui.QLineEdit()
        self.TxtCSS = QtGui.QListWidget()
        self.LblBarra = QtGui.QLabel("")

        self.BtnCancelar = QtGui.QPushButton("Cancelar")
        self.connect(self.BtnCancelar, QtCore.SIGNAL("clicked()"), self.Cancelar)
        self.BtnLimpiar = QtGui.QPushButton("Limpiar")
        self.connect(self.BtnLimpiar, QtCore.SIGNAL("clicked()"), self.Clear)

        self.Caja1.addWidget(QtGui.QLabel("URL:"))
        self.Caja1.addWidget(self.TxtDireccion)
        self.Caja1.addWidget(self.BtnEnviar)

        self.Caja2.addWidget(self.Tab)

        self.Tab.addTab(self.TxtCSS, "General")

        self.Caja3.addWidget(self.BtnCancelar)
        self.Caja3.addWidget(self.BtnLimpiar)

        self.Barra.addWidget(self.LblBarra)

        self.Caja.addLayout(self.Caja1)
        self.Caja.addLayout(self.Caja2)
        self.Caja.addLayout(self.Caja3)
        self.Caja.addLayout(self.Barra)

        self.setLayout(self.Caja)

    def Comprobar(self):
        global URL
        self.Clear()
        URL = str(self.TxtDireccion.text())
        self.Hilo = Thread()
        self.connect(self.Hilo, QtCore.SIGNAL("actualizar"), self.Prueba)
        self.connect(self.Hilo, QtCore.SIGNAL("barra"), lambda X: self.LblBarra.setText(X))
        self.connect(self.Hilo, QtCore.SIGNAL("tab"), self.AddTab)
        self.Hilo.start()

    def Guardar(self):
        print "Guardar"

    def Cancelar(self):
        self.Hilo.terminate()
        self.LblBarra.setText("Cancelado por el usuario")

    def Prueba(self, Data):
        self.TxtCSS.addItem(Data)

    def AddTab(self, Data):
        Data = Data.split("[-*-]")
        self.Tab.addTab(QtGui.QTextEdit(Data[0]), Data[1])

    def Clear(self):
        self.Tab.clear()
        self.TxtCSS.clear()
        self.Tab.addTab(self.TxtCSS, "General")
        self.LblBarra.setText("")

class Thread(QtCore.QThread):
    def __init__(self):
        QtCore.QThread.__init__(self)

    def run(self):
        self.Mostrar(self.Llamar(), 2)

    def __del__(self):
        self.wait()

    def Traer(self, Url, Link):
        try:
            Buffer = urllib.urlopen(Url + Link).read() + "[-*-]" + Link
            self.Mostrar(Buffer, 3)
        except:
            self.Mostrar("Error abriendo la hoja de estilo")

    def Urls(self, Link):
        Buffer = ""
        if Link[:7] == "http://":
            Link = Link
        elif Link[0] == "/":
            Buffer = re.findall("(http://.*?\..*?)/", URL)[0] + "/"
        else:
            Buffer = re.findall("(http://.*/)", URL)[0]
        self.Traer(Buffer, Link)
        return(Link)

    def Links(self, Data):
        Buffer = ""
        Cantidad = 0
        Data = Data.replace("><", ">\r\n<")
        Expresion = re.compile('<link(.*).*?>')
        Resultado = Expresion.findall(Data)
        for i in Resultado:
            if "stylesheet" in i:
                Css = re.findall(" href *= *[\"\'](.*?)[\"|\'] *", i)
                self.Mostrar("Estilo encontrado en:" + Css[0])
                Cantidad += 1
                self.Mostrar(self.Urls(Css[0]), 2)
        self.Mostrar("%d Estilos encontrados" % Cantidad)
        return(Buffer)

    def Llamar(self):
        self.Mostrar("Abriendo web: " + URL)
        try:
            self.Links(urllib.urlopen(URL).read())
        except:
            self.Mostrar("No se pudo abrir la Web")

    def Mostrar(self, Mensaje, Opt=1):
        time.sleep(0.3)
        if Opt == 1:
            self.emit(QtCore.SIGNAL("barra"), Mensaje)
        elif Opt == 2:
            self.emit(QtCore.SIGNAL("actualizar"), Mensaje)
        else:
            self.emit(QtCore.SIGNAL("tab"), Mensaje)

if __name__ == '__main__':
    App = QtGui.QApplication(sys.argv)
    Ini = GUI()
    Ini.show()
    App.exec_()



Saludos!
Título: Re:[PyQt4] CSS Extractor
Publicado por: Kodeinfect en Enero 02, 2013, 06:48:32 PM
Excelente, iré a darle un ojo  :o
Mira por donde te vengo a ver 11sex.
Título: Re:[PyQt4] CSS Extractor
Publicado por: Snifer en Enero 02, 2013, 07:32:11 PM
Las locas andan de regreso por lo visto :$ .. 

Excelente 21 sep :D
Título: Re:[PyQt4] CSS Extractor
Publicado por: 2Fac3R en Enero 03, 2013, 08:59:28 PM
Que buen aporte brot, me sirve bastante para checkear el còdigo.

No tienes permitido ver enlaces. Registrate o Entra a tu cuenta
Excelente, iré a darle un ojo  :o
Mira por donde te vengo a ver 11sex.

3Fac2R andas por acà??? xDD

Zalu2
Título: Re:[PyQt4] CSS Extractor
Publicado por: Once en Enero 04, 2013, 01:13:32 AM
No tienes permitido ver enlaces. Registrate o Entra a tu cuenta
Excelente, iré a darle un ojo  :o
Mira por donde te vengo a ver 11sex.

CitarLas locas andan de regreso por lo visto :$ .. 

Excelente 21 sep

Así es cariño, el destino se empeña en tenernos juntos ;)

CitarQue buen aporte brot, me sirve bastante para checkear el còdigo.

Espero te sea útil

Saludos!