2015-04-14 8 views
10

Il mio obiettivo finale è aprire un file html locale con javascript incorporato, creare una mappa con poligoni e scattare uno screenshot di esso utilizzando PhantomJS. Ho scritto un semplice file JS per fare questo:PhantomJS non riesce a caricare Google Maps

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(); 
}); 

Questo restituisce l'errore:

ReferenceError: Can't find variable: google 

Ho provato questo su un file HTML locale e su altri siti web utilizzando le mappe di Google e io continuo ottenendo lo stesso errore Ho avuto successo nel prendere uno screenshot di altri siti web senza google maps. Cercando su Internet non sembra che le persone abbiano avuto problemi come questo, e hanno avuto successo nel prendere screenshot di pagine con google maps ... quindi mi sto chiedendo cosa potrebbe essere sbagliato.

Un'altra nota: ho installato PhantomJS come gemma nel mio progetto di rotaie e sto eseguendo il file javascript attraverso la console rails utilizzando questo gioiello. L'ho provato usando l'installazione standard di PhantomJS (v 2.0.0) e ancora non funzionava.

+5

provare a eseguire con il --ignore-SSL-errors = opzione 'true' di comando. –

+0

Posso eseguire il codice di esempio bene con 'phantomjs script.js'. Ma una cosa da considerare: le mappe della mappa di Google (o i dati vettoriali in questi giorni) sono caricate in modo asincrono da sole, potresti dover aggiungere un 'window.setTimeout' con un tempo di attesa di alcuni secondi attorno al blocco interno' page.open' quindi la pagina viene visualizzata come PDF quando è completamente caricata. Diversamente il tuo PDF sarà bianco/grigio. – chrki

+0

@ArtjomB soluzione non ha funzionato per me :( – JustGage

risposta

0

si dovrebbe dare puppeter un andare, rende così facile:

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(); 
})();