環境
- Nodejs 12
- puppeteer 1.17
概要
puppeteerは本当に便利で、やろうと思えば(大抵のことは)なんでもできる。今回は現在位置をうまく偽装してみる。
コード
今回は東京駅にセットしてみる。ただしデフォルトではブラウザの左上の確認プロンプトが出てしまって一生JavascriptがGPSにアクセスできないので、overridePermissions()を使って現在地取得を許可しておく
const puppeteer = require('puppeteer'); (async () => { const browser = await puppeteer.launch(); const page = await browser.newPage(); const url = 'https://map.ultra-zone.net/g/'; // geolocationを有効化 const context = browser.defaultBrowserContext(); await context.overridePermissions(url, ['geolocation']); // 現在位置を東京駅にセット const client = await page.target().createCDPSession(); await client.send('Emulation.setGeolocationOverride', { latitude: 35.681236, longitude: 139.767125, accuracy: 100 }); await page.goto(url); await page.screenshot({ path: 'example.png' }); const result = await page.evaluate(() => { return new Promise(resolve => { navigator.geolocation.getCurrentPosition(position => { resolve({lat: position.coords.latitude, lng: position.coords.longitude}); }); }); }); console.log(result); await browser.close(); })();
実行して以下のように表示されればおk
$node index.js { lat: 35.681236, lng: 139.767125 }
まぁ悪用厳禁ってことでね(