2014-02-18 2 views
0

Я пытался создать веб-скриншот с phantomjs, но, несмотря на это, получается пустое изображение. Я использую Fedora OS. Вот мой javascript.Phantomjs не создает скриншот

screen.js

 var WebPage = require('webpage'); 
     page = WebPage.create(); 
     page.open('http://google.com'); 
     page.onLoadFinished = function() { 
     page.render('googleScreenShot' + '.png'); 
     phantom.exit();} 

А вот мой PHP код

shot.php

 $exec = '/var/www/html/test/bin/phantomjs /var/www/html/test/screen.js'; 
    $escaped_command = escapeshellcmd($exec); 
    exec($escaped_command); 

Но созданный образ был blank.phantomjs есть executre разрешение. Помогите мне

ответ

3

Я не уверен, но это может работать, попробуйте

var WebPage = require('webpage'); 
    page = WebPage.create(); 
    page.open('http://google.com'); 
    page.onLoadFinished = function() { 
      window.setTimeout(function() { 
      page.render('googleScreenShot' + '.png'); 
      phantom.exit(); 
      }, 2000); 
    } 
+0

Но тот же код работал в окнах – Shin

+0

да, но javascript работает asycn. из-за этого неизвестно, когда работает процесс рендеринга, чтобы он мог работать на windows. У вас есть 2 варианта, первый из которых объясняется @victory, другим вариантом является метод waitfor(), который рассматривается по этой ссылке: https: // github .com/ariya/phantomjs/blob/master/examples/waitfor.js – esatilmis

0

У вас есть проблема, потому что во время выполнения код следующей строки кода более быстрее, чем phantomjs лесосечных что page.onLoadStarted является True.

легко и чистый способ исправить это путем добавления временной интервал 100 мс между каждой функции и выполнять весь код в функции, метод проверки Виджай Boyapati Дополнительные разъяснения: https://stackoverflow.com/a/9256079/1738230

+0

Но тот же код работал в окнах – Shin

0

В решении этой задачи I завершил модуль кода следующим образом:

link

Вы можете скачать его локально, а затем вызвать его с помощью команды

phantomjs rasterize.js "http://www.google.com" 800px*800px > wait.html 
Смежные вопросы