元素定位,顾名思义就是根据元素的特征,来确认元素的条件,然后根据条件去找到唯一的那个元素。
一、八大元素
1、只根据元素的一个属性来找元素(6大)
1)id、name、class_name(只支持一个class值)、tag_name
2)只针对a元素
link_text、partial_link_text
示例:
1 # class - 只能是class属性当中的一个值 2 driver.find_element_by_class_name("s_ipt") # 1个元素 - 匹配到的第1个元素 3 driver.find_elements_by_class_name("s_ipt") # 所有匹配多个元素 - 列表 4 5 # name 6 driver.find_element_by_name("wd") 7 driver.find_elements_by_name("wd") 8 # 9 # tag 10 driver.find_element_by_tag_name("input") 11 driver.find_elements_by_tag_name("input") 12 # 13 # link_text 14 driver.find_element_by_link_text("地图") 15 driver.find_elements_by_link_text("地图") 16 # 17 # # partial_link_text 18 driver.find_element_by_partial_link_text("hao") 19 driver.find_elements_by_partial_link_text("hao")
2、多个属性组合来找元素或者通过其它的关系来找元素(2大)-
1)绝对定位: 以/开头, 父/子
根据继承顺序、同级位置顺序一层一层的找,与在windows文件目录,需要一层一层的打开找到对应的文件(逐层打开)。
示例:
/html/body/div[2]/div[3]/div/div/div[2]/div[3]/i[1]
/*[@id="number-attend"]/div[2]/div[3]/i[1]
//div[@id="number-attend"]//i[@class="ing
2)相对定位(Xpath定位):靠自己的特征来定位,自己唯一的标识,以//开头
二、Xpath定位
(在当前需定位的页面按F12下elements当中,按Ctrl +F,弹出表达式确认框)
1、根据元素的唯一属性(标识来定位)
表达式格式://标签名[@属性=值]
示例://i[@class="ing"]
//*[@*="ing"]
2、文本匹配
表达式格式://标签名[text()=值]
示例://a[text()="公告"]
3、包含
表达式格式://标签名[contains(@属性/text(),值)]
示例://a[contains(@href,"/Notify/index/courseid/")]
//a[contains(text(),"公告")]
4、辑运算 来组合更多的元素特征。 and or
表达式格式:
1)//标签名[@属性=值 and @属性=值 and contains(@属性/text(),值) and text()=值]
2)//标签名[@属性=值 or @属性=值]
示例://a[text()="公告" and contains(@href,"/Notify/index/courseid/")]
5、层级定位://一级元素//二级元素//......
示例://div[@id="number-attend"]//i[@class="ing"]
6、轴定位: 关系 - 分析元素之间的关系,页面的结构。
1)通过兄弟姐妹找到自己
2)通过后代元素来找到 祖先元素
轴运算:
ancestor:祖先结点 包括父
parent:父结点 给g
preceding: 当前元素节点标签之前的所有结点。(html页面先后顺序)
preceding-sibling: 当前元素节点标签之前的所有兄弟结点
following: 当前元素节点标签之后的所有结点。(html页面先后顺序)
following-sibling:当前元素节点标签之后的所有兄弟结点
使用语法:
已知的元素/轴名称::标签名称[@属性=值]
例://div//table//td//preceding::td
//p[@title="余粮"]/preceding-sibling::p[@class="stuno"]
//p[@title=”余粮"]/parent::*/following-sibling::li//p[@class="name"]
1 # 直接写By,按Alt+Enter进行导入即可 2 from selenium.webdriver.common.by import By 3 element = driver.find_element(By.XPATH,‘//p[@title="余粮"]/preceding-sibling::p[@class="stuno"]‘)4 element_list = driver.find_elements(By.XPATH,‘//p[@title="余粮"]/preceding-sibling::p[@class="stuno"]‘)
原文地址:https://www.cnblogs.com/forayepy/p/12425635.html