我试图从谷歌翻译中选择所有可用的语言"检测语言"下拉,以便我可以自动化一些翻译。
我没有得到任何语法错误,但是" 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,所以我确定有一些我不知道的东西。谢谢你的帮助。
答案 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