2012-06-19 13 views
5

Soy nuevo en phantomjs, script Java y WebScraping en general. Lo que quiero hacer es autenticación HTTP básica y luego visitar otra URL para obtener información. Esto es lo que tengo hasta ahora. Por favor dime que estoy haciendo mal.iniciar sesión en una página web usando phantomjs y Jquery

var page = require('webpage').create(); 
var system = require('system'); 

page.onConsoleMessage = function(msg) { 
    console.log(msg); 
}; 

page.onAlert = function(msg) { 
    console.log('alert!!>' + msg); 
}; 

page.settings.userName = "foo"; 
page.settings.password = "bar"; 

page.open("http://localhost/login", function(status) { 
    console.log(status); 
    var retval = page.evaluate(function() { 
     return "test"; 
    }); 
    console.log(retval); 

    page.open("http://localhost/ticket/" + system.args[1], function(status) { 
     if (status === "success") { 
      page.injectJs("jquery.min.js"); 
      var k = page.evaluate(function() { 
       var a = $("div.description > h3 + p"); 

       if (a.length == 2) { 
        console.log(a.slice(-1).text()) 
       } 
       else { 
        console.log(a.slice(-2).text()) 
       } 
      //return document.getElementById('addfiles'); 
      }); 

     } 
    }); 
    phantom.exit(); 
}); 

Estoy pasando un argumento a este archivo: un número de ticket que se adjunta a la 2da URL.

+0

hay una discusión sobre este tema momento que estoy pasando en Google Groups. Podría hacer una idea relacionada con esto: https://groups.google.com/forum/?fromgroups=#!topic/phantomjs/20z8N8rwITw –

Respuesta

9

Recomendaría CasperJS para esto.

CasperJS es una navegación de secuencias de comandos de utilidad & pruebas de código abierto escrito en Javascript y en base a PhantomJS - el motor WebKit sin cabeza scripts. Facilita el proceso de definición de un escenario completo de navegación y proporciona funciones útiles de alto nivel, los métodos & azúcar sintáctica para realizar tareas comunes tales como:

  • Definición de navegación navegación & pedido steps
  • llenar & formas que presentan
  • clic & siguientes enlaces
  • captura de pantallas de una página (o parte de ella)
  • pruebas DOM remota
  • eventos de registro
  • la descarga de recursos, entre ellos unos binarios
  • escritura de pruebas funcionales, guardar los resultados como XML JUnit
  • raspado contenidos web

(desde el sitio web CasperJS)

Recientemente, pasé un día tratando de obtener PhantomJS solo para hacer cosas como llenar un formulario de inicio de sesión y na navegar a la siguiente página.

CasperJS tiene un propósito API agradable construido para formas también:

http://docs.casperjs.org/en/latest/modules/casper.html#fill

var casper = require('casper').create(); 

casper.start('http://some.tld/contact.form', function() { 
    this.fill('form#contact-form', { 
     'subject': 'I am watching you', 
     'content': 'So be careful.', 
     'civility': 'Mr', 
     'name':  'Chuck Norris', 
     'email':  '[email protected]', 
     'cc':   true, 
     'attachment': '/Users/chuck/roundhousekick.doc' 
    }, true); 
}); 

casper.then(function() { 
    this.evaluateOrDie(function() { 
     return /message sent/.test(document.body.innerText); 
    }, 'sending message failed'); 
}); 

casper.run(function() { 
    this.echo('message sent').exit(); 
}); 
+1

Vale la pena mencionar que casperjs es difícil de ejecutar en el nodo, tienes que usar 'casperjs 'en cambio. – Akshat

+0

http://stackoverflow.com/questions/13376189/login-with-casperjs –

Cuestiones relacionadas