如何使用Selenium复制谷歌翻译中文音译?

时间:2014-01-08 18:53:52

标签: java selenium

我正在尝试使用Selenium提取谷歌翻译的中文单词的拼音音译,但是在找到它的Web元素时遇到了一些麻烦。

例如,我查找的单词是“事”。我的代码如下:

String word = "事";
WebDriver driver = new HtmlUnitDriver();
driver.get("http://translate.google.com/#zh-CN/zh-CN/" + word); 

当我使用浏览器访问实际页面时,我可以看到它的拼音是“Shì”,并且根据Inspect Element,它的id为src-translit。但是,当我去查看源代码时,虽然存在id="src-translit",但您在附近看不到任何类似“Shì”的内容。它只是空的。

认为该页面没有时间正确加载。我实施了30秒的等待时间(我知道这种漫长的等待,但我只是想知道它是否会起作用。)

int timeoutInSeconds = 30;
WebDriverWait wait = new WebDriverWait(driver, timeoutInSeconds); 
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("src-translit")));

不幸的是,即使有等待时间,音译及其文本仍然会返回为空。

WebElement transliteration = driver.findElement(By.id("src-translit"));
String pinyin = transliteration.getText();

我的问题是:src-translit发生了什么?为什么它不会显示在HTML代码中?如何查找并从Google翻译中复制它?

1 个答案:

答案 0 :(得分:1)

听起来好像没有执行javascript。查看docs,您可以启用这样的javascript

HtmlUnitDriver driver = new HtmlUnitDriver();
driver.setJavascriptEnabled(true);

HtmlUnitDriver driver = new HtmlUnitDriver(true);

看看是否有所作为。

编辑:

我仍然认为这个问题与javascript有关。当我使用FirefoxDriver运行它时,它运行正常:发出了AJAX请求,src-translit元素已使用Shi更新。

解决方法:

在任何情况下,监控网络流量,你可以看到,当你想翻译事件时,它会调用一个AJAX

http://translate.google.com/translate_a/t?client=t&sl=zh-CN&tl=zh-CN&hl=en&sc=2&ie=UTF-8&oe=UTF-8&pc=1&oc=1&otf=1&rom=1&srcrom=1&ssel=0&tsel=0&q=%E6%B2%92%E4%BA%8B

返回JSON:

[[["事","事","Shì","Shì"]],,"zh-CN",,[["事",,false,false,0,0,0,0]],,,,[],10]

也许你现在可以解析它。

相关问题