Google maps PhantomJS无法加载Google地图

Google maps PhantomJS无法加载Google地图,google-maps,phantomjs,Google Maps,Phantomjs,我的最终目标是打开一个嵌入javascript的本地html文件,创建一个包含多边形的地图,并使用PhantomJS截图。为此,我编写了一个简单的JS文件: var page = require('webpage').create(); page.open('https://www.google.com/maps', function(status) { console.log('State: ' + status); if(status === 'success') { p

我的最终目标是打开一个嵌入javascript的本地html文件,创建一个包含多边形的地图,并使用PhantomJS截图。为此,我编写了一个简单的JS文件:

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(V2.0.0)的标准安装进行了尝试,但仍然不起作用。

您应该试一试,它让这变得很容易:

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

您必须等待DOM中的元素。 例如,在maps.google.com上,您可以等待在加载所有分幅后加载水印

var page=require('webpage').create();
第页打开('https://www.google.com/maps,功能(状态){
console.log('状态:'+状态);
如果(状态==“成功”){
waitFor(函数(){
返回页。评估(函数(){
var文档\u包含\u水印=
document.body.contains(document.getElementById('watermark'));
退货单据\u包含\u水印;
});
},函数(){
render('maps-google-com.pdf',{格式:'pdf',质量:'100'});
phantom.exit();
});
}
});
函数waitFor(testFn,onReady){
var-load=false;
var interval=setInterval(函数(){
loaded=testFn();
如果(已加载){
onReady();
间隔时间;
}
}, 1000);
}
如果你想在你开发的页面上截图,使用上面相同的逻辑,但是自己在谷歌地图空闲事件中添加一个元素

google.maps.event.addListenerOnce(映射,'idle',函数(){
var loadelem=document.createElement('div');
setAttribute(“id”、“idloadelem”);
document.body.appendChild(loadedElem);
});

尝试使用
--ignore ssl errors=true
命令行选项运行。我可以使用
phantomjs script.js
很好地运行示例代码。但是需要考虑的一点是:Google地图贴片(或现在的矢量数据)是异步加载的,您可能需要添加一个
窗口。setTimeout
在内部
页面周围等待几秒钟。打开
块,以便页面在完全加载后呈现为PDF格式。否则,您的PDF将为空白/灰色。@ArtjomB解决方案对我不起作用:(上面的代码片段对我很有效!我正在运行phantomJS的2.1.1版。