javascript - PhantomJS - öppna sida med LocalStorage som standard
Jag använder PhantomJS för att få den genererade koden av en webbsida efter att JavaScript DOM-manipulationer har ägt rum. Denna webbsida har BARA en <body> och inget annat.
Viktigt: Denna webbsida använder webbläsarens localStorage för att generera sidan.
Jag vill ändra LocalStorage i PhantomJS innan jag öppnar sidan.
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)
Svar #1
localStorage för en viss domän är endast tillgängligt när du öppnar en sida på den domänen. Du kan
- öppna någon URL på domänen du är intresserad av,
- ändra
localStorageenligt dina behov, - öppna din måladress på samma domän.
Detta kan se ut så här:
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)
});
});
Det är också möjligt att inte öppna en fullständig sida i steg 1. Du kan också använda en dummy-sida med någon URL.
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)
});
Svar #2
Jag löste mitt problem med hjälp av en vän. Min lösning är:
Meddelande: Jag satte Timeout 10000 (10 sekunder) för fullständig inladdning av sidan.
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)
});
});
