LoginSignup
8
11

More than 3 years have passed since last update.

Headless Chromeでブラウザの位置情報を設定する方法

Posted at

スクレイピングする際にはサイトによってブラウザの(地理)位置情報を求められる場合があります。この記事は、Selenium+Headless Chrome+Pythonを用いた場合の解決方法についての個人的メモです。

環境

EC2 (Amazon Linux 2 AMI)

参考

Setting sensors (location) in headless Chrome

ツール

・Selenium
・Chrome driver(85.0.4183.87)
・Python3(3.6.2)

位置情報が必要になった理由

とあるサイトをHeadless Chromeを使ってスクレイピングしようとするとエラーが発生。スクリーンショットを確認すると下記のようなポップアップが表示されて指定のページにアクセスができなかった。

"位置情報が取得できなかったため、処理ができません。位置情報を許可してください。"

色々と調べた結果、どうやらブラウザの位置情報が確認できないことが原因であった。

Headless Chromeに位置情報を設定する方法

ということでHeadless Chromeに位置情報を設定する方法はないかと調べてみたが、意外と情報が少ない。。。

そもそもChromeブラウザで位置情報を設定する方法があるのかという疑問があったので、調べてみるとデベロッパーツールから設定はできるらしい。

ということは、「headless chromeでもデベロッパーツールの操作ができれば解決するのでは?」と思ったところで、Stack overflowで同じ内容を質問している人がおり、解決策が提示されていた。どうやらexecute_cdp_cmd()というメソッドを利用するらしい。

execute_cdp_cmd()

selenium.webdriverが持つメソッドで、Google Developperツールの設定ができるらしい。

コードの実装例は以下

location_setting.py
from selenium import webdriver

def start_chrome_driver():
    options = webdriver.ChromeOptions()
    options.add_argument("--headless")
    options.add_argument("--disable-gpu")
    # executable_pathは各々の環境に合わせて変更してください
    driver = webdriver.Chrome(executable_path="/usr/local/bin/chromedriver", chrome_options=options)
    return driver

# Headless Chromeを起動
driver = start_chrome_driver()

# 位置情報の設定を許可(許可をしないと位置情報の設定ができない)
driver.execute_cdp_cmd(
    "Browser.grantPermissions",
    {
        "origin": "https://hromssp.obc.jp/",
        "permissions": ["geolocation"]
    },
)

# 緯度、経度、緯度・経度の誤差(単位:m)を設定する
driver.execute_cdp_cmd(
    "Emulation.setGeolocationOverride",
    {
        "latitude": 35.689487,
        "longitude": 139.691706,
        "accuracy": 100,
    },
)

※ちなみに上記で設定している緯度・経度は東京都庁の場所になります。

結果

これでHeadless Chromeでも位置情報の設定(偽装?)ができるようになり、スクレイピングしたいページにアクセスできた!

8
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
11