Посмотрите на https://github.com/sgentle/phantomjs-node. Он говорит: «Вы также можете сделать несколько процессов phantomjs, вызвав phantom.create() несколько раз, поэтому, если вам это нужно по какой-то сумасшедшей причине, выбивайте себя!»
Кроме того, https://groups.google.com/forum/#!msg/phantomjs/Uj5SV6o214w/chFBUnw3vxQJ также говорит о запуске нескольких «запросов на страницу» в одной потоке Phantom.js. Также http://daker.me/2013/07/testing-your-responsive-design-with-phantomjs.html показывает способ реализации этого с помощью библиотеки Async.
Я получил это работает со следующим кодом:
var phantom = require('phantom');
var async = require('async');
var pagesToCall = [
['http://www.google.com', 8000],
['http://www.allthingsd.com', 8001],
['http://www.wired.com', 8002],
['http://www.mashable.com', 8003],
['http://www.stackoverflow.com', 8004]
];
function callPage(pageToCall) {
console.log(new Date().getTime() + ': Started page ' + pageToCall[0]);
console.log(new Date().getTime() + ': port:' + pageToCall[1]);
phantom.create({port: pageToCall[1]}, function(ph) {
ph.createPage(function(page) {
page.open(pageToCall[0], function(status) {
console.log(new Date().getTime() + ': Opened page? %s', status);
page.set('viewportSize', {
width: 1280,
height: 800
});
page.set('settings.userAgent', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1');
var filename = pageToCall[0].replace('http:\/\/', '') + '.png';
page.render('./screenshots/' + filename, function() {
console.log(new Date().getTime() + ': Wrote page ' + pageToCall[0]);
page.close();
ph.exit();
});
});
});
});
}
//Main
async.each(pagesToCall, callPage, function (e) {
if (e) console.log(e);
});
Это быстрый хак. Я уверен, что это может быть реализовано гораздо приятнее с меньшим временем. Массив pagesToCall принимает два аргумента: URL-адрес вызываемого веб-сайта и номер порта для сокета связи с PhantomJS.
В NodeJS модули I используются:
Не знаю, из любопытства, есть ли что-то, что вы используете, что делает * одиночный * безголовый браузер на окнах? – AdamKG
Механизм для нескольких головок в Python, но не поддержка JS. Селен для безголового. Но одна виртуальная машина для каждого теста не очень легко масштабируется. – blakev
Это что без головы? Не удалось сделать win32 + selenium через пару лет, но в то время он был полностью виден. И ... ну ... куча виртуальных машин - это простой способ: P. Облака imo. – AdamKG