2015-12-26 116 views
1

我試圖用下面的腳本選擇包含coupon-link關鍵字的所有ID。硒find_elements_by_css_selector返回一個空的列表

from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 

driver = webdriver.Firefox() 
driver.get("http://udemycoupon.discountsglobal.com/coupon-category/free-2/") 
elems = driver.find_elements_by_css_selector('[id~=\"coupon-link\"]') 
print(elems) 

但是我得到了一個空列表[]作爲結果。我的css_selector有什麼問題?

我測試過find_elements_by_css_selector('[id=\"coupon-link-92654\"]')成功。但我想選擇所有的優惠券鏈接,而不僅僅是其中的一個。

我引用了文檔w3schools.com

回答

0

Selenium CSS僅支持三個部分匹配運算符,即$^*

CSS部分匹配表達式不正確 - 使用*^詳細信息在herehere。您也可以使用xpath

from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 

driver = webdriver.Firefox() 
driver.get("http://udemycoupon.discountsglobal.com/coupon-category/free-2/") 

#select by css 
#try * 
css_lnks = [i.get_attribute('href') for i in driver.find_elements_by_css_selector('[id*=coupon-link]')] 
#or try^
#css_lnks = [i.get_attribute('href') for i in driver.find_elements_by_css_selector('[id^=coupon-link]')] 

#select by xpath 
xpth_lnks = [i.get_attribute('href') for i in driver.find_elements_by_xpath("//a[contains(@id,'coupon-link-')]")] 

print xpth_lnks 
print css_lnks 
+0

謝謝:)。我希望我能夠正確地知道如何使用'〜='。 在閱讀[w3schools.com](http://www.w3schools.com/cssref/css_selectors.asp)的描述後,我無法區分'〜='和'* ='之間的區別。 – Brian

1

~=選擇器按空格分隔的值進行選擇。從這個意義上說,它的作用類似於匹配類屬性的類選擇器。

由於ID通常沒有空格(因爲ID屬性一次只能指定一個ID),因此使用帶有ID屬性的~=沒有任何意義。

如果你只是想選擇在其ID前綴的元素,使用^=

elems = driver.find_elements_by_css_selector('[id^=\"coupon-link\"]')