2014-01-12 1 views
6

PhantomJS ist ein kopfloser WebKit-Browser. Ich kann eine URL damit öffnen und Inhalt einer Seite erhalten, die jede Sekunde aktualisiert.offene Tabs mit Phantomjs wie echte Browser

Aber ich muss den Inhalt von vielen (100) Seiten zur gleichen Zeit bekommen.

Alle Seiten müssen gleichzeitig geöffnet und jede Sekunde aktualisiert werden.

Es ist möglich für eine Seite, aber ich kann nicht von mehreren Seiten auf einmal abrufen.

Dies ist die example code from the PhantomJS website:

console.log('Loading a web page'); 
var page = require('webpage').create(); 
var url = 'http://www.phantomjs.org/'; 
page.open(url, function (status) { 
    //Page is loaded! 
    phantom.exit(); 
}); 

Darf ich auf einmal viele PhantomJS Instanzen verwenden? Das scheint nicht der beste Weg zu sein. Weiß jemand, wie man nur eine PhantomJS-Instanz öffnet und Inhalte von mehreren Seiten erhält? Hier

+0

können Sie mehr 'page' Instanzen erstellen? Vielleicht ein Array? – Unsigned

+0

ich bin nicht sicher ... Beacuse Seite muss für lange Zeit geöffnet ... auch ich bin ein Anfänger in Javascript .. kann mich erklären? – MOB

+0

@Unsigned kann mir ein Beispiel zeigen? – MOB

Antwort

4

ist der Code, habe ich vor, die Elemente für den E-Shop zu analysieren und setzen HTML-Code für jede Seite dieser Elemente

Ich hoffe, dass es Ihnen helfen!

var RenderUrlsToFile, system, url_string_for_array; 
var arrayOfUrls = new Array(); 

system = require("system"); 

RenderUrlsToFile = function(urls, callbackPerUrl, callbackFinal) { 
var getFilename, next, page, retrieve, urlIndex, webpage, link_name, sex; 

var fs = {}; 
fs = require('fs'); 

urlIndex = 0; 
webpage = require("webpage"); 
page = null; 
// getFilename = function() { 
//  return "parsed/" + urlIndex + ".png"; 
// }; 
next = function(status, url, file) { 
    page.close(); 
    callbackPerUrl(status, url, file); 
    return retrieve(); 
}; 
retrieve = function() { 
    var url; 
    if (urls.length > 0) { 
     url = urls.shift(); 
     urlIndex++; 
     page = webpage.create(); 
     page.viewportSize = { 
      width: 800, 
      height: 600 
     }; 
     page.settings.userAgent = "Phantom.js bot"; 
     return page.open("http://" + url, function(status) { 
      var file; 
      // file = getFilename(); 
      if (status === "success") { 
       return window.setTimeout((function() { 
        // page.render(file); 

        var js = page.evaluate(function() { 
          return document; 
         }); 

        fs.write('your_file_path'.html', js.all[0].outerHTML, 'w'); 

        return next(status, url, file); 
       }), 100); 
      } else { 
       return next(status, url, file); 
      } 
     }); 

    } else { 
     return callbackFinal(); 
    } 
}; 
return retrieve(); 
}; 

if (system.args.length > 1) { 
arrayOfUrls = Array.prototype.slice.call(system.args, 1); 
} else { 

------------ Hauptteil CODE FÜR IHRE FRAGE ------

Zum Beispiel: Ich brauche die Elemente auf der E-Shop analysieren , so nehme ich die erste Seite und dann setze ich „für“ für die genau numbe Seiten

url_string_for_array = "www.lamoda.ru/c/559/accs-muzhskieaksessuary/?genders=men&page=1"; 

for(var k=2; k<20; k++) 
    { 
     url_string_for_array += ",www.lamoda.ru/c/559/accs-muzhskieaksessuary/?genders=men&page="+k; 
    } 

arrayOfUrls = url_string_for_array.split(','); 
} 

RenderUrlsToFile(arrayOfUrls, (function(status, url, file) { 
if (status !== "success") { 
    return console.log("Unable to render '" + url + "'"); 
} else { 
    return console.log("Rendered '" + url + "'"); 
} 
}), function() { 
return phantom.exit(); 
});