八大元素定位

八种元素定位

1. id,基于元素属性中id的值来进行定位

2. name

3. link text

4. partial link text

5. classname

6. tagname

7. cssselector

8. xpath 

常用的为id、name、xpath

from selenium import webdriver
from time import sleep

# 创建浏览器对象
driver = webdriver.Chrome()
# driver.get('http://39.98.138.157/shopxo/index.php?s=/index/user/logininfo.html')
driver.get('http://www.baidu.com')
# driver.maximize_window()
'''
八大元素定位法则:
1. id,基于元素属性中id的值来进行定位
id类似于人们身份证上的身份证号码,不出意外都不会重复
2. name:基于元素属性中name的值来进行定位
类似于人们身份证上的身份证名字,很可能会出现重名
3. link text:主要用于超链接进行定位
4. partial link text:link text的模糊查询版本,类似于数据库中like %
当模糊查询匹配到多个符合条件的元素,选取第一个
5. classname:基于元素样式来进行定位,非常容易遇到重复的
6. tagname:标签名来进行定位,重复度最高。只有在需要定位后进行二次筛选的情况下使用
7. cssselector:应用相对较多的一种行为,最初IE浏览器不支持xpath,完全基于class属性来实现的定位
8. xpath :目前应用最多的一种行为,基于页面结构来进行的定位
绝对路径:从html根路径下一层一层往下数,找到对应的层级,从而找到元素,除非十万火急,不要这么写
相对路径:基于匹配制度来查找元素,依照xpath语法结构来走
例如://*[@id="kw"]
//表示从根路径下开始查找
* 任意元素
[] 表示筛选条件(查找函数)
@ 表示基于属性来筛选,例如@id="kw"表示基于id属性值为kw的条件来进行筛选
确认xpath路径是否正确:
1. 在开发者工具elements页面使用ctrl+f查找,进行判断
2. 在console中输入$x()进行校验
如果要基于text来定位元素
在[]中添加text()="文本内容"进行查找,例如://a[text()='登录']

当你定位元素,无法直接定位时,可以通过定位子级元素返回父级来获取元素;/..
//input[@id="kw"]
//input[contains(@id,'kw')]
contains表示进一步查找,匹配项模糊查找
//input[contains(text(),'搜搜搜索')]
'''
# 基于ID定位
# driver.find_element_by_id('id')
# 基于name定位
# driver.find_element_by_name('name')
# 基于link text定位
# driver.find_element_by_link_text('注册').click()
# 基于partial link text定位,获取多元素时的操作
# dr = driver.find_elements_by_partial_link_text('百度')
# for d in dr:
# print(d.text)
# class属性定位
# driver.find_element_by_class_name('am-radius').click()
# tagName定位
# dr = driver.find_elements_by_tag_name('a')
# for d in dr:
# if d.text == '登录':
# d.click()
# cssSelector定位
# body > div.am-g.my-content > div > div.am-u-sm-12.am-u-md-6.am-u-lg-4.container-right > div.user-form-container > form > div:nth-child(1) > input
# 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.user-form-container > form > div:nth-child(1) > input')
# xpath元素定位
# /html/body/div[4]/div/div[2]/div[2]/form/div[1]/input
# //*[@id="kw"]
# driver.find_element_by_xpath('//input[@name="accounts"]')
sleep(2)
driver.find_element_by_xpath('//*[@id="s-hotsearch-wrapper"]/div/a[1]/div').click()

原文地址:https://www.cnblogs.com/Murraya/p/13116230.html