2014-01-25 193 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方法不一定好,我只是喜歡它,你也可以使用您選擇的方法。