selenium的使用

基本定位:id 、name、link text、partial link text、class name、tag name

高级定位方法:xpath、css selector

-- id定位:使用元素的id属性值来定位,最建议使用
    driver.find_element(By.ID,'id属性值')

--name定位:使用元素的name属性值来定位
    driver.find_element(By.NAME,name属性值')

--link text定位:用连接的全部文本定位超级链接类型的元素,说明:超级链接就是指HTML中标记名称是a的元素,此种定位方法只能定位有文本的超级链接(<a>和</a>之间必须有文本字符串),不能定位其它类型的元素
    driver.find_element(By.LINK_TEXT,”链接文本”)

--partial_link属性定位:driver.find_element(By.PARTIAL_LINK_TEXT,"value")

--xpath定位

xpath是在(xml路径语言)是在xml文档中使用路径表达查找节点或节点集合的一种技术,因为html可以被看成一个特殊的xml文档,所以我们可以使用xpath这种技术在网页里面查找页面元素,谷歌也可以自动生成xpath表达式
    driver.find_element(By.XPATH,"xpath表达式")
    绝对路径xpath:从根节点开始描述路径,不建议使用
    相对路径xpath:从中间某层节点开始描述路径,以维护和管理


 ①相对路径+索引定位
//标签名/标签名[有同名标签时,所需标签的序号]/标签名
例://form/span[1]/input

②相对路径+属性定位
搜索标签名下属性为属性名1='属性值1'的标签://标签名[@属性名1='属性值1']
例://input[@autocomplete='off']

③相对路径+通配符定位
搜索整个网页找到标签里有属性名1='属性值1'的标签://标签名*[@属性名1='属性值1']
例://input[@autocomplete='off']
搜索整个网页找到标签里有属性值为'属性值1'的标签://标签名*[@*='属性值1']
例://input[@*='off']

④相对路径+部分属性值定位
搜素属性值以x开头的标签://*[starts-with(@属性名,'x')]
例://*[starts-with(@autocomplete,'of')]
搜素属性值以x结尾的标签://*[substring(@属性名.a,'x')]
例://*[substring(@autocomplete,'ff')]
搜素属性值包含x的标签://*[contains(@属性名,'x')]
例://*[contains(@autocomplete,'ff')]

⑤相对路径+文本定位
//标签名[text()='x')]          或       //*[text()="xxx"]
例://span[text()='按图片搜索')]
    

书写相对路径xpath:一般以 // 或 ./ 开头
        --//后直接写目标节点的标记名称
        --如果直接找到目标节点,不唯一,可以从父节点开始写书写,如果加了父节点还是不唯一,那么可以继续加爷爷节点或更向前的节点,每层父子关系的节点之间都使用/分隔开
        --在各层节点的标记名称后,都可以加筛选条件,xpath里把这样筛选条件成为“谓词”,使用[]来表示,其功能等价于SQL语句里的where子句
        --在各层节点的标记名称后,都可以加筛选条件,xpath里把这样筛选条件成为“谓词”,使用[]来表示,其功能等价于SQL语句里的where子句
            *写在/ 或 // 后,代表任意的标记名称
        --text函数:无参,获得某元素的开始和结束标记之间的文本,返回值是一个字符串
            driver.find_element(By.XPATH,"//*[test()='高级搜索'")

--css定位

css是层叠式样式表,在 该技术中有一种Selecyor(选择器)技术,其中包含一些css表达式可以用于定位元素,其功能与xpath功能有重叠

driver.find_element(By.CSS_SELECTOR,”css表达式”)
(1)id选择器

使用#号表示id属性,如:driver.find_element(By.CSS_SELECTOR, '#user')

(2)class选择器

使用.表示class属性,如:driver.find_element(By.CSS_SELECTOR, '.tel')

(3)通过标签名定位

格式:element,如:driver.find_element(By.CSS_SELECTOR, 'input')
    (4)通过属性或部分属性定位

格式:[”attribute=value”]

        driver.find_element(By.CSS_SELECTOR,"[autocomplete='off']")//查找属性autocomplete='off'的元素
 
driver.find_element(By.CSS_SELECTOR,"[autocomplete='off'][name='user']")//查找属性autocomplete='off'且name='user'的元素
 
//通过部分属性值定位
 
driver.find_elemen(By.CSS_SELECTOR,"[autocomplete^='o']")//查找autocomplete属性值从o开始的元素
 
driver.find_elemen(By.CSS_SELECTOR,"[autocomplete*='f']")//查找autocomplete属性值含有f的元素
driver.find_elemen(By.CSS_SELECTOR,"[autocomplete$='f']")//查找autocomplete属性值以f结尾的元素
    (5)层级选择器

根据元素的父子关系来选择,层级定位一般很难唯一定位到元素,所以一般情况下层级跟id/class/属性或者部分属性值一起组合定位。
格式:element>element,> 可以用空格代替
        driver.find_element(By.CSS_SELECTOR,"form>span>input")
 
driver.find_element(By.CSS_SELECTOR,"form span input")
 
driver.find_element(By.CSS_SELECTOR,"form>span>input>[type='password']")
 
driver.find_element(By.CSS_SELECTOR,"form span input [type='password']")
    (6)通过兄弟节点定位(通过元素的并列索引定位)

说明:兄弟节点就是同一父级元素下,存在多个相同子标签,那么这些子元素就是兄弟节点
         
         通过索引a:nth-child(1)来定位子元素
            //选择第1个<a>里元素
driver.find_element(By.CSS_SELECTOR,"div#s-top-left>a:nth-child(1)")
//选择第2个<a>里元素
driver.find_element(By.CSS_SELECTOR,"div#s-top-left>a:nth-child(2)")
//选择第n个<a>里元素
driver.find_element(By.CSS_SELECTOR,"div#s-top-left>a:nth-child(n)")

--tag_name属性定位:

driver.find_element(By.TAG_NAME,"input")

 注:新版本的Python  selenium 格式与老版本不一致
    by 
        老版本:by
        新版本:By
    定位方法
        老版本:小写
        新版本:全部大写

对css 的补充

css selector
   1. 通过多个属性来定位
    driver.find_element_by_css_selector(".ant-btn.ant-btn-primary"
  多个属性用“.”连接表示属性,用于定位
   注:每个属性前需要加“."
   2. copy css selector 方法
    各种符号的意义,能够改写复制出来的 css selector
   (1)#表示id属性
   (2)小数点表示class属性
   (3)  []表示所有属性
            [id="1"]
            [class="a"]
   (4)标签名前没有任何符号
            a
            input[value="1"]
   (5)  >表示父子元素之间的关系
            div>input
            表示我们要找到的input元素有一个父节点
   (6)空格表示祖先和子孙之间的关系
            div#id input.class
                1)表示页面中有一个id="id"的dev元素
                2) 在该dev元素的子孙节点中有个input标签
                3)该input标签有个class="class"的属性
                4)需要定位的就是这个input标签
                <html>
                <bady>
                <div id="id">
                <...>
                <input class="class">

Select

1.转换成下拉框类型select(Select仅适用于<Select>元素,不适用于<div>)

注:需要先定位到下来框,并实例化,
如:

s1 = Select(driver.find_element_by_id('s1Id'))
    s1.select_by_visible_text("好的")
        
    s1.select_by_value(选项的value属性的值)
        
    s1.select_by_index(第几个选项)

 2.相同定位参数存在多个

用find_elements_by_定位参数()[第几个]
注:多个要用elements
    driver.find_elements_by_class_name("ant-btn")[1].click()

select模块中关于option选项的方法:
options:返回所有的option选项
all_selected_options:返回所有选中的option选项
first_selected_option:返回第一个选中的option选项
is_multiple:查看是否多选

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值