无法修改selenium python绑定中的语言选项

问题描述 投票:8回答:4

我已经在python中创建了一个与selenium结合使用的脚本来从google play store中抓取不同的应用程序名称,当我执行我的脚本时它们都会通过。但是,结果将转换为我的母语,而不是英语。

如何在selenium 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)

我的输出是用我的母语,而不是英语。

python python-3.x selenium selenium-webdriver web-scraping
4个回答
1
投票

不工作:

我试过了--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
投票

我认为你设置语言的语法是关闭的。代替

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作为Fenio建议:

chrome_options.add_argument("--lang=en-GB”)

0
投票

所有可用的铬开关(大多数应适用于铬)可在以下网址找到:https://peter.sh/experiments/chromium-command-line-switches/#lang

我没有找到--accept-language作为其中之一,但是--lang = locale就是其中之一。

为了能够使用它,将打开chrome会话的配置文件需要支持它(作为受支持语言的一部分)。

默认情况下不会。只有您的母语才会成为其中的一部分。要添加它,您可以创建新的配置文件

以下代码将使用每个配置文件一种语言。即使 - 如果你的个人资料有--lang = locale应该可以使用它,它也可能很棘手,因为Chrome UI实现将使用主/第一个chrome窗口打开的设置。有关详细说明,请参阅@sarjoor答案:How language work across multiple chrome windows

现在创建新的配置文件:How to create a chrome profile

创建个人资料并开始使用该会话后,请转到:chrome:// settings / languages

添加您想要的语言。将语言移到列表顶部。

然后我们需要指定两个配置文件开关:

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

您可以通过访问:chrome:// version找到您的个人资料目录和名称

在macOS上,它位于: 配置文件路径/用户/自动/库/应用程序支持/谷歌/ 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)

0
投票

对于此特定网站,您可以使用get参数,尝试将第一个链接替换为:

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

在这种情况下它应该解决你的问题。

来自谷歌的许多网站都有这种功能。

© www.soinside.com 2019 - 2024. All rights reserved.