課題
Seleniumを使って日本語サイトを自動化しようとすると、options.add_argument('--lang=ja-JP')
を追加しても、Amazonなどの一部のウェブサイトが依然として英語で表示される場合がある。この問題は、ウェブサイトがブラウザの言語設定に依存せず、独自の方法でユーザーの言語を決定していることが原因と考えられる。
【修正を試みたコード】
def init_driver(headless=True):
options = Options()
options.add_argument("--headless")
options.add_argument('--lang=ja-JP')
options.add_argument("--no-sandbox")
options.add_argument("--disable-dev-shm-usage")
# 言語設定を追加
prefs = {
"intl.accept_languages": "ja,ja_JP",
"profile.default_content_settings.popups": 0
}
options.add_experimental_option("prefs", prefs)
return webdriver.Chrome(options=options)
sampole_def(search_term):
driver.get("https://www.amazon.co.jp")
search_bar = driver.find_element(By.ID, "twotabsearchtextbox")
search_bar.send_keys(search_term)
search_bar.send_keys(Keys.RETURN)
解決策
options.add_argument('--lang=ja-JP')
を使用するだけでなく、特定の言語パラメータをURLに追加して、ウェブサイトにアクセスすることが有効。たとえば、Amazonの場合、以下のようにURLに?language=ja_JP
を追加した。
driver.get("https://www.amazon.co.jp?language=ja_JP")
これにより、Amazonが日本語表示に切り替わり、options.add_argument('--lang=ja-JP')
を使った場合よりも確実に日本語でのページ表示が保証されます。
実際、スクレイピング結果が日本語表記内容のものに正しく更新された。
試して失敗したこと
1. Accept-Language
ヘッダーの設定
Accept-Language
ヘッダーを直接設定することで、日本語表示を期待したが不正解。
options.add_argument("–-lang=ja-JP")
options.add_argument("–-force-device-scale-factor=1")
# Accept-Languageヘッダーを設定
options.add_argument("–-lang=ja-JP")
options.add_argument("–-lang=ja_JP.UTF-8")
options.add_argument("–-lang=ja_JP")
options.add_argument("--accept-lang=ja,ja-JP")
# 言語設定を追加
prefs = {
"intl.accept_languages": "ja,ja_JP",
"profile.default_content_settings.popups": 0
}
options.add_experimental_option("prefs", prefs)
結論
options.add_argument('--lang=ja-JP')
だけでは解決できない場合、URLに言語パラメータを追加したら解決するかもしれない。