Selenium Webdriver - установить предпочитаемый язык браузера DE - PullRequest
0 голосов
/ 30 августа 2018

У меня проблема с настройкой предпочтительного (принятого языка) в Chrome без головы с помощью Selenium Webdriver и Ruby. Я использую следующие настройки WebDriver:

Selenium::WebDriver::Chrome.driver_path = @config[<path to the Chrome Driver>]

options = Selenium::WebDriver::Chrome::Options.new
options.add_argument('--headless')
options.add_argument('--disable-translate')
options.add_argument("--lang=de")

Затем драйвер инициализируется с помощью:

@selenium_driver = Selenium::WebDriver.for :chrome, options: options

Все работает нормально, но на некоторых страницах Chrome возвращает английский контент, даже когда я перехожу на URL страницы на немецком языке (например, page.de). В этих случаях драйвер Chrome возвращает содержимое на английском языке из-за внутренней переадресации на страницу page.de/en. Я не указываю путь en в моем запрашиваемом URL.

Я попытался установить язык с помощью предпочтения Webdriver:

options.add_preference('accept_languages', 'de')

вместо add_argument, но это ничего не меняет в поведении.

Кто-нибудь знает, как заставить безголовый Chrome, управляемый Selenium Webdriver в Ruby, запрашивать содержимое страницы на определенном языке или - не оптимально, но это может помочь в качестве обходного пути - прекратить пересылку?

Любая помощь с благодарностью

Лучший

Крид

Ответы [ 3 ]

0 голосов
/ 30 августа 2018

Вы сможете решить свою проблему, добавив экспериментальную опцию :

options.add_option('prefs', {'intl.accept_languages': 'en,en_US'})

Я уверен, что он работает с Python, но я не пробовал с Ruby: этот подход правильный, не уверен насчет реализации.
Вы можете найти в этом репозитории код, который обрабатывает вашу проблему в коде Python, и в этом Q & A как реализовать экспериментальные_опции в Ruby

0 голосов
/ 02 сентября 2018

Я нашел решение, которое работает для меня. Как и во многих случаях, проблема сидела перед экраном и просто не работает достаточно точно; -)

Вместо использования

options.add_argument("--lang=de")

вы должны использовать

options.add_argument("--lang=de-DE")

Когда я использую языковой тег IETF, код, который я первоначально разместил, работает как ожидалось.

0 голосов
/ 30 августа 2018

Я использую это в моем test_helper.rb У меня отлично работает.

Capybara.register_driver :selenium do |app|
  Chromedriver.set_version "2.36"

  desired_capabilities = Selenium::WebDriver::Remote::Capabilities.chrome(
    'chromeOptions' => {
      'prefs' => {
        'intl.accept_languages' => 'en-US'
     },
     args: ['disable-gpu', 'headless']
   }
  )

  Capybara::Selenium::Driver.new(app, { browser: :chrome, desired_capabilities: desired_capabilities })
end

Capybara.javascript_driver = :chrome
Capybara.default_driver = :selenium
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...