我需要使用一些谷歌航拍图片进行图像处理,因为我需要很多图片,所以很难手动屏幕拍摄这些图片,所以我想知道有没有办法自动导出给定地理位置的卫星图像。
我正在使用node.js,似乎zombie和phantom.js是模拟人类浏览器的方法,可以从浏览器中检索html,但是这些方法可以渲染google map html然后允许我做截图。
答案 0 :(得分:0)
是的,使用简单的PhantomJS可以轻松完成。您也可以使用ZombieJS或CasperJS。它们使得处理许多步骤变得更容易,而不会遇到回调地狱或静态代码。
我添加了点击和输入所需的功能。设置用户代理字符串是必要的,否则Google将提供可能无法在(旧)PhantomJS 1.x引擎上运行的代码。
var page = require('webpage').create(),
classical = true;
// This userAgent works good with GM
page.settings.userAgent = 'Mozilla/5.0 (Windows NT 6.0) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.41 Safari/535.1';
page.viewportSize = {
width: 1280,
height: 800
};
function click(selector){
page.evaluate(function(selector){
// taken from here: http://stackoverflow.com/a/15948355
var ev = document.createEvent("MouseEvent");
ev.initMouseEvent(
"click",
true /* bubble */, true /* cancelable */,
window, null,
0, 0, 0, 0, /* coordinates */
false, false, false, false, /* modifier keys */
0 /*left*/, null
);
document.querySelector(selector).dispatchEvent(ev);
}, selector);
}
function type(text){
page.evaluate(function(text, classical){
var el = document.querySelector(classical ? "#gbqfq" : "#searchboxinput");
el.value = text;
el.focus();
}, text, classical);
page.sendEvent('keypress', page.event.key.Enter);
}
page.open("https://www.google.com/maps", function (status) {
if (status !== 'success') {
console.log('Unable to access network');
phantom.exit();
} else {
if (classical) {
click("#paneltoggle2");
}
setTimeout(function(){
page.render("1.png");
click(classical ? "#mv-primary-container > .mv-primary" : "button.widget-minimap-shim");
}, 1000); // +1 sec
setTimeout(function(){
page.render("2.png");
type("bern");
}, 11000); //+10 sec
setTimeout(function(){
if (classical) {
click("#paneltoggle2");
}
}, 16000); //+5 sec
setTimeout(function(){
page.render("3.png");
phantom.exit();
}, 21000); //+5 sec
}
});
如果你正在使用PhantomJS版本< 1.9.8,您应该使用--ssl-protocol=tlsv1
运行它。裁剪图像以使用clipRect
无法看到控件也可能会有所帮助。