Puppeteerで位置情報(Geolocation)取得許可と位置(緯度経度)指定する方法と注意点
Puppeteerを操作する際に位置情報が重要になることありますが、普通に操作しらたPuppeteerが動作しているマシンの大体の位置が利用されます。
例えば、Googleの検索だとマシンのIPで大体の位置を特定してその位置を使います。
さらに、位置情報を取得するにはユーザーによる許可(permission)が必要ですが、何も設定していないと手動で許可しないといけなくなるので、自動化にはなりませんよね。
今回はPuppeteerで位置情報(Geolocation)取得許可(permission default allow)して、さらにPuppeteerで緯度と経度を指定する方法を書いてみます。
とりあえずやってみよう
下の例は許可するoriginを「www.google.com」 を例としてあげます。
位置情報を取得許可
const context = browser.defaultBrowserContext();
await context.overridePermissions('https://www.google.com/', ['geolocation']);
緯度と経度を設定
await page.setGeolocation({
latitude: fetchParams.geolocation.latitude,
longitude: fetchParams.geolocation.longitude,
accuracy: 100
});
注意点
httpsを使う
位置情報を取得するには
ではダメです。https
プロトコルを利用する必要があります。
http
ブラウザーにもよりますが、ChromeだとGeolocation API はセキュアなコンテキスト(HTTPS)でのみ機能します。セキュアでない仕組み(HTTP など)でホストされているサイトの場合、ユーザーの場所を取得するリクエストは機能しなくなります。
https://developers.google.com/web/fundamentals/native-hardware/user-location?hl=ja
accuracyを設定する
を元に、この位置情報を使うかどうか判断するサイトもあります。accuracy
例えばGoogleの場合、
が設定されていないと、IPを利用して現在地を特定します。accuracy
参考
Puppeteer公式: https://devdocs.io/puppeteer/#browsercontextoverridepermissionsorigin-permissions
Originについて説明: https://developer.mozilla.org/en-US/docs/Glossary/Origin
ディスカッション
コメント一覧
まだ、コメントがありません