PhantomJS- open page with LocalStorage by default

后端 未结 2 1442
别跟我提以往
别跟我提以往 2020-12-11 05:43

I\'m using PhantomJS to get the generated source of a web page after JavaScript DOM manipulations have taken place. This web page has JUST a and no

相关标签:
2条回答
  • 2020-12-11 05:46

    I solved my problem with Friend's Help. My solution is:

    Notice: I set Timeout 10000(10 seconds) for complete load page.

    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)
        });    
    });
    
    0 讨论(0)
  • 2020-12-11 06:05

    localStorage for a particular domain is only available when you open a page on that domain. You can

    1. open some URL on the domain you're interested in,
    2. change localStorage according to your needs,
    3. open your target URL on the same domain.

    This can look like this:

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

    It's also possible not to open a full page in step 1. You can also use dummy page with some 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)
    });    
    
    0 讨论(0)
提交回复
热议问题