04-css selector定位元素

一、css selector:属性定位

        css selector可以通过元素的id、class、标签这些属性来对元素进行定位。

  • css selector用#号表示id属性,如:#kw
  • css selector用.表示class属性,如:.s_ipt
  • css selector直接用标签名称,不用额外添加任何标识符,如:input

        下面是使用xpath对百度网页搜索框进行定位的相关代码:

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://baidu.com")

# 使用css selector通过id属性进行定位
driver.find_element('css selector', '#kw').send_keys('python')

# 使用css selector通过class属性进行定位
driver.find_element('css selector', '.s_ipt').send_keys('python')

# 使用css selector通过标签进行定位
eles = driver.find_elements('css selector', 'input')
print(len(eles))

        说明:根据元素的class属性进行定位,前提是该元素有class属性。如果在页面中该元素的class属性值是单一样式的,比如:class='s_ipt',那么可以使用.s_ipt对该元素进行定位;如果是复合样式的,比如:class='s_ipt  border',那么可以使用.s_ipt.border对该元素进行定位。

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://baidu.com")

# 使用css selector通过class属性进行定位
driver.find_element('css selector', ".s_ipt.border").send_keys('python')

二、css selector:其它属性

        除了可以通过id、class、标签这三个属性定位外,css selector也可以通过其它属性定位元素。下面是使用css selector对百度网页搜索框进行定位的相关代码:

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://baidu.com")

# 使用css selector通过name属性进行定位
driver.find_element('css selector', "[name='wd']").send_keys('python')

# 使用css selector通过autocomplete属性进行定位
driver.find_element('css selector', "[autocomplete='off']").send_keys('python')

三、css selector:标签

        如果一个网页中同名的属性比较多时,可以通过标签与属性的组合进行筛选,可以使得元素定位更加准确。下面是使用css selector对百度网页搜索框进行定位的相关代码:

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://baidu.com")

# 使用css selector通过标签与id属性的组合进行定位
driver.find_element('css selector', "input#kw").send_keys('python')

# 使用css selector通过标签与class属性的组合进行定位
driver.find_element('css selector', "input.s_ipt").send_keys('python')

# 使用css selector通过标签与其他属性的组合进行定位
driver.find_element('css selector', "input[name='wd']").send_keys('python')

四、css selector:层级

        如果一个元素无法直接定位到,这时候我们可以先找它的父元素,找到它的父元素之后,再找下一个层级就能定位到目标元素了。

        如上图所示,要定位的是input这个标签,它的父元素有属性:id=s_kw_wrap,因此可以很方便的定位到它的父元素。要是它的父元素也无法直接定位到,就依次向上找它父元素的父元素(爷爷元素),它的爷爷元素有属性:id=form,因此可以很方便的定位到它的爷爷元素。然后就可以根据父元素和目标元素之间的层级关系,来定位到目标元素。

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://baidu.com")

# 使用css selector通过定位父元素来定位目标Input输入框
driver.find_element('css selector', "form#form>span>input").send_keys('python')

# 使用css selector通过定位父元素来定位目标Input输入框
driver.find_element('css selector', "form.fm>span>input").send_keys('python')

五、css selector:索引

        如果一个元素和它的兄弟元素有着一样的标签,这时候无法通过层级定位到,因为都是一个父亲生的,属于多胞胎兄弟。虽然多胞胎兄弟很难识别,但是出生是有先后顺序的,于是可以通过它在家里的排行来进行定位。

        如上图所示,select元素下有三个具有相同标签(option)的元素。这时候就可以使用css selector根据元素索引 option:nth-child(1) 分别进行定位,这点与xpath写法有很大差异,其实很好理解,直接翻译过来就是第几个小孩。(注:这里的索引是从1开始的,和python中的索引不一样)

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://baidu.com")

# 使用css selector定位老大
driver.find_element('css selector', "#nr>option:nth-child(1)").click()

# 使用css selector定位老二
driver.find_element('css selector', "#nr>option:nth-child(2)").click()

# 使用css selector定位老三
driver.find_element('css selector', "#nr>option:nth-child(3)").click()

六、css selector:逻辑运算

        css selector也可以实现逻辑运算,同时匹配多个属性,这里跟xpath不一样,无需写and关键字。

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://baidu.com")

# 使用css selector的逻辑运算来定位目标input输入框
driver.find_element('css selector', "input[id='kw'][name='wd']").send_keys('python')

七、css selector:模糊匹配

        css selector还有一个非常强大的功能,即模糊匹配。

  • [abc*="def"]:匹配 abc 属性值中包含子串 "def" 的所有元素。
  • [abc^="def"]:匹配 abc 属性值以 "def" 开头的所有元素。
  • [abc$="def"]:匹配 abc 属性值以 "def" 结尾的所有元素。
  • css selector好像不能根据标签文本内容进行定位(未找到具体方法),但xpath可以。
from selenium import webdriver

driver = webdriver.Chrome()
driver.get('https://www.baidu.com')

# 使用xpath模糊匹配某个属性(这里是指id属性值中包含子串'kw'的元素)
driver.find_element('css selector', "[id*='kw']").send_keys('python')

# 使用xpath模糊匹配以什么开头(这里是指id属性值以'k'开头的元素)
driver.find_element('css selector', "[id^='k']").send_keys('python')

# 使用xpath模糊匹配以什么结尾(这里是指id属性值以'kw'结尾的元素)
driver.find_element('css selector', "[id$='kw']").send_keys('python')

        以上是css selector定位元素的语法,css selector具有强大的功能,即可根据元素任意属性进行定位,又可根据元素位置进行定位,是定位元素的最终解决办法之一。css定位更快、语法更简洁,但是xpath更直观、更好理解一些。

  • 29
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CSS选择器(CSS selector)是用于选择HTML元素的一种模式匹配语法。它允许开发者通过指定元素的属性、关系和层级关系来选择需要样式化的元素。 以下是常见的CSS选择器类型: 1. 元素选择器:通过元素名称选择元素。例如,使用`p`选择所有段落元素。 2. 类选择器:通过类名选择元素。使用类选择器时,需要在类名前加上一个点(.)。例如,使用`.myclass`选择所有具有`myclass`类的元素。 3. ID选择器:通过元素的ID属性选择元素。使用ID选择器时,需要在ID名称前加上一个井号(#)。例如,使用`#myid`选择具有ID为`myid`的元素。 4. 属性选择器:通过元素的属性选择元素。例如,使用`[type="text"]`选择所有具有`type`属性且属性值为`text`的元素。 5. 伪类选择器:通过元素的状态或位置选择元素。例如,使用`:hover`选择鼠标悬停在上方的元素。 6. 后代选择器:选择特定元素的后代元素。例如,使用`.parent .child`选择类名为`child`且位于类名为`parent`的元素内部的子孙元素。 7. 直接子元素选择器:选择特定元素的直接子元素。例如,使用`.parent > .child`选择类名为`child`且直接位于类名为`parent`的元素内部的子元素。 8. 通用选择器:选择所有元素。使用通用选择器时,可以使用`*`。例如,使用`*`选择所有元素。 这只是CSS选择器的一小部分,还有更多选择器类型可用于根据不同的需求选择HTML元素
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值