2014-01-25 195 views
36

点击我很新的蟒蛇硒,我试图去点击它具有以下的HTML结构的按钮:蟒蛇硒按钮

<div class="b_div"> 

    <div class="button c_button s_button" onclick="submitForm('mTF')"> 
     <input class="very_small" type="button"></input> 
     <div class="s_image"></div> 
     <span> 
      Search 
     </span> 
    </div> 

    <div class="button c_button s_button" onclick="submitForm('rMTF')" style="margin-bottom: 30px;"> 
     <input class="v_small" type="button"></input> 
     <span> 
       Reset 
     </span> 
    </div> 

</div> 

我想能够同时点击Search和上面的按钮(显然是单独的)。

我已经尝试了几件事情,例如:

driver.find_element_by_css_selector('.button .c_button .s_button').click() 

,或者

driver.find_element_by_name('s_image').click() 

,或者

driver.find_element_by_class_name('s_image').click() 

但是,我似乎总是与NoSuchElementException结束,例如:

selenium.common.exceptions.NoSuchElementException: Message: u'Unable to locate element: {"method":"name","selector":"s_image"}' ; 

我想知道如果我能以某种方式使用HTML的onclick属性来使硒点击?

任何可以指引我走向正确方向的想法都会很棒。 谢谢。在CSS选择类之间

回答

50

除去空间:

driver.find_element_by_css_selector('.button .c_button .s_button').click() 
#           ^  ^

=>

driver.find_element_by_css_selector('.button.c_button.s_button').click() 
+1

我已经尝试了您的建议。我得到相同的'NoSuchElementException'错误! – AJW

+1

@AJW,尝试'print(driver.page_source)',并检查html实际包含的元素。 – falsetru

+0

谢谢。我做了'print(driver.page_source)',发现它的命名不同。奇怪。当我将空格移开并重新命名时,它现在点击。在后续行动中:你甚至可以看到重置按钮和搜索按钮具有相同的'class':在这种情况下点击时如何区分搜索按钮和重置按钮? – AJW

14

尝试:

下载Firefox,添加插件 “萤火虫” 和 “firepath”;安装完毕后,进入你的网页,启动firebug并找到元素的xpath,它在页面中是唯一的,这样你就不会犯任何错误。

见图片: instruction

browser.find_element_by_xpath( '只是复制和粘贴的Xpath')点击()

+2

非常感谢你为这样一个真棒lifehack。它节省了很多时间 –

+0

你不仅欢迎;) –

0

我不得不使用Phantomjs作为浏览器同样的问题,所以我在下面的解决。方式:

driver.find_element_by_css_selector('div.button.c_button.s_button').click() 

基本上我已经在报价中添加了DIV标签的名称。

0

以下调试过程帮助我解决了类似的问题。

with open("output_init.txt", "w") as text_file: 
    text_file.write(driver.page_source.encode('ascii','ignore')) 


xpath1 = "the xpath of the link you want to click on" 
destination_page_link = driver.find_element_by_xpath(xpath1) 
destination_page_link.click() 


with open("output_dest.txt", "w") as text_file: 
    text_file.write(driver.page_source.encode('ascii','ignore')) 

然后,您应该有两个TEXTFILES与初始页你在(“output_init.txt”)和你点击按钮(“output_dest.txt”)后转发到该页面。如果它们是相同的,那么你的代码不起作用。如果他们不是,那么你的代码工作,但你有另一个问题。 我的问题似乎是,转换内容产生我的钩子必要的JavaScript尚未执行。

您的选择,因为我看到它:

  1. 有驱动程序执行JavaScript,然后打电话给你找 元代码。请在 stackoverflow上查找关于此更详细的答案,因为我没有遵循此方法。
  2. 只需在'output_dest.txt'中找到一个可以产生相同结果的可比钩子,这就是我所做的。
  3. 试着点击任何东西之前等待了一下:

xpath2 = “你的XPath,你要点击”

WebDriverWait(驱动程序,超时= 5)。直到(拉姆达X: x.find_element_by_xpath(xpath2))

中的XPath方法不一定好,我只是喜欢它,你也可以使用您选择的方法。