修改硒python绑定中的语言选项时遇到问题

时间:2019-03-13 19:47:00

标签: python python-3.x selenium selenium-webdriver web-scraping

我已经在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)

我得到的输出是我的母语,不是英语。

5 个答案:

答案 0 :(得分: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")

第三轮

尝试按照Fenio的建议使用en-GB:

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

答案 1 :(得分: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)

答案 2 :(得分:1)

试试

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

答案 3 :(得分: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://版本

在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)

答案 4 :(得分:0)

对于该特定网站,您可以使用get参数,请尝试用以下方式替换第一个链接:

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

在这种情况下应该可以解决您的问题。

许多Google网站都具有这种功能。