【问题标题】:Chromedriver: How to translate a page using selenium?Chromedriver:如何使用 selenium 翻译页面?
【发布时间】:2019-05-12 01:08:26
【问题描述】:

我需要在 chrome 浏览器中使用 selenium 将页面从日语翻译成英语。我尝试了不同的方式示例代码sn-p之一如下

import java.util.concurrent.TimeUnit;
import org.junit.Test;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.DesiredCapabilities;
public class Main {

    private WebDriver driver=null;
    WebDriverLoad a;

    @Test
    public void successfulDesignerLogin() throws Exception{
//      final DesiredCapabilities capabilities = DesiredCapabilities.chrome();
//        capabilities.setJavascriptEnabled(true);
        String chromedriver =  "/dev/Saved/chromedriver";
        System.setProperty("webdriver.chrome.driver",chromedriver);

        ChromeOptions options = new ChromeOptions();
        options.addArguments("--lang=en-ca");
        //Map<String, Object> prefs = new HashMap<String, Object>();
        //prefs.put("intl.accept_languages", "en,en_US");
        //options.setExperimentalOption("prefs", prefs);


       ChromeDriver driver = new ChromeDriver(options);
       driver.manage().timeouts().implicitlyWait(4, TimeUnit.SECONDS);
       driver.get("https://www.bbc.com/japanese");
       driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
       driver.close();


}
}

我尝试了几个解决方案 options.addArguments options.setExperimentalOption 但没有任何效果可以任何人建议我解决方案

【问题讨论】:

  • 用英文版的https://www.bbc.com/japanese怎么样,我猜URL应该是https://www.bbc.com/english
  • 不,它只是一个示例站点,我需要代码来更改语言
  • 我可以看到一个HTML 标签,其属性为lang,该标签设置为ja。使用 javascript 执行器,我们可以将该值更改为“en”。问题是我们不想刷新页面但要刷新 DOM。我不知道使用 selenium 的任何解决方案,也许 JQuery 可以帮助我们。无论如何,如果您想知道如何更改属性值,可以使用以下代码:JavascriptExecutor js = (JavascriptExecutor) driver; js.executeScript("document.getElementById('responsive-news').setAttribute('lang', 'en')");

标签: selenium selenium-chromedriver google-translate translate


【解决方案1】:

这里是C#版本,直接在“AddUserProfilePreference”中添加“translate”和“translate_whitelists”

ChromeOptions options = new ChromeOptions();

Dictionary<string, object> LanguageList = new Dictionary<string, object>();
LanguageList.Add("fr", "en");

Dictionary<string, bool> enableObject = new Dictionary<string, bool>();
enableObj.Add("enabled", true);

options.AddUserProfilePreference("translate", enableObject);
options.AddUserProfilePreference("translate_whitelists", LanguageList);

【讨论】:

    【解决方案2】:

    您需要启用翻译并将目标语言ID添加到白名单{"from" : "to"}

    "translate":{"enabled":"true"}
    "translate_whitelists": {"ja":"en"}
    

    在java中:

    Map<String, Object> prefs = new HashMap<String, Object>();
    Map<String, Object> langs = new HashMap<String, Object>();
    langs.put("ja", "en");
    prefs.put("translate", "{'enabled' : true}");
    prefs.put("translate_whitelists", langs);
    options.setExperimentalOption("prefs", prefs);
    

    【讨论】:

    • 谢谢@ewwink 我将实现代码。你能分享一下如何用c#做到这一点
    • 我尝试了上述解决方案,但它不起作用@ewwink
    • 刚刚测试了我自己,编辑的答案现在应该可以工作了。
    猜你喜欢
    • 1970-01-01
    • 2016-04-04
    • 2016-04-01
    • 1970-01-01
    • 2013-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-04
    相关资源
    最近更新 更多