Проблема с изменением языковой опции в привязках python для селена - PullRequest
8 голосов
/ 13 марта 2019

Я создал скрипт на python в сочетании с селеном, чтобы очистить разные имена приложений из магазина Google Play, и все они появляются, когда я выполняю свой скрипт. Тем не менее, результат переводится на мой родной язык, который не является английским.

Как изменить языковые параметры в привязках python для селена?

Моя попытка (попытка изменить язык, но безуспешно):

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait as wait
from selenium.webdriver.support import expected_conditions as EC

link = 'https://play.google.com/store'

chrome_options = Options()
chrome_options.add_argument("accept-language=en-US")

with webdriver.Chrome(options=chrome_options) as driver:
    driver.get(link)
    for item in wait(driver,10).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR,'.details a.title'))):
        print(item.text)

Вывод у меня на родном языке, который не является английским.

Ответы [ 4 ]

1 голос
/ 20 марта 2019

Не работает:

Я попробовал --lang, но у меня не получилось:

chrome_options.add_argument("--lang=en")
            OR
chrome_options.add_argument("--lang=en-US")

Рабочий раствор:

После некоторых исследований я обнаружил, что для решения этой проблемы мы должны использовать экспериментальную опцию intl.accept_languages:

options = webdriver.ChromeOptions()
options.add_experimental_option('prefs', {'intl.accept_languages': 'en,en_US'})
driver = webdriver.Chrome(chrome_options=options)

Примечание. Чтобы использовать выше, вашвеб-сайт должен поддерживать то же самое.

Существует еще один способ добиться того же, переведя страницу на родном языке на английский:

Попробуйте использовать следующий код:

prefs = {
  "translate_whitelists": {"your native language":"en"},
  "translate":{"enabled":"True"}
}
options.add_experimental_option("prefs", prefs)
1 голос
/ 14 марта 2019

Я думаю, что ваш синтаксис для установки языка отключен. Вместо

chrome_options.add_argument("accept-language=en-US")

Попробуйте

chrome_options.add_experimental_option('prefs', {'intl.accept_languages': 'en,en_US'})

Второй раунд

Похоже, английский еще не доступен в 'intl.accept_languages'. Но после небольшого поиска я обнаружил, что может сработать следующее - попробовать?

chrome_options.add_argument("--lang=en-US")

Третий раунд

Попробуйте использовать en-GB, как подсказывает Фенио:

chrome_options.add_argument("--lang=en-GB”)
0 голосов
/ 16 марта 2019

Для этого конкретного сайта вы можете использовать параметр get, попробуйте заменить первую ссылку на:

link = 'https://play.google.com/store?hl=en'

это должно решить вашу проблему в этом случае.

Многие веб-сайты от Google имеют такую ​​функцию.

0 голосов
/ 16 марта 2019

Все доступные переключатели для хрома (большинство должно относиться и к хрому) можно найти по адресу: https://peter.sh/experiments/chromium-command-line-switches/#lang

Я не нашел - accept-language в качестве одного из них, но - lang = locale является одним из них.

Чтобы использовать его, профиль, который откроет сеанс chrome, должен поддерживать его (являясь частью поддерживаемого языка).

По умолчанию это не так. Только ваш родной язык будет частью этого. Чтобы добавить его, вы можете создать новые профили

В приведенном ниже коде будет использоваться один язык для каждого профиля. Даже если --lang = locale должен работать, если он есть в вашем профиле, это может быть сложно, так как реализация пользовательского интерфейса Chrome будет использовать тот, который установлен в основном / первом открытом окне Chrome. Смотрите ответ @sarjoor для подробного объяснения: Как работает язык в нескольких окнах Chrome

Теперь для создания нового профиля: Как создать хромовый профиль

Когда ваш профиль создан и вы начали с ним сеанс, перейдите по адресу: Хром: // Настройки / языки

Добавьте желаемые языки. Переместите язык вверху списка.

Затем нам нужно указать два переключателя профиля:

chrome_options.add_argument('--user-data-dir=profileDirectory')
chrome_options.add_argument('--profile-directory="yourProfileName))

Каталог и имя вашего профиля можно найти, перейдя по адресу: chrome: // версия

В macOS он находится по адресу:
Путь к профилю / Пользователи / Авто / Библиотека / Поддержка приложений / Google / Chrome / Профиль 1

profile_map = {
    'en': 'Default',
    'fr': 'Profile 1',
    'de': 'Profile 2'
}
chrome_options.add_argument('--user-data-dir=/Users/auto/Library/Application Support/Google/Chrome')
chrome_options.add_argument('--profile-directory={}'.format(profile_map['de']))

Возможно, вы захотите добавить параметр --lang, но если для профиля выбран язык по умолчанию, он должен работать без него.

chrome_options.add_argument("--lang='de'")

with webdriver.Chrome(options=chrome_options) as driver:
    driver.get(link)
    for item in wait(driver,10).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR,'.details a.title'))):
        print(item.text)
...