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
nokogiri-xml-node.pdf
harmony.pdf
1: require 'personnel' 2: 3: labintel_personnel = Labintel::Personnel.new( 4: :source => File.open( 'personnel.infos_admin.html', 'rb').read 5: ) 6: 7: puts labintel_personnel.email
1: %w(rubygems getoptlong nokogiri harmony pp iconv).each do |lib| require lib end 2: %w( 3: get_scripts_and_fix_their_path 4: insert_jquery_library_into_source 5: extract_decoded_email 6: ) do |lib| require "personnel/#{lib}" end 7: 8: module Labintel; class Personnel 9: attr_reader :email 10: def initialize(parameters) 11: @source = parameters[:source] 12: # 13: get_scripts_and_fix_their_path # FICHIER A COMPLETER 14: # 15: insert_jquery_library_into_source # FICHIER A COMPLETER 16: # 17: @page = Harmony::Page.new( 18: Iconv.conv('utf-8', 'iso-8859-15', @doc.to_html) 19: ) 20: # 21: extract_decoded_email # FICHIER A COMPLETER 22: # 23: end
labintel/personnel/get_scripts_and_fix_their_path.rb
1: module Labintel; class Personnel; def get_scripts_and_fix_their_path() 2: @doc = Nokogiri::HTML(@source) 3: ############################################################ 4: # 5: # DEBUT A COMPLETER 6: # 7: ############################################################ 8: 9: 10: 11: 12: ############################################################ 13: # 14: # FIN A COMPLETER 15: # 16: ############################################################ 17: end; end; end
labintel/personnel/insert_jquery_library_into_source.rb
1: module Labintel; class Personnel; def insert_jquery_library_into_source() 2: ############################################################ 3: # 4: # DEBUT A COMPLETER 5: # 6: # dans le DOM de la page, insérer l'élément suivant 7: # <script src='/tmp/jquery-1.7.min.js' type='text/javascript'> 8: # 9: ############################################################ 10: 11: 12: 13: 14: 15: ############################################################ 16: # 17: # FIN A COMPLETER 18: # 19: ############################################################ 20: end; end; end
labintel/personnel/extract_decoded_email.rb
1: module Labintel; class Personnel; def extract_decoded_email() 2: ############################################################ 3: # 4: # DEBUT A COMPLETER 5: # 6: # dans la variable d'instance email, extraire le texte 7: # de l'élément ayant pour attribut class la valeur 'mail' 8: # 9: ############################################################ 10: 11: ############################################################ 12: # 13: # FIN A COMPLETER 14: # 15: ############################################################ 16: end; end; end
labintel/personnel/get_scripts_and_fix_their_path.rb
1: module Labintel; class Personnel; def get_scripts_and_fix_their_path() 2: @doc = Nokogiri::HTML(@source) 3: ############################################################ 4: # 5: # DEBUT A COMPLETER 6: # 7: ############################################################ 8: scripts = @doc.css('script') 9: scripts.each{|script| 10: script['src'] = "/tmp#{script['src']}" unless script['src'].nil? 11: } 12: ############################################################ 13: # 14: # FIN A COMPLETER 15: # 16: ############################################################ 17: end; end; end
labintel/personnel/insert_jquery_library_into_source.rb
1: module Labintel; class Personnel; def insert_jquery_library_into_source() 2: ############################################################ 3: # 4: # DEBUT A COMPLETER 5: # 6: # dans le DOM de la page, insérer l'élément suivant 7: # <script src='/tmp/jquery-1.7.min.js' type='text/javascript'> 8: # 9: ############################################################ 10: scripts = @doc.css('script') 11: jquery = Nokogiri::XML::Node.new('script',@doc) 12: jquery['src'] = '/tmp/jquery-1.7.min.js' 13: jquery['type']= 'text/javascript' 14: scripts.last.add_next_sibling(jquery) 15: ############################################################ 16: # 17: # FIN A COMPLETER 18: # 19: ############################################################ 20: end; end; end
labintel/personnel/extract_decoded_email.rb
1: module Labintel; class Personnel; def extract_decoded_email() 2: ############################################################ 3: # 4: # DEBUT A COMPLETER 5: # 6: # dans la variable d'instance email, extraire le texte 7: # de l'élément ayant pour attribut class la valeur 'mail' 8: # 9: ############################################################ 10: @email = @page.x("$('.mail').html()") 11: ############################################################ 12: # 13: # FIN A COMPLETER 14: # 15: ############################################################ 16: end; end; end
$Id: jeudi_corrige_ruby_2.txt 567 2012-05-21 07:29:58Z aicardi $