2016-11-30 2 views
1

PhantomJS заработало некоторое время, но неожиданно он не работает нормально.PhantomJS не умеет захватывать

Я попытался захватить этот сайт, но изображения не загружены и снимок экрана сохранен. Для этих сайтов есть данные, которые будут импортированы в Ajax,

Во время загрузки сайта:

TypeError: undefined is not an object (evaluating 'naver.main.myteam.init').

Кажется, что эта ошибка не вызывает синтаксис для вызова данных в Ajax.

См. Прикрепленный код и текст ошибки. Я приложу файл скриншота и скриншоты результатов, которые я хочу.

var resourceWait = 300, 
    maxRenderWait = 10000, 
    url = 'https://m.naver.com'; 

var page = require('webpage').create(), 
    count = 0, 
    forcedRenderTimeout, 
    renderTimeout; 

page.settings.javascriptEnabled = true; 
page.settings.webSecurityEnabled = false; 
page.settings.userAgent = 'Mozilla/5.0 (Windows NT 6.0) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.41 Safari/535.1'; 

function doRender(){ 
    page.render('naver-mobile.png'); 
    phantom.exit(); 
} 

page.onResourceRequested = function(req){ 
    count += 1; 
    console.log('> ' + req.id + ' - ' + req.url); 
    clearTimeout(renderTimeout); 
}; 

page.onResourceReceived = function(res){ 
    if(!res.stage || res.stage === 'end'){ 
     count -= 1; 
     console.log(res.id + ' ' + res.status + ' - ' + res.url); 
     if(count === 0){ 
      renderTimeout = setTimeout(doRender, resourceWait); 
     } 
    } 
}; 

page.open(url, function(status){ 
    if(status !== "success"){ 
     console.log('Unable to load url'); 
     phantom.exit(); 
    }else{ 
     forcedRenderTimeout = setTimeout(function(){ 
      console.log(count); 
      doRender(); 
     }, maxRenderWait); 
    } 
}); 

Failed файл скриншот:

failed screenshot file

Я хочу результат скриншот файла:

I want result screenshot file

ответ

1

Вы не можете этого сделать, потому PhantomJS не имеет window.Audio функции:

ReferenceError: Can't find variable: Audio 

И это вызывает много ошибок ..

Вы должны использовать slimerjs - это почти такой же интерфейс, и работает на вершине FireFox, вам также необходимо установить Xvfb для работы с ним.

# xvfb Linux Example: 
pkill [X,x]vfb; pkill nw; Xvfb :1 -screen 1 1440x900x24 >/dev/null 2>&1 & 

# Adding the symbolic links: 
ln -sf /path/to/firefox /usr/local/bin -v; \ 
ln -sf /path/to/slimerjs /usr/local/bin -v 

export DISPLAY=:1.1; slimerjs test.js >>/dev/stdout 

Я проверил следующий SlimerJS сценарий, он отлично работает:

function on_init (page){ 
page.viewportSize = {width:1024,height:768} 
page.evaluate(function(){ 
screen = {width:1024,height:768,availWidth:1024,availHeight:768}; 
innerWidth=1024; innerHeight=768; outerWidth=1024; outerHeight=768; 
window.navigator = { 
plugins: {length: 2, 'Shockwave Flash': {name: 'Shockwave Flash', filename: '/usr/lib/flashplugin-nonfree/libflashplayer.so', description: 'Shockwave Flash 11.2 r202', version: '11.2.202.440'}}, 
mimeTypes: {length: 2, "application/x-shockwave-flash": {description: "Shockwave Flash", suffixes: "swf", type: "application/x-shockwave-flash", enabledPlugin: {name: 'Shockwave Flash', filename: '/usr/lib/flashplugin-nonfree/libflashplayer.so', description: 'Shockwave Flash 11.2 r202', version: '11.2.202.440'}}}, 
appCodeName: "Mozilla", 
appName: "Netscape", 
appVersion: "5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36", 
cookieEnabled: 1, 
languages: "en-US,en", 
language: "en", 
onLine: 1, 
doNotTrack: null, 
platform: "Linux x86_64", 
product: "Gecko", 
vendor: "Google Inc.", 
vendorSub: "", 
productSub: 20030107, 
userAgent: "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36", 
geolocation: {getCurrentPosition: function getCurrentPosition(){},watchPosition: function watchPosition(){},clearWatch: function clearWatch(){}}, 
javaEnabled: function javaEnabled(){return 0} };});}; 

var page = require('webpage').create(); page.onInitialized=function(){on_init(page)} 

page.open('https://m.naver.com',function(status){ 
setTimeout(function(){ 
page.render('naver-mobile.png');phantom.exit();console.log('Done!'); 
},5000); 
}); 
+1

Не писать скриншот синхронная операция? – Vaviloff

+0

Я попытался запустить его, как это было, но это не удалось. – zeronine09

+0

Кажется, что проблема связана с JavaScript, прикрепленным к этому сайту (https://m.naver.com). – zeronine09

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