2015-04-14 56 views
10

我的最終目標是打開一個javascript嵌入的本地html文件,創建一個帶有多邊形的地圖,並使用PhantomJS截取它。我寫了一個簡單的JS文件來做到這一點:PhantomJS未能加載谷歌地圖

var page = require('webpage').create(); 
page.open('https://www.google.com/maps', function(status) { 
    console.log('State: ' + status); 
    if(status === 'success') { 
     page.render('example.pdf', {format: 'pdf', quality: '100'}); 
    } 
    phantom.exit(); 
}); 

這將返回錯誤:

ReferenceError: Can't find variable: google 

我已經試過這對本地的HTML文件,並使用谷歌地圖和我保持其他網站得到相同的錯誤。我已成功地在沒有谷歌地圖的情況下拍攝其他網站的屏幕截圖。搜索互聯網似乎並不像人們有這樣的問題,並已成功地採取與谷歌地圖的頁面截圖...所以我想知道什麼是錯的。

另一個注意事項:我在我的rails項目中安裝了PhantomJS作爲gem,並使用這個gem通過rails控制檯運行javascript文件。我已經嘗試過使用PhantomJS(v 2.0.0)的標準安裝,但它仍然無法正常工作。

+5

嘗試用'--ignore-SSL-錯誤= TRUE;命令行選項運行。 –

+0

我可以用'phantomjs script.js'運行你的示例代碼。但需要考慮的一件事情是:谷歌地圖切片(或者這些天的矢量數據)是由它們自己異步加載的,您可能需要在內部的'page.open'塊周圍等待幾秒鐘的時間添加'window.setTimeout'所以頁面在完全加載時呈現爲PDF格式。別的,你的PDF將會是空白/灰色的。 – chrki

+0

@ArtjomB解決方案對我不起作用:( – JustGage

回答

0

你應該給puppeter一去,它使那麼容易:

const puppeteer = require('puppeteer'); 
(async() => { 
    const browser = await puppeteer.launch(); 
    const page = await browser.newPage(); 
    await page.goto('https://example.com'); 
    await page.screenshot({path: 'example.pdf'}); 

    await browser.close(); 
})();