【问题标题】:Selenium find_elements_by_css_selector returns an empty listSelenium find_elements_by_css_selector 返回一个空列表
【发布时间】:2016-03-31 21:14:38
【问题描述】:

我正在尝试使用以下脚本选择所有包含 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引用了该文档。

【问题讨论】:

    标签: python python-2.7 selenium css-selectors


    【解决方案1】:

    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
    

    【讨论】:

    • 谢谢你:)。我希望我能知道如何正确使用~=。在阅读w3schools.com 的描述后,我无法分辨~=*= 之间的区别。
    【解决方案2】:

    ~= 选择器按空格分隔的值进行选择。从这个意义上说,它的工作方式类似于匹配类属性的类选择器。

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

    如果您只想通过 ID 中的前缀选择元素,请使用 ^=

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-09
      • 1970-01-01
      • 2015-08-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多