Vous n'êtes pas identifié(e).

  • Contributions :
  • Vos boîtes de messages privés sont vides.

#1 2013-06-28 12:01:34

Mention conquering_lion
Scout
Inscription : 2013-05-23
Messages : 204

Tuto : Ruby - watir ou comment faire un petit bot tout simple

Voilà, j'en ai parlé sur un autre thread, je vous propose un petit tuto rapide sur l'utilisation de ruby et de la librairie watir pour faire un bot cliqueur..


les pré-requis :

ruby (fonctionne sur windows pour les irréductibles),
la librairie watir (à installer simplement avec le "gem install watir" dans le prompt),
et idéalement l'add-on firefox testwise recorder qui vous permet, en surfant sur la page, de générer tout le code des cliques etc ..


le fonctionnement :

- je vais sur mon site préféré
- je lance testwise qui m'enregistre ce que fait la souris/le clavier et le retranscrit en code (génère le code pour watir ou pour selenium qui est un outil dans le même style),
- donc je me log et j'upload une vidéo admettons (je mettrais à jour selon l'exemple que j'aurais pris),
- une fois l'ensemble du code généré, je le place dans mon code ruby pour reproduire la manip,
- quand je lance mon code ruby, watir ouvre un firefox (on peut choisir le navigateur à utiliser) et reproduit l'ensemble des manip codés plus haut .. à noter aussi qu'on peut réaliser ceci sans ouverture de navigateur, sur un serveur distant par ex, et on appel ca watir headless.


edit : je pense que je ferais l'exemple sur l'upload d'une vidéo sur un site de partage de vidéo roumain, j'ai la brique déjà codé dans un coin

.. j'edit le post en fin de week-end pour le concret, là je suis au boulot sad 
mais vous l'aurez compris, ruby + watir est grosso modo une bonne alternative à I-macro d'après ce que je comprend de ce dernier .. bonne alternative pour ceux qui code un peu évidement

l'intéret étant qu'ici, on peut combiner ensuite du scraping, du parsing, et tout ce qu'on veut

Dernière modification par conquering_lion (2013-06-28 12:03:10)

En ligne

#2 2013-06-28 14:12:04

Mention Plin
Scout
Inscription : 2013-06-05
Messages : 41

Re : Tuto : Ruby - watir ou comment faire un petit bot tout simple

Quel teaser big_smile !
J'attends avec impatience

Hors ligne

#3 2013-07-01 11:56:03

Mention conquering_lion
Scout
Inscription : 2013-05-23
Messages : 204

Re : Tuto : Ruby - watir ou comment faire un petit bot tout simple

et me revoilà après un pti week-end ensoleilé en bretagne (si si jvous jure !!) ..

alors je vais faire un petit mix de la brique que j'ai déjà dev afin qu'elle fonctionne en ligne direct..

grosso modo, vous devez alimenter les variables dans la fonction "main", qui va créer une instance de la class Trilulilu :

require 'uri'
require 'watir'
require 'watir-webdriver'
require 'watir-webdriver/wait'
require 'watir-webdriver/extensions/alerts'

class Trilulilu
    def initialize(username, password)
      @username = username
      @password = password
      make_agent
    end

    def login
      get_login_page
      @browser.text_field(:id, "login_username").set(@username)
      @browser.text_field(:id, "login_password").set(@password)
      begin
        @browser.button(:value,"Intra in cont!").click
        if login_successful?
          return true
        else
          return false
        end   
      rescue
        puts "error login"
      end
    end

    def upload(params)
      get_upload_page
      upload_file(params)
      fill_informations(params)
      true
    rescue
      false
    end

    def login_successful?
      ctrl_upload_page
    end

    def logout
      @browser.link(:text, "harrow").click
      @browser.link(:text, "Ie?ire cont").click
    end

private

    def get_login_page # envoi notre browser sur la page du login
      @browser.goto 'http://www.trilulilu.ro/login'
    end

    def ctrl_upload_page # envoi notre browser sur la page d'upload
      @browser.url == 'http://www.trilulilu.ro/upload'
    end   

    def get_upload_page # envoi notre browser sur la page d'upload par le lien de la page web
      @browser.link(:text, "uploadPosteaz?").click
    end

    def upload_file(params) # upload de la video
      full_path = File.expand_path params[:path]
      @browser.link(:text, "versiunea f?r? Javascript").click
      @browser.button(:value,"Click aici ca s? alegi fi?ierul de uploadat...").click
      @browser.file_field(:name, full_path ).set(full_path )
      @browser.button(:value,"Trimite").click
    end

    def fill_informations(params) # remplssage des champs pour la vidéo
      @browser.text_field(:name, "f[e0114c353766ca][title]").set(params[:title])
      @browser.area(:name, "f[e0114c353766ca][description]").set(params[:description])
      @browser.text_field(:name, "f[e0114c353766ca][tags]").set(params[:keywords])
      @browser.select_list(:name, "f[e0114c353766ca][categoryname]").select(params[:category])
      @browser.radio(:name => "f[cab438820a7d74][privacy]", :value => "friends").click
      @browser.radio(:name => "f[cab438820a7d74][privacy]", :value => "public").click
      @browser.button(:value,"Salveaz?").click
    end
   
    def make_agent #création de l'instance de notre browser robotisé smile
      @browser = Watir::Browser.new :firefox
    end
   
end   
   
    def main
      my_instance = Trilulilu.new("login","password")
      my_instance.login
      resultat = my_instance.upload ( :title => 'quoi il faut un titre?',
                            :description => 'la description de ma belle video',
                            :keywords => 'test automated video, autre keywords, another keyword',         
                            :category => 'là il faut vérifier le type de catégorie, chose que je n'ai pas fait',
                            :path => 'ma_video_dans_le_repertoire_du_script.mp4')
      puts resultat # doit ecrire true sur la sortie standard
      my_instance.logout
    end
   
   
main



en exécutant la ligne ruby fichier.rb, ca devrait ouvrir un firefox, vous logger sur le site, uploader la vidéo et délogger ensuite ...

cette brique est assez compliqué, car sur le site triluliu, vous devez vous logger avec un compte facebook, et il y a pas mal de javascript à droite à gauche, donc obligé d'utiliser watir pour simuler des cliques ... sinon dans le cas d'un site plus simple, on peut y aller directement avec mechanize (une belle librairie ruby & python)

l'objet @browser est finalement assez simple d'utilisation je trouve, vous devez juste matter le code html de la page pour avoir les bonnes infos pour les click, les fields, etc ..

en général, je fais aussi des methodes permettant de récupérer l'url de la vidéo uploadée (pour la restituer en sortie de programme)..

voili voilou
si quelqu'un la test ca serait intéressant de me faire un feedback car je l'ai codé il y a un moment mais pas eu le temps de la tester
si besoin d'éclaircissement sur un point du code n'hésitez pas !

infos complémentaire, ici nous ne sommes pas en headless, donc le script ouvre un firefox sur le pc .. je vous mettrais un lien pour le fonctionnement en headless (que je n'ai tjs pas pu tester non plus)

En ligne

#4 2013-07-11 20:12:15

Mention conquering_lion
Scout
Inscription : 2013-05-23
Messages : 204

Re : Tuto : Ruby - watir ou comment faire un petit bot tout simple

j'ai l'impression qu'il a un peu effrayé ce code ..

je vais mettre un truc simplifié histoire de pas avoir menti dans le sujet tongue

les lib à inclure dans ton fichier avec extension .rb :


require 'uri'
require 'watir'
require 'watir-webdriver'
require 'watir-webdriver/wait'
require 'watir-webdriver/extensions/alerts'

on créée l'objet browser, on lui indique l'url où aller (login) , les champs à remplir (text_field) et on click le le bouton submit :


 @browser = Watir::Browser.new :firefox
 @browser.goto 'http://www.trilulilu.ro/login'
 @browser.text_field(:id, "login_username").set(@username)
 @browser.text_field(:id, "login_password").set(@password)
 @browser.button(:value,"Intra in cont!").click

hop on est loggé.. et si on veux se délogger :

 @browser.link(:text, "harrow").click
 @browser.link(:text, "Ie?ire cont").click

j'espère que cet extrait (sans gestion d'erreur ni rien) tout simple aura été plus ludique wink

tuto ruby watir

Dernière modification par conquering_lion (2014-03-15 12:12:59)

En ligne

Pied de page des forums