Vous n'êtes pas identifié(e).
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
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)
🔴 Hors ligne
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é
@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)
🔴 Hors ligne
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
les lib à inclure dans ton fichier avec extension .rb :
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 :
hop on est loggé.. et si on veux se délogger :
j'espère que cet extrait (sans gestion d'erreur ni rien) tout simple aura été plus ludique
Dernière modification par conquering_lion (2014-03-15 12:12:59)
🔴 Hors ligne