2015-04-14 14 views
10

Moim celem końcowym jest otwarcie lokalnego pliku html z wbudowanym javascript, utworzenie mapy z wielokątami i wykonanie zrzutu ekranu za pomocą PhantomJS. Napisałem prosty plik JS, aby to zrobić:PhantomJS nie załadował Map Google

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

ta zwraca błąd:

ReferenceError: Can't find variable: google 

próbowałam to na lokalnym pliku html i na innych stronach internetowych za pomocą mapy google i trzymam otrzymuję ten sam błąd. Udało mi się zrobić zrzut ekranu z innych stron bez map google. Przeszukując internet, wygląda na to, że ludzie nie mieli takich problemów i odnieśli sukces, robiąc zrzuty ekranu stron z mapami google ... więc zastanawiam się, co może być nie tak.

Inna uwaga: Zainstalowałem PhantomJS jako klejnot w moim projekcie szyn i używam tego pliku javascript przez konsolę szyn. Próbowałem go przy użyciu standardowej instalacji PhantomJS (v 2.0.0) i nadal nie działa.

+5

Spróbuj uruchomić z '--ignore-SSL-errors = TRUE opcji poleceń. –

+0

Mogę uruchomić przykładowy kod dobrze z 'phantomjs script.js'. Ale należy wziąć pod uwagę: płytki mapy Google (lub dane wektorowe w tych dniach) są ładowane asynchronicznie, może być konieczne dodanie 'window.setTimeout' z czasem oczekiwania wynoszącym kilka sekund wokół wewnętrznego bloku' page.open' więc strona jest renderowana jako PDF po pełnym załadowaniu. Poza tym twój PDF będzie pusty/szary. – chrki

+0

Rozwiązanie @ArtjomB nie działa dla mnie :( – JustGage

Odpowiedz

0

należy podać puppeter odchodzenie, to sprawia, że ​​jest łatwy:

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