Heroku + Selenium + Chrome + Pythonの組み合わせでスクレイピングをしていたのですが、dynoを再起動したせいか、なぜか突然ページの言語が英語に。
色々と調べてみたところ、optionsの設定が足りなかったようで、だいぶハマりました。
従来の設定
これまでwebdriverに設定していたoptionsの内容です。
options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--window-size=1920,1080')
options.add_argument('start-maximized')
options.add_argument('--disable-gpu')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
options.binary_location = os.environ.get("GOOGLE_CHROME_BIN")
service = Service(executable_path=os.environ.get("CHROMEDRIVER_PATH"))
driver = webdriver.Chrome(service=service, options=options)
return driver
これまでは<html lang="ja">
となっていたのに、なぜか<html lang="en">
になっていました。
次に試したこと
言語設定の方法で検索したところ、langのオプションが必要とのことで設定してみました。
options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--lang=ja-JP') # ここ追加
options.add_argument('--window-size=1920,1080')
options.add_argument('start-maximized')
options.add_argument('--disable-gpu')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
options.binary_location = os.environ.get("GOOGLE_CHROME_BIN")
service = Service(executable_path=os.environ.get("CHROMEDRIVER_PATH"))
driver = webdriver.Chrome(service=service, options=options)
return driver
これでもやはり英語のまま。
たどり着いた情報
Googleではなかなか見つからなかったので、Xでも検索してみると、以下のポストが。
なるほど、優先言語(accept-language)なるものがあるのですね。もしかしたらどこかのタイミングでこれが変わってしまっていたのかもしれません。
設定方法は以下の記事を参考にしました。
最終的な設定
最終的には、headless=new
を入れたのと、add_experimental_optionでjaを設定した2点で解決しました。
options = webdriver.ChromeOptions()
options.add_argument('--headless=new') # ここ変更
options.add_argument('--lang=ja-JP')
options.add_argument('--window-size=1920,1080')
options.add_argument('start-maximized')
options.add_argument('--disable-gpu')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
options.add_experimental_option('prefs', {'intl.accept_languages': 'ja'}) # ここ追加
options.binary_location = os.environ.get("GOOGLE_CHROME_BIN")
service = Service(executable_path=os.environ.get("CHROMEDRIVER_PATH"))
driver = webdriver.Chrome(service=service, options=options)