2017-04-20 97 views
1

我非常新的硒和我試圖找出如何模擬的onclick模擬與硒蟒蛇一的onclick

這是我在源代碼中看到的,當我檢查HTML源

<a href="#" onclick="document.getElementById('pN').selectedIndex = 0;document.getElementById('optionList').submit();return false"> <img src="images/ListingOptionSearch.jpg" onmouseover="this.src='images/ListingOptionSearchHover.jpg'" onmouseout="this.src='images/ListingOptionSearch.jpg'"> </a> 

我想:

driver.find_element_by_css_selector("a[onlick*=document.getElementById('pN') 
.selectedIndex]").click() 

但我得到一個InvalidSelectorException

的你的想法?

謝謝!

回答

1

您可以使用

from selenium import webdriver 
browser = webdriver.Chrome(somepath) # You should know what this does. 
browser.execute_script("document.getElementById('pN').selectedIndex = 0;document.getElementById('optionList').submit();return false") 

這意味着你可以僅僅通過使用.execute_script,真棒執行JavaScript代碼,對不對?

無效InvalidSelectorException是希望提出時,有沒有元素或經驗,有可能是一個iframe,你將不得不使用.switch_to.frame能夠與它進行交互。 另外,我喜歡使用XPath(總是最可靠的),需要一點時間習慣,但練習一兩個小時就可以得到它。

JeffC有一個好點,HTML的結構,JS總是可以改變的。 可以使用find_element_by_xpath(xpath).click()但也有更動態的方式來預測羯羊結構會有所改變,使用像find_element_by_name或其他東西,都可以

find_element_by_id 
find_element_by_name 
find_element_by_xpath 
find_element_by_link_text 
find_element_by_partial_link_text 
find_element_by_tag_name 
find_element_by_class_name 
find_element_by_css_selector 
+0

謝謝有問題,這是非常有益的! –

+0

你並不是真的想這樣做。這正在調用恰好在A標籤上的JS。如果'onclick'改變了,你將不再像點擊A標籤一樣。此外,許多(大多數?)人正試圖編寫用戶場景的腳本,並且沒有用戶要執行JS,他們要點擊鏈接(然後觸發onclick行爲)。 – JeffC

+0

好點JeffC,這是一種做事的方式。當網站結構發生變化時(無論是HTML還是js),您都必須進行更改/調整。我已經添加了一些代碼和解釋。 我從經驗中發現,網站大多不會改變這樣的事情,刮板可以持續1-10年,而不會改變網站。 您還應該隨時添加隨意嘗試,除非塊發生這種情況時才通知您。 –

1

你谷歌的例外呢?這意味着您的選擇器無效。像您嘗試使用的CSS選擇器的格式爲tag[attribute='value']。您沒有被引號包圍的值......在這種特定情況下這是不可能的,因爲您的值已經包含單引號。

由於A標籤包含IMG標籤,因此您可以單擊IMG標籤並獲得相同的效果。像下面這樣的CSS選擇器應該可以工作。

img[src='images/ListingOptionSearch.jpg'] 

還有其他的選擇,將可能工作,但一個鏈接頁面,等我將只是猜測他們是否會是唯一的。

+0

嘿傑夫,感謝顏色,所以我會做'driver.find_element_by_css_selector(「img [src ='images/ListingOptionSearch.jpg']」)。click()'? –

+1

是...這應該工作,因爲圖像是在A標籤內。 – JeffC