2014-06-13 8 views
5

Ich versuche CasperJS 'click() zu verwenden, um einem Link zu folgen, der ein Modal auf dem aktuellen Bildschirm generiert. Wenn ich den richtigen Selektor abfrage und auf ihn in der Browserkonsole klicke, document.querySelector().click() verwendend, funktioniert es, aber selbst wenn ich casper.evaluate() dieses nicht funktioniert. Ich habe jemanden gefunden, der ein sehr ähnliches Problem hatte, aber seine Frage bleibt unbeantwortet, und ich habe fast identische Probleme. casperjs button click doesn't navigate to next page der Code, den ich zur Zeit bin mit istCasperJS click() lädt kein neues html

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

die Seite I http://www.ted.com/talks/uri_alon_why_truly_innovative_science_demands_a_leap_into_the_unknown ist

+0

Haben Sie versucht mit 'casper.click ('a.rate-button');' – Fanch

+2

Die unerklärte Wahrheit über die Casperjs und Phantomjs Tags ist, dass niemand Ihnen helfen kann, das Problem zu lösen, solange Sie die nicht bereitstellen Link zu der betreffenden Seite Die Seiten, die Sie scrape, verhalten sich sehr unterschiedlich. Deshalb funktioniert das SO-Format des Postings für eine solche Frage nicht wirklich. Sie müssten hier den vollständigen Seitencode posten, was wirklich nicht erwünscht ist. Außerdem sollte Ihr Code so funktionieren wie er ist, die Seite macht etwas witziges. Wir wollen uns nicht etwas einfallen lassen, das funktionieren könnte. –

+0

@ArtjomB. Ich stimme dir eigentlich nicht zu.Das ist eine ziemlich allgemeine Frage, und obwohl Fragen nicht ideal für SO sind, gibt es hier einen konkreten Nutzen, und ich konnte einige dieser Fragen in der Vergangenheit beantworten. Auch die Seite ist jetzt verlinkt, aber ich nehme an, das ist eine neuere Entwicklung. –

Antwort

6

Es ist wirklich unmöglich zu kratzen ich versuche, diese Navigationsschritte mit dem PhantomJS Motor zu tun. Es scheint, dass die QtWebkit-Abzweigung von Phantom (Version 1.9.7) der Aufgabe nicht mehr gewachsen ist. Obwohl Ihr Code einwandfrei funktioniert wie ist mit slimerjs. Sie können bequem slimerjs durch NPM installieren:

npm install -g slimerjs 

und Ihr Skript laufen mit

casperjs --engine=slimerjs script.js 

Ich habe versucht, einige Dinge mit PhantomJS dass nicht funktionierten. Ich fügte casper.on Listener für remote.message und resource.error hinzu, aber diese zeigten keine Fehler beim Ausführen des Skripts in Phantom. logLevel: "debug" zeigte auch nichts.

Zuerst: Verwenden einer Casperjs-Funktion.

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

Zweitens: Der Versuch, explizit für die Schaltfläche (spezifisch auf die Seite), um die modale zu zeigen.

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"); 

Drittens: Lassen Sie jQuery die Arbeit machen.

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

Heute wurde ähnliches Problem festgestellt. Nach der Ausführung this.click() auf der Startseite (die ich verifiziert habe, dass PhantomJS ausgeführt wird - durch Einhängen in resource.requested und resource.received Ereignisse), blieb die aktuelle Seite auf der Startseite (und es sollte auf die geklickte Link-Seite gehen).

Lösung war auf den neuesten PhantomJS (1.9.8 in diesem Moment) zu aktualisieren.

Bitte beachten Sie, dass ich PhantomJS 1.9.7 hatte, als das oben beschriebene Problem auftrat.

+0

Es hatte wahrscheinlich einige https-Ressourcen, die notwendig waren, damit die Seite funktionierte oder die Verbindung das HTTPS-Protokoll hatte. Siehe http://stackoverflow.com/a/26417660/1816580 –

+0

@ ArtjomB. Nein, in meinem Fall gab es keine https-Ressourcen, von denen diese bestimmte Seite abhing (noch war der Link https). – pbradaric

+0

Wenn Sie auf [diese Seite] (http://phantomjs.org/release-1.9.html) schauen. Es gibt einfach keine andere Lösung, die Ihr Problem beheben könnte. Vielleicht gab es dort Weiterleitungen zu https-Ressourcen. –