Selenium 详解CSS定位

xpath定位是“屠龙刀”,那CSS定位就是"倚天剑了",相对xpath来说,具有语法简单,定位速度快等优点

一、属性定位


1、可以通过元素的id,class,tag标签这三个属性直接定位

  • #   表示id属性,如:#kw
  • .    表示class属性,如:.s_ipt
  • 直接用标签名称,如:input

代码:

1# coding = utf-8 2from time import sleep 3from selenium import webdriver 4 5# 驱动文件路径 6driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe' 7# 启动浏览器 8driver = webdriver.Chrome(executable_path=driverfile_path) 9# 打开百度首页 10driver.get(r'https://www.baidu.com/') 11# 用CSS通过id属性定位百度搜索框 12# driver.find_element_by_css_selector("#kw").send_keys("selenium") 13 14# 用CSS通过clas属性定位百度搜索框 15# driver.find_element_by_css_selector(".s_ipt").send_keys("selenium") 16 17# 用CSS通过标签属性定位百度搜索框,此处必报错 18driver.find_element_by_css_selector("input").send_keys("selenium") 19 20# 等待521sleep(5) 22# 退出 23driver.quit()

2、其它属性定位

通过其它属性定位时,直接写属性名和属性值

代码:

1# coding = utf-8 2from time import sleep 3from selenium import webdriver 4 5# 驱动文件路径 6driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe' 7# 启动浏览器 8driver = webdriver.Chrome(executable_path=driverfile_path) 9# 打开百度首页 10driver.get(r'https://www.baidu.com/') 11# 用CSS通过name属性定位百度搜索框 12# driver.find_element_by_css_selector("[name='wd']").send_keys("selenium") 13 14# 用CSS通过maxlength属性定位百度搜索框 15# driver.find_element_by_css_selector("[maxlength='255']").send_keys("selenium") 16 17# 用CSS通过autocomplete属性定位百度搜索框 18driver.find_element_by_css_selector("[autocomplete='off']").send_keys("selenium") 19 20# 等待521sleep(5) 22# 退出 23driver.quit()

 二、标签和属性组合


代码:

1# coding = utf-8 2from time import sleep 3from selenium import webdriver 4 5# 驱动文件路径 6driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe' 7# 启动浏览器 8driver = webdriver.Chrome(executable_path=driverfile_path) 9# 打开百度首页 10driver.get(r'https://www.baidu.com/') 11# 用CSS通过标签和id属性组合定位百度搜索框 12# driver.find_element_by_css_selector("input#kw").send_keys("selenium") 13 14# 用CSS通过标签和class属性组合定位百度搜索框 15# driver.find_element_by_css_selector("input.s_ipt").send_keys("selenium") 16 17# 用CSS通过标签和name属性组合定位百度搜索框 18# driver.find_element_by_css_selector("input[name='wd']").send_keys("selenium") 19 20# 用CSS通过标签和autocomplete属性组合定位百度搜索框 21driver.find_element_by_css_selector("input[autocomplete='off']").send_keys("selenium") 22 23# 等待524sleep(5) 25# 退出 26driver.quit()

三、层级关系


代码:

1# coding = utf-8 2from time import sleep 3from selenium import webdriver 4 5# 驱动文件路径 6driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe' 7# 启动浏览器 8driver = webdriver.Chrome(executable_path=driverfile_path) 9# 打开百度首页 10driver.get(r'https://www.baidu.com/') 11# 用CSS通过层级关系定位百度搜索框 12driver.find_element_by_css_selector("form#form>span>input").send_keys("selenium") 13 14# 等待515sleep(5) 16# 退出 17driver.quit()

四、索引


CSS的索引定位与xpath的索引定位有很大不同,我们还以百度首页为例

我们要定位“百度一下”按钮,先定位到“百度一下”元素标签<input>的上级标签<span>,而<span>标签是<form>标签下所有<span>标签的第2个<span>,同时又是<form>标签下的第9个子标签

在xpath定位中这样写的:

driver.find_element_by_xpath("//*[@id='form']/span[2]/input")

但是CSS定位必须这样写

driver.find_element_by_css_selector("form#form>span:nth-child(9)>input")

代码:

1# coding = utf-8 2from time import sleep 3from selenium import webdriver 4 5# 驱动文件路径 6driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe' 7# 启动浏览器 8driver = webdriver.Chrome(executable_path=driverfile_path) 9# 打开百度首页 10driver.get(r'https://www.baidu.com/') 11# 用CSS通过索引系定位百度搜索框 12driver.find_element_by_css_selector("form#form>span:nth-child(8)>input").send_keys("selenium") 13# 用CSS通过索引定位"百度一下"按钮 14driver.find_element_by_css_selector("form#form>span:nth-child(9)>input").click() 15 16# 等待517sleep(5) 18# 退出 19driver.quit()

 五、CSS与xpath定位比较


定位方式

xpath

CSS

标签

//input

input

id

//input[@id='kw']

input#kw

class

//input[@class='s_ipt']

input.s_ipt

其它属性

//input[@name='username']

input[name=username]

input[name^=user](以user开头)

input[name$=name](以name结尾)

input[name*=erna](包含ernal)

定位子元素

//form[@id='form']/*

//form/input

form#form>*

form#form>input

 定位所有后代元素

//form//input

 form input

索引

//form/span[2]

 form>span[9]

 根据子元素回溯父元素

 //*[./[@id='su']](定位到父级元素)

 

根据兄弟元素定位

 

span.soutu-btn+input

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )