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

Unable to find elements by class name using Selenium/Python 2.7

我正在尝试 select google 翻译 "detect language" 下拉列表中的所有可用语言,以便我可以自动进行一些翻译。

我没有收到任何语法错误,但是 "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,所以我确定我缺少某些东西。感谢您的帮助。

它可以在我的机器上运行。如果我之后调用 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

有几个问题。

有一件事,因为您是 Selenium 的新手...Selenium 将只与用户可以看到的元素交互。因此,如果下拉列表未打开以显示元素,则无法从下拉列表中获取语言列表。要解决此问题,只需在按 class 名称拉取元素之前添加单击即可。

另一个问题是包含语言名称的元素不是 id = "gt-sl-gms" 的 DIV 的 children。如果您查看 HTML,带有语言的菜单都在 HTML 的下方。因此,您需要调整您的搜索,而不是仅查找 sl_dropdown 中的 children。

我不知道 python 但希望这是正确的 and/or 可以为您指明正确的方向。

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 意味着获取一个 ID (#) 为 gt-sl-gms-menu 的元素,该元素的后代 DIV 带有 class (.) goog-menuitem-content。希望这是有道理的。网络上有很多关于 CSS 选择器的优秀教程。我使用 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());
}