[英]Unable to find elements by class name using Selenium/Python 2.7
我正在尝试从Google翻译“检测语言”下拉列表中选择所有可用的语言,以便我可以自动进行一些翻译。
我没有任何语法错误,但是“ 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开始,所以我确定我缺少一些东西。 谢谢你的帮助。
有几个问题。
既然您是Selenium的新手,那么一件事……Selenium仅与用户可见的元素进行交互。 因此,如果下拉列表未打开以暴露元素,则无法从下拉列表中获取语言列表。 要解决此问题,只需单击一下,然后再按类名提取元素即可。
另一个问题是,包含语言名称的元素不是ID =“ gt-sl-gms”的DIV
子级。 如果您查看HTML,则带有langs的菜单在HTML中都位于下方。 因此,您需要调整搜索范围,以不仅仅寻找sl_dropdown
子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
表示获取一个ID为(#)gt-sl- #gt-sl-gms-menu div.goog-menuitem-content
的元素,该元素的后代DIV为(。)goog类-menuitem-内容。 希望这是有道理的。 网络上有很多关于CSS选择器的好教程。 我将此页面用作很多参考。
编辑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());
}
它可以在我的机器上工作。 如果之后调用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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.