我在使用Selenium Webdriver和Ruby在无头Chrome中设置首选(接受的语言)时遇到问题。我使用以下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
一切正常但在某些页面,即使我导航到德语页面网址(例如page.de),Chrome也会返回英文内容。在这些情况下,由于内部转发到page.de/en,Chrome驱动程序会返回英文内容。我没有在查询的URL中指定en路径。
我尝试使用Webdriver首选项设置语言:
options.add_preference('accept_languages', 'de')
而不是add_argument但它不会改变任何行为。
有没有人知道如何强迫由Ruby内部的Selenium Webdriver控制的无头Chrome以定义的语言请求页面内容,或者 - 不是最佳但可能有助于解决方法 - 停止转发?
任何帮助非常感谢
最好
Krid
我在我的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
您应该可以通过添加实验选项来解决您的问题:
options.add_option('prefs', {'intl.accept_languages': 'en,en_US'})
我确信它适用于Python,但我没有尝试使用Ruby:这种方法是正确的,不确定实现。 您可以在this repository中找到在Python代码中处理问题的代码,在this Q&A中如何在Ruby中实现experimental_options
我发现了一个适合我的解决方案。在许多情况下,问题是坐在屏幕前面,根本不能正常工作;-)
而不是使用
options.add_argument("--lang=de")
你必须使用
options.add_argument("--lang=de-DE")
当我使用IETF语言标记时,我最初发布的代码按预期工作。