selenium之八大元素定位

1,470 阅读2分钟

ID 元素定位

  • id:基于元素属性中的id的值来进行定位,类似于人们身份证上的身份证号码,不出意外都不会重复

    driver.find_element_by_id('id')
    

name 元素定位

  • name:基于元素属性中的name的值来进行定位,类似于人们身份证上的名字,很可能会出现重名

    driver.find_element_by_name('name')
    

link text 元素定位

  • link text:主要用于超链接进行定位

    driver.find_element_by_link_text('注册')
    

partial link text 元素定位

  • partial link text:link text模糊查询版本,类似于数据库中的link %,当模糊查询匹配到多个符合调节的元素,选取第一个

    driver.find_element_by_partial_link_text("册")
    

classname 元素定位

  • classname:基于元素class样式来定位,非常容易遇到重复的

    driver.find_element_by_class_name("am-btn am-btn-secondary am-btn-xs am-radius")
    

tagname 元素定位

  • tagname:标签名来进行定位,重复度最高,只有在需要定位后进行二次筛选的情况下使用

    driver.find_elements_by_tag_name("a")
    

cssselector 元素定位

  • cssselector:通过绝对路径定位:这种方式几乎不用

    driver.find_element_by_css_selector("body > div.am-g.my-content > div > div.am-u-sm-12.am-u-md-6.am-u-lg-4.container-right > div.forgetpwd-top > a")
    

xpath 元素定位

  • xpath:1、通过绝对路径定位,这种方式几乎不用

    driver.find_element_by_xpath("/html/body/div[4]/div/div[2]/div[1]/a")
    
  • xpath:2、通过相对路径进行定位,格式“//+唯一的父标签+/子标签……”

    driver.find_element_by_xpath('//form/span/input')
    
  • xpath:3、通过元素属性定位

    # 单属性定位
    driver.find_element_by_xpath("//input[@name='pwd']")
    # 多属性定位
    driver.find_element_by_xpath('//a[@title="Tutorialspoint" and @rel="nofollow"]')
    
  • xpath:4、通过元素部分属性定位

    # 以部分属性值开头
    driver.find_element_by_xpath("//a[starts-with(@title,'Tutorial')]")
    # 包含部分属性值
    driver.find_element_by_xpath("//a[contains(@title,'Tutorial')]")
    driver.find_element_by_xpath("//a[contains(text(),'百度')]")
    
  • xpath:5、通过文本定位

    driver.find_element_by_xpath("//span[text()='Login']")
    

这几种查找元素的效率中,id>name>xpath。网页中使用Copy Xpath不准确,不建议使用。有些元素每次网页刷新,属性值都会改变,这称之为动态元素,只能用其他方法定位。