Selenium find_elements_by_css_selector返回一个空列表

时间:2015-12-26 07:50:56

标签: python python-2.7 selenium css-selectors

我正在尝试使用以下脚本选择包含coupon-link关键字的所有ID。

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引用了该文档。

2 个答案:

答案 0 :(得分:1)

public function chat() { $user = User::all(); $message = MessageModel::orderBy('id')->get(); return view('chat.chat', ['user' => $user, 'message' => json_encode($message)]); } 选择器按空格分隔的值进行选择。从这个意义上讲,它的工作方式与匹配class属性的类选择器类似。

由于ID通常不包含空格(因为id属性一次只能指定一个ID),因此将~=与id属性一起使用是没有意义的。

如果您只想在ID中按前缀选择元素,请使用~=

^=

答案 1 :(得分:0)

Selenium CSS仅支持三个部分匹配运算符viz.- $^*

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