我正在尝试使用以下脚本选择包含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引用了该文档。
答案 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部分匹配表达式不正确 - 在here和here使用*
或^
个详细信息。您也可以使用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