//Démarrage de d une instance de casperjs var casper = require('casper').create({ ViewportSize:{ width: 2500, height: 1000}, pageSettings: { loadImages: false, loadPlugins: false}, waitTimeout: 10000}); //Création permettant de simuler la navigation web //Affichage des arguments de la ligne de commande casper.echo('Argument 1 : ' + replaceAll(casper.cli.args[0], "_", " ")); casper.echo('Argument 2 : ' + replaceAll(casper.cli.args[1], "_", " ")); casper.echo('Argument 3 : ' + casper.cli.args[2]); //Paramètres du script var gare_depart, gare_arrivee, type_etude; var date_jour, date_depart, date_fin, nb_jours, num_jour; gare_depart = replaceAll(casper.cli.args[0], "_", " "); gare_arrivee = replaceAll(casper.cli.args[1], "_", " "); type_etude = casper.cli.args[2]; //1 = on récupère tout l historique, autre = on ne récupère que les prems (premier jour de mise en vente) date_jour = new Date(); if (type_etude==11) { date_depart=new Date(date_jour.getFullYear(),date_jour.getMonth(), date_jour.getDate(), date_jour.getHours() + 1, 0, 0); date_fin = new Date(date_jour.getFullYear(), date_jour.getMonth() + 1, date_jour.getDate() + 1, 0, 0, 0); } else if (type_etude==12) { date_depart = new Date(date_jour.getFullYear(), date_jour.getMonth() + 1, date_jour.getDate() + 1, 0, 0, 0); date_fin = new Date(date_jour.getFullYear(), date_jour.getMonth() + 2, date_jour.getDate() + 1, 0, 0, 0); } else if (type_etude==13) { date_depart = new Date(date_jour.getFullYear(), date_jour.getMonth() + 2, date_jour.getDate() + 1, 0, 0, 0); date_fin = new Date(date_jour.getFullYear(), date_jour.getMonth() + 3, date_jour.getDate() + 1, 0, 0, 0); } else { date_depart = new Date(date_jour.getFullYear(), date_jour.getMonth()+3, date_jour.getDate(), 0, 0, 0); date_fin = new Date(date_jour.getFullYear(), date_jour.getMonth()+3, date_jour.getDate()+1, 0, 0, 0); } nb_jours = diffdate(date_depart,date_fin); num_jour=0; //Définition des variables var fs = require('fs'); //Création d un objet permettant de gérer les entrées / sorties avec le DD var base_url="https://www.oui.sncf/"; var heure_depart = date_depart.getHours(); var date_ext = new Date(); //Démarrage de la navigation casper.start(base_url); //Retraitement du jour et de l heure de départ en fonction de la date et de l heure du jour. casper.then(function() { this.waitForSelector('div.vsb-search'); }); casper.then(function(){ Rechercher() }); casper.run(); function Rechercher() { //Appel de la fonction de remplissage casper.then(function(){ RemplissageFormulaireRecherche(); }); casper.then(function(){ ExecutionRecherche(this); }); } function RemplissageFormulaireRecherche(){ casper.echo('Nom de la page : ' + casper.getTitle()); casper.echo('Date et heure de depart retenue : ' + DateToStr(date_depart) + ' ' + DateExtractHeureToStr(date_depart)); casper.echo('Date de fin de l etude : ' + DateToStr(date_fin)); casper.echo('Nombre de jours de l etude : ' + nb_jours); casper.echo('--- Debut remplissage des caracteristiques du trajet ---'); //Gare de départ casper.then(function() { casper.echo('Ok debut gare de depart : ' + gare_depart); casper.click('div#d2d-autocomplete-origin-train div.booking-ico-close'); casper.wait(500); casper.click('input[id="vsb-origin-train"]'); casper.sendKeys('input[id="vsb-origin-train"]', gare_depart, {keepFocus: true}); casper.waitForSelector('li[id="vsb-origin-0"]'); casper.then(function() { casper.click('li[id="vsb-origin-0"]'); }); }); casper.echo('Ok fin gare de depart : ' + gare_depart); //Gare de destination casper.then(function() { casper.echo("Ok debut gare d arrivee : " + gare_arrivee); casper.click('div#d2d-autocomplete-destination-train div.booking-ico-close'); casper.wait(500); casper.click('input[id="vsb-destination-train"]'); casper.sendKeys('input[id="vsb-destination-train"]', gare_arrivee, {keepFocus: true}); casper.waitForSelector('li[id="vsb-destination-0"]'); casper.then(function() { casper.click('li[id="vsb-destination-0"]'); }); casper.echo("Ok fin gare d arrivee : " + gare_arrivee); }); //Date de départ casper.then(function() { var strDateDepart=DateToStr(date_depart); casper.echo('OK debut date du voyage : ' + strDateDepart); casper.click('input[id="vsb-departure-date-train"]'); var nbMois = date_depart.getMonth()-date_jour.getMonth(); casper.waitForSelector('span[class="button next idp-right"]'); casper.then(function(){ for (i=1;i<=nbMois;i++){ casper.click('span[class="button next idp-right"]'); } casper.then(function(){ casper.click('td[date="' + strDateDepart+ '"]'); }); }); }); //Heure de départ casper.then(function() { casper.echo('OK debut heure du voyage ' + DateExtractHeureToStr(date_depart)); casper.click('select[id="vsb-departure-time-train"]'); casper.sendKeys('select[id="vsb-departure-time-train"]', DateExtractHeureToStr(date_depart), {keepFocus: true}); casper.echo('OK fin heure du voyage ' + DateExtractHeureToStr(date_depart)); }); } //Exécution de la recherche function ExecutionRecherche(){ casper.then(function() { casper.capture('RechSNCF.png'); casper.echo('--- Fin remplissage des caracteristiques du trajet ---'); casper.echo('--- Debut recherche des tarifs ---'); casper.click('button[id="vsb-booking-train-submit"]'); casper.wait(10000); //this.waitForSelector('button.btn-link.next-btn'); }); casper.then(function check() { casper.echo('Train trouve'); RecupereDonnees(); }); } //Extraction des résultats de la recherche et factorisation jusqu à la date de fin function RecupereDonnees() { //Récupération des résultats de la recherche et factorisation sur nb_jours casper.then(function() { casper.echo('--- Fin recherche des tarifs ---'); casper.echo('--- Debut extraction des resultats ---'); var resultats=[]; var i=0; for(i=0; i