2015-03-02 78 views
1

我使用Selenium和Python3自动将数据输入网站。 我已经试过寻找无处不在如何处理如果有多个选择类的元素,但我不知道如何选择手风琴切换[1]。硒上没有任何反应,但它在任何浏览器上都能正常工作。此外,有没有什么办法只使用常规的JavaScript或jQuery的命令?:Selenium Python document.getElementsByClassName()

accordion=find_element_by_class("accordion-toggle"[1]) 
accordion.click() 
#otheraccordion=find_element_by_css_selector("#AdvancedAddress > div.accordion-heading.in > div.accordion-toggle > span.accordionExpandCollapse") 
#otheraccordion.click() 
StreetNameField=driver.find_element_by_id("Advanced_FindMyParcel_PropertyStreetName") 
StreetNameField.send_keys("Sherman") 
ZipField=driver.find_element_by_id("Advanced_FindMyParcel_PropertyZip") 
ZipField.send_keys("90201") 
ZipButton=driver.find_element_by_id("btnSearchFindMyParcels") 
ZipButton.click() 

回答

0

您正在寻找find_element(s)_by_css_selector - reference here - 使用的CSS前缀” .classname`指示类。

例如找到

<div class='theClass'> 

driver.find_elements_by_css_selector('.theClass') 

您还可以使用By语法:

driver.find_elements(By.CSS_SELECTOR, '.theClass') 

编辑
看来问题可能更多的是Clicking元素,而不是寻找它。

  • 确保元素可见
  • 对于Chrome浏览器,你可能需要模仿一下在此之前将鼠标悬停的元素 - 见Actions/ActionChains MoveToElement悬停在该元素。
  • 对于IE浏览器,您可能需要确保浏览器/框架获得焦点,在元素点击之前 - 您可能需要应用黑客攻击,如one of these
+0

非常感谢。这也是问题的一部分。和CSS选择器工作。 – 2015-03-05 21:39:04

1

实际上,你可以使用document.getElementsByClassName()通过execute_script()电话:

driver.execute_script("document.getElementsByClassName('accordion-toggle')[0].click();") 

但我不会再往对于这样一个简单的任务执行JavaScript。更容易找到元素使用find_element_by_class_name()

accordion = driver.find_element_by_class_name('accordion-toggle') 
accordion.click() 
+0

它工作完美。你的答案都有效。非常感谢。 – 2015-03-05 21:39:33