2015-08-23 116 views
0

我试图从谷歌翻译“检测语言”下拉列表中选择所有可用语言,以便我可以自动执行一些翻译。无法通过使用Selenium/Python的类名查找元素2.7

我没有得到任何语法错误,但“find_elements_by_class_name”方法(我认为会得到所有语言)都是空的。

from selenium import webdriver 
fire = webdriver.Firefox() 
fire.get("http://translate.google.com") 
sl_dropdown = fire.find_element_by_id("gt-sl-gms") # dropdown menu 
# returns empty list 
sl_dropdown.find_elements_by_class_name("goog-menuitem-content") 

我刚刚开始与硒,所以我敢肯定有我失踪的东西。谢谢你的帮助。

+0

你为什么期望找到任何'goog-menuitem-content''元素?检查页面时我没有看到任何内容。 – jonrsharpe

+0

@jonrsharpe单击下拉菜单并单击“检查元素”后,除非我误,否则goog-menuitem-content是任何给定语言的类名称。 –

回答

2

有几个问题。

因为您是Selenium的新手,所以Selenium只会与用户可以看到的元素进行交互。因此,如果下拉列表未打开,则无法从下拉列表中获取语言列表,从而暴露出元素。要解决这个问题,只需在按类名拉动元素之前添加点击。

另一个问题是包含语言名称的元素不是DIV的id =“gt-sl-gms”的子元素。如果你看一下HTML,带有langs的菜单在HTML中全部下降。因此,您需要调整搜索范围,以便不寻找sl_dropdown的儿童。

我不知道python,但希望这是正确的和/或可以设置你在正确的方向。

from selenium import webdriver 
fire = webdriver.Firefox() 
fire.get("http://translate.google.com") 
sl_dropdown = fire.find_element_by_id("gt-sl-gms") # dropdown menu 
sl_dropdown.click() # opens the languages menu so its accessible to Selenium 
langs = fire.find_elements_by_css_selector("#gt-sl-gms-menu div.goog-menuitem-content") 
for lang in langs: 
    print lang.text # dumps the text in each WebElement 

顺便说一句,与CSS选择#gt-sl-gms-menu div.goog-menuitem-content装置获得与GT-SL-GMS-菜单的ID(#),其具有与类(。)goog-菜单项内容的后代DIV的元件。希望这是有道理的。 Web选择器上有很多很好的教程。我使用this page作为参考LOT。


编辑1: 这是我在Java中使用转储语言的代码。

driver.get("http://translate.google.com"); 
driver.findElement(By.id("gt-sl-gms")).click(); 
List<WebElement> langs = driver.findElements(By.cssSelector("#gt-sl-gms-menu div.goog-menuitem-content")); 
for (WebElement lang : langs) 
{ 
    System.out.println(lang.getText()); 
} 
+0

这就是我一直在寻找的,谢谢。但是这会返回一个webelement对象列表,我不知道如何获取它们的文本。 lang.text为每个对象返回“u”,“get_element(”value“)给了我类似的意外。 –

+1

我不知道python,但如果你遍历langs的所有实例并转储langs.text,它应该打印语言...至少它在Java中是这样的。我不确定为什么它会有所不同。我在Java中添加了工作代码,以帮助您或其他人。 – JeffC

+0

根据被拒绝的@NoSuchElephantException提出的修订进行更新。谢谢! – JeffC

0

它适用于我的机器。如果我打电话click()之后,打开语言下拉列表:

from selenium import webdriver 
fire = webdriver.Firefox() 
fire.get("http://translate.google.com") 
sl_dropdown = fire.find_element_by_id("gt-sl-gms") # dropdown menu 
sl_dropdown.click() 

我使用Python 2.7.6,硒2.47.1

+0

我不只是试图让下拉(应该做得更清楚)。我试图选择单独的语言,即拿出一个像[“阿尔巴尼亚”,“亚美尼亚”]的列表 –