我已经在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)
我的输出是用我的母语,而不是英语。
不工作:
我试过了--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)
我认为你设置语言的语法是关闭的。代替
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”)
所有可用的铬开关(大多数应适用于铬)可在以下网址找到: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)
对于此特定网站,您可以使用get参数,尝试将第一个链接替换为:
link = 'https://play.google.com/store?hl=en'
在这种情况下它应该解决你的问题。
来自谷歌的许多网站都有这种功能。