2016-02-08 5 views
5

Ich verwende PhantomJS, um die generierte Quelle einer Webseite zu erhalten, nachdem JavaScript-DOM-Manipulationen stattgefunden haben. Diese Webseite hat JUST a <body> und sonst nichts.PhantomJS - Seite mit LocalStorage standardmäßig öffnen

Wichtige: Diese Web-Seite verwendet Browser localStorage die Seite zu erzeugen.

Ich möchte LocalStorage in PhantomJS vor dem Öffnen der Seite ändern.

App.js:

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

page.open("https://sample.com") 
setTimeout(function(){ 
    // Where you want to save it  
    page.render("screenshoot.png") 
    // You can access its content using jQuery 
    var fbcomments = page.evaluate(function(){ 
     return $("body").contents().find(".content") 
    }) 
    phantom.exit(); 
}, 1000) 
+1

Sie können einige 'localStorage' Eigentum innerhalb von' page.evaluate() 'gesetzt. Hast du es versucht? Was ist das Problem? –

+1

@ArtjomB. Danke für das Bearbeiten und Kommentieren. Mein Problem ist Localstorage für Browser vor ** page.open (url) ** –

+0

Wie können Sie localStorage für eine Seite, die Sie noch nicht besucht haben, festlegen? – epascarello

Antwort

5

localstorage für eine bestimmte Domäne ist nur verfügbar, wenn Sie eine Seite auf dieser Domain öffnen. Sie können

  1. eine URL öffnen auf der Domain, die Sie interessiert,
  2. Änderung localStorage nach Ihren Bedürfnissen,
  3. öffnen Sie Ihre Ziel-URL auf der gleichen Domain.

Dies kann so aussehen:

page.open("https://sample.com/asdfasdf", function(){ 
    page.evaluate(function(){ 
     localStorage.setItem("something", "whatever"); 
    }); 

    page.open("https://sample.com", function(){ 
     setTimeout(function(){ 
      // Where you want to save it  
      page.render("screenshoot.png") 
      // You can access its content using jQuery 
      var fbcomments = page.evaluate(function(){ 
       return $("body").contents().find(".content") 
      }) 
      phantom.exit(); 
     },1000) 
    });  
}); 

Es ist auch möglich, nicht eine ganze Seite in 1. Schritt öffnen Sie auch Dummy-Seite mit einigen URL verwenden können.

page.setContent("", "https://sample.com"); // doesn't actually open any page 

page.evaluate(function(){ 
    localStorage.setItem("something", "whatever"); 
}); 

page.open("https://sample.com", function(){ 
    setTimeout(function(){ 
     // Where you want to save it  
     page.render("screenshoot.png") 
     // You can access its content using jQuery 
     var fbcomments = page.evaluate(function(){ 
      return $("body").contents().find(".content") 
     }) 
     phantom.exit(); 
    }, 1000) 
});  
+1

Das stimmt. Das funktioniert für mich. Danke @Artjom B. –

0

Ich löste mein Problem mit Friend's Help. Meine Lösung ist:

Hinweis: Ich habe Timeout 10000 (10 Sekunden) für die vollständige Seite laden.

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

page.open("https://sample.com", function(){ 
    page.evaluate(function(){ 
     var i = 0, 
     oJson = jsonData, 
     sKey; 
     localStorage.clear(); 

     for (; sKey = Object.keys(oJson)[i]; i++) { 
      localStorage.setItem(sKey,oJson[sKey]) 
     } 
    }); 

    page.open("https://sample.com", function(){ 
     setTimeout(function(){ 
     page.render("screenshoot.png") 
      // Where you want to save it  
      console.log(page.content); //page source 
      // You can access its content using jQuery 
      var fbcomments = page.evaluate(function(){ 
       return $("body").contents().find(".content") 
      }) 
      phantom.exit(); 
     },10000) 
    });  
}); 
Verwandte Themen