2016-02-08 17 views
5

Tôi đang sử dụng PhantomJS để nhận nguồn được tạo của một trang web sau khi thao tác với JavaScript DOM đã diễn ra. Trang web này có JUST một số <body> và không có gì khác.PhantomJS- mở trang bằng LocalStorage theo mặc định

quan trọng: Trang web này sử dụng trình duyệt của localStorage để tạo trang.

Tôi muốn thay đổi LocalStorage trong PhantomJS trước khi mở trang.

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

Bạn có thể đặt một số thuộc tính 'localStorage' bên trong' page.evaluate() '. Bạn đã thử chưa? Vấn đề là gì? –

+1

@ArtjomB. cảm ơn bạn đã chỉnh sửa và nhận xét. Vấn đề của tôi là đặt localstorage cho trình duyệt trước ** page.open (url) ** –

+0

Làm thế nào để bạn có thể đặt localStorage cho một trang bạn chưa truy cập? – epascarello

Trả lời

5

localStorage cho một tên miền đặc biệt chỉ có sẵn khi bạn mở một trang trên tên miền đó. Bạn có thể

  1. mở một số URL trên tên miền mà bạn đang quan tâm,
  2. thay đổi localStorage theo yêu cầu của bạn,
  3. mở URL mục tiêu của bạn trên cùng một tên miền.

này có thể trông như thế này:

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

Cũng có thể không mở một trang đầy đủ ở bước 1. Bạn cũng có thể sử dụng trang giả với một số 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) 
});  
+1

Đúng vậy. Công việc đó cho tôi. Cảm ơn @Artjom B. –

0

Tôi đã giải quyết được sự cố của mình với Trợ giúp của bạn bè. Giải pháp của tôi là:

Lưu ý: Tôi đặt Hết thời gian 10000 (10 giây) cho trang tải đầy đủ.

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) 
    });  
}); 
Các vấn đề liên quan