Afin de se protéger des robots de collecte d'adresses email, certains service WEB utilisent une obfuscation Javascript.
Cela complique les interactions entre services WEB légitimes, l'adresse email étant souvant utilisée comme clef pour identifier un utilisateur.
Vous allez voir comment :
Compléter le code fourni dans chaque langage afin de
1: from PyQt4.QtGui import * 2: from PyQt4.QtCore import * 3: from PyQt4.QtWebKit import * 4: import sys 5: 6: class Render(QWebPage): 7: def __init__(self, html): 8: self.app=QApplication([]) 9: self.view=QWebView() 10: self.page=self.view.page() 11: self.frame=self.page.mainFrame() 12: self.frame.setHtml(html) 13: self.app.processEvents() 14: self.html=self.frame.toHtml() 15: 16: def processJS(self,jscode): 17: return self.frame.evaluateJavaScript(jscode).toString() 18: 19: def render(url,jscode=None): 20: r=Render(url) 21: #print r 22: if jscode: 23: return unicode(r.processJS(jscode)) 24: html=r.html 25: return unicode(html) 26: 27: if __name__=="__main__": 28: html=""" 29: <html> 30: <head> 31: <title>Un test en HTML</title> 32: </head> 33: <body> 34: Rien 35: </body> 36: </html>""" 37: javascript="""var toto='Test de Javascript';toto;""" 38: print render(html,javascript)
1: from html_render import render 2: # deux syntaxes possibles pour render 3: # render(str) charge la page html contenue dans str, évalue le javascript et renvoie le code html modifié 4: # rendre(str1,str2) charge la page html contenue dans str1, évalue la commande javascript contenue dans str2 et renvoie le résultat 5: 6: import lxml.html 7: import lxml.etree 8: 9: # ouverture et parsage du fichier html 10: file=open("personnel.infos_admin.html") 11: tree=lxml.html.document_fromstring(file.read()) 12: 13: # à compléter
1: from html_render import render 2: import lxml.html 3: import lxml.etree 4: 5: # ouverture et parsage du fichier html 6: file=open("personnel.infos_admin.html") 7: tree=lxml.html.document_fromstring(file.read()) 8: 9: # on remplace le sources des scripts par des /tmp 10: for element in tree.xpath('//script'): 11: source=element.get('src') 12: if source: 13: element.set("src","file:///tmp/"+source.rsplit('/',1)[1]) 14: 15: # on insère jquery 16: head=tree.xpath('//head')[0] 17: eltjquery=lxml.etree.Element("script",type="text/javascript",src="file:///tmp/jquery-1.7.min.js") 18: head.append(eltjquery) 19: 20: print render(lxml.html.tostring(tree),r"""$(".mail").html();""")