无法使用Selenium / Python 2.7按类名查找元素

时间:2015-08-23 14:45:11

标签: python selenium google-translate

我试图从谷歌翻译中选择所有可用的语言"检测语言"下拉,以便我可以自动化一些翻译。

我没有得到任何语法错误,但是" 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")

我刚刚开始使用Selenium,所以我确定有一些我不知道的东西。谢谢你的帮助。

2 个答案:

答案 0 :(得分:2)

有几个问题。

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

另一个问题是包含语言名称的元素不是具有id =“gt-sl-gms”的DIV的子元素。如果你看一下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 Selector #gt-sl-gms-menu div.goog-menuitem-content意味着获得一个带有id(#)gt-sl-gms-menu的元素,该元素具有带有类(。)goog-menuitem-content的后代DIV。希望这是有道理的。 Web选择器上有很多很好的教程。我使用this page作为参考资料。

编辑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());
}

答案 1 :(得分: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,Selenium 2.47.1