2016-11-30 217 views
1

PhantomJS直到前段時間才運行,但突然它不能正常工作。PhantomJS無法捕獲

我試圖捕捉到這個網站,但圖像不加載,然後將截圖保存。對於這些網站,有數據導入到阿賈克斯,

在網站加載:

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

看來,這個錯誤不會導致語法來調用數據的阿賈克斯。

請參閱附件代碼和錯誤文本。我將附上屏幕截圖文件和我想要的結果的屏幕截圖。

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 screenshot file

我想結果截圖文件:

I want result screenshot file

回答

1

你不能這樣做,因爲PhantomJS還沒有window.Audio功能:

ReferenceError: Can't find variable: Audio 

,它會導致很多錯誤..

您需要使用slimerjs - 它幾乎相同的API,以及適用於火狐的頂部,你還需要安裝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