(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ó
#!/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!
Excelente, iré a darle un ojo :o
Mira por donde te vengo a ver 11sex.
Las locas andan de regreso por lo visto :$ ..
Excelente 21 sep :D
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
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!