2013-05-09 1 views
0

см. Код ниже.
Я хочу захватить две веб-страницы.
После запуска этого кода с использованием phantomjs я получил только один снимок экрана веб-страницы (www.baidu.com).
Веб-страница в phantomjs singleton? Могу ли я открыть две веб-страницы в одном phantomjs intance?phantomjs: есть веб-страница singleton?

var webpage1 = require('webpage').create(); 
webpage1.onLoadFinished = function() { 
    webpage1.render('1.png'); 
} 
webpage1.open('http://www.google.com'); 

var webpage2 = require('webpage').create(); 
webpage2.onLoadFinished = function() { 
    webpage2.render('2.png'); 
} 
webpage2.open('http://www.baidu.com'); 

UPDATE:
спасибо @Cybermaxs
Я оттянуть конец сценария, он работает. Я получил два снимка экрана.

var webpage1 = require('webpage').create(); 
webpage1.onLoadFinished = function() { 
    webpage1.render('1.png'); 
} 
webpage1.open('http://www.google.com.cn'); 

var webpage2 = require('webpage').create(); 
webpage2.onLoadFinished = function() { 
    webpage2.render('2.png'); 
} 
webpage2.open('http://www.baidu.com'); 

setTimeout(function() { 
    console.log(webpage1.url); 
    console.log(webpage2.url); 
    phantom.exit(0); 
}, 9000); 

ответ

1

Проблема заключается в том, что PhantomJS является асинхронным от природы. Ваш скрипт закончится до

Есть много способов решить эту проблему:

Delay конец сценария

setTimeout(function() 
{ 
    phantom.exit(0); 
},5000); 

Используйте waitFor example, чтобы ждать для всех снимков экрана

Использовать метод рекурсивного подхода

var webpage = require('webpage').create(); 

webpage.open('http://www.google.com', function(status) 
{ 
if (status !== 'success') { 
      console.log('FAIL to load the address'); 
     } else 
     { 
      webpage.render('1.png'); 
      webpage.open('http://www.baidu.com',function(status) 
      { 
      if (status !== 'success') { 
         console.log('FAIL to load the address'); 
        } else 
        { 
         webpage.render('2.png'); 
        } 
        phantom.exit(0); 
      }); 
     } 
     } 
); 

Убедитесь, что вы можете одновременно открыть две страницы.

+0

Спасибо, я задерживаю конец скрипта, он работает. Я обновил свой вопрос. – hellojinjie

+0

Но я все еще смущен. В моем сценарии происхождения я не вызывал phantom.exit(), поэтому phantomjs не будет выходить в конце скрипта, phantomjs должен запускаться и запускать скриншот первой веб-страницы, а не только вторую веб-страницу – hellojinjie

Смежные вопросы