2014-06-13 3 views
5

Sto provando ad usare CasperJS 'click() per seguire un collegamento che genera una modale sulla schermata corrente. Quando interrogo il selettore appropriato e lo clicco sulla console del browser usando document.querySelector().click(), funziona, ma anche quando I casper.evaluate() non funziona. Ho trovato qualcuno che ha avuto un problema molto simile, ma la sua domanda rimane senza risposta, e sto vivendo problemi quasi identici. casperjs button click doesn't navigate to next page il codice Attualmente sto usando èCasperJS click() non carica nuovo codice html

this.waitForSelector('div.talk-sharing__tools a.rate-button', function() { 
    this.then(function() { 
     this.evaluate(function() { 
      document.querySelector('a.rate-button').click(); 
}); 

pagina che sto cercando di raschiare è http://www.ted.com/talks/uri_alon_why_truly_innovative_science_demands_a_leap_into_the_unknown

+0

Hai provato con 'casper.click ('a.rate-button');' – Fanch

+2

L'inedita verità sui tag casperjs e phantomjs è che nessuno può aiutarti a risolvere il problema finché non fornisci il link alla pagina in questione. Le pagine che scrivi si comportano in modo molto diverso. Questo è il motivo per cui il formato SO di pubblicazione non funziona davvero per questa domanda. Dovresti pubblicare qui il codice completo della pagina, che in realtà non è incoraggiato. Inoltre, il tuo codice dovrebbe funzionare così com'è, la pagina fa qualcosa di divertente. Non vogliamo sognare qualcosa che potrebbe funzionare. –

+0

@ArtjomB. In realtà non sono d'accordo con te su questo.Questa è una domanda piuttosto generica, e anche se le domande di scraping non sono ideali per SO, qui c'è un'utilità concreta e sono stato in grado di rispondere ad alcune di queste domande in passato. Anche la pagina è ora collegata, ma presumo che sia uno sviluppo più recente. –

risposta

6

E 'davvero impossibile fare quei passi di navigazione con il motore phantomjs. Sembra che il fork di fantasma di QtWebkit (versione 1.9.7) non sia più all'altezza del compito. Sebbene il tuo codice funzioni bene così come lo è con slimerjs. Si può comodamente installare slimerjs attraverso NPM:

npm install -g slimerjs 

ed eseguire lo script con

casperjs --engine=slimerjs script.js 

Ho provato parecchie cose con phantomjs che non ha funzionato. Ho aggiunto casper.on ascoltatori per remote.message e resource.error, ma questi non hanno mostrato errori durante l'esecuzione dello script in phantom. logLevel: "debug" inoltre non ha mostrato nulla.

Primo: Utilizzo di una funzione casperjs.

casper.thenClick("div.talk-sharing__tools a.rate-button"); 

Secondo: cercando di mostrare esplicitamente la modali per il pulsante (specifiche della pagina).

casper.then(function(){ 
    var name = this.evaluate(function(){ 
     var modal = document.querySelectorAll(".modal-wrapper > .modal")[0]; 
     modal.className += " modal--show"; 
     return modal.className; 
    }); 
    this.echo("name: "+name); // null 
}); 

casper.waitUntilVisible(".modal__head__title"); 

Terzo: Lasciate jQuery fare il lavoro.

var casper = require('casper').create({ 
    remoteScripts: [ "http://code.jquery.com/jquery-1.11.1.min.js" ] 
}); 

casper.waitForSelector(selector, function() { 
    this.evaluate(function() { 
     jQuery("a.rate-button").click(); 
    }); 
}); 
0

Si è verificato un problema simile oggi. Dopo aver eseguito this.click() nella pagina iniziale (che ho verificato che PhantomJS è in esecuzione - agganciando gli eventi resource.requested e resource.received), la pagina corrente è rimasta sulla pagina iniziale (e dovrebbe andare alla pagina di collegamento cliccata).

La soluzione era l'aggiornamento all'ultimo PhantomJS (1.9.8 in questo momento).

Si prega di notare che ho avuto PhantomJS 1.9.7 quando si è verificato il problema sopra descritto.

+0

Probabilmente aveva alcune risorse https che erano necessarie per il funzionamento della pagina o il link aveva il protocollo https. Vedi http://stackoverflow.com/a/26417660/1816580 –

+0

@ArtjomB. No, nel mio caso non c'erano risorse https da cui dipendesse questa particolare pagina (né il link https). – pbradaric

+0

Se si guarda su [questa pagina] (http://phantomjs.org/release-1.9.html). Non c'è altra soluzione che è stata introdotta per risolvere il problema. Forse lì dove reindirizzare alle risorse https. –