1.id定位
通过元素的id属性进行元素定位,在html标准规范中,id值是唯一的
定位方法:find_element_by_id(属性值)
2.name定位
通过name属性来定位元素,name是允许重复的,默认匹配第一个
定位方法:find_element_by_name(属性值)
3.class_name定位
通过class属性来定位元素,class是允许重复的
定位方法:find_element_by_class_name(属性值),属性值若有多个单词,如:“password input”,只需要取其中一个就好“password”或“input”
4.tag_name定位
通过tag属性来定位元素,tag是允许重复的,会自动定位到第一个tag_name
定位方法:find_element_by_tag_name(属性值)
5.link_text定位
通过A标签属性来定位元素,要求元素为当前标签的全部文本信息,link_text标签允许重复,会自动定位到第一个
定位方法:find_element_by_link_text(属性值)
6.partail_link_text定位
通过A标签属性来定位元素,可以通过超链接的局部文本信息定位
定位方法:find_element_by_partail_link_text(属性值)
import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://a.admin.com:8010/zentao/index.php?m=user&f=login")
# 使用id元素找到用户名输入框,并输入字符
driver.find_element_by_id("account").send_keys("admin")
# 使用name元素找到密码输入框,并输入字符
driver.find_element_by_name("password").send_keys("admin123")
# 使用tag元素找到登录按钮,并点击
driver.find_element_by_tag_name("button").click()
time.sleep(5)
driver.quit()
driver.get("https://www.baidu.com/")
# 使用link_text元素找到新闻链接并点击进入页面
driver.find_element_by_link_text("新闻").click()
time.sleep(5)
# 使用class_name元素找到密码输入框,并输入字符
driver.find_element_by_class_name("s_ipt").send_keys("python函数")
# 使用id元素找到登录按钮,并点击
driver.find_element_by_id("su").click()
time.sleep(5)
driver.quit()
"""
定位一组元素
定位方法:find_elements_by_定位方式
定位一组元素返回的是一个列表,通过下标的方式来使用列表中的元素,下标顺序从0开始
"""
driver.get("https://www.jianshu.com/sign_up")
# 定位一组input元素并将它赋给elements变量
elements = driver.find_elements_by_tag_name("input")
# 取该列表的其中一个元素,并输入字符
elements[2].send_keys("admin")
time.sleep(5)
driver.quit()
7.xpath定位
7.1 路径定位-通过元素路径来定位
绝对路径:以/html开头,元素层级之间以/分隔,相同层级元素可以使用从1开始的下标,如:/html/body/div[1]/form/input[2]
相对路径:匹配任意层级元素,相同层级元素可以使用从1开始的下标,以//tag_name或者//*开头,如://div[1]/form/input[2]
可在浏览器如chrome中f12,使用ctrl+f来验证路径正确性
定位方法:find_element_by_xpass(属性值)
7.2 元素属性定位
//*或//tag_name 如://*[@id="属性值"]
可以用来对非id、name等不常见属性的定位
定位方法:find_element_by_xpass("//*[@id="属性值"]")
若报语法错误需要将最外面的双引号变为单引号即可('//*[@id="属性值"]')
7.3 属性与逻辑结合定位
//*或//tag_name 如://*[@id1="属性值1" and @id2="属性值2"]
多个属性结合起来对元素进行定位
7.4 属性与层级结合定位
//*或//tag_name开头 上级目录+属性+当前目录 如://*form[@id="属性值"]/input
在任意层级中都可以结合属性来定位
7.5 xpath扩展
//*[text()="元素全部文本内容"]--------通过元素文本内容定位
//*[contains(@属性名,"文本内容")] 如 //*[contains(@name,"mytest")]--------属性name中包含文本mytest的元素
//*[starts-with(@属性名,"文本内容")] 如 //*[starts-with(@name,"mytest")]--------属性name的值是以mytest开头
import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.jianshu.com/sign_up")
# 定位一组input元素并将它赋给elements变量
elements = driver.find_elements_by_tag_name("input")
# 取该列表的其中一个元素,并输入字符
elements[2].send_keys("admin")
time.sleep(3)
# 使用xpath的绝对路径方法找到手机号码输入框元素,并输入字符
driver.find_element_by_xpath("/html/body/div[1]/div[2]/div[2]/div/form/div[2]/input[2]").send_keys("13000000000")
# 使用xpath的相对路径方法找到验证码输入框元素,并输入字符
driver.find_element_by_xpath("//div[3]/input").send_keys("111111")
# 使用xpath元素属性定位方法找到密码输入框元素,并输入字符
driver.find_element_by_xpath('//*[@type="password"]').send_keys("111111")
# 使用xpath元素属性与逻辑结合定位方法找注册按钮,并点击
driver.find_element_by_xpath('//*[@type="submit" and @name="commit"]').click()
# 同
driver.find_element_by_xpath('//input[@type="submit" and @name="commit"]').click()
time.sleep(3)
# 使用xpath元素属性与层级结合定位方法找到用户协议按钮,并点击
driver.find_element_by_xpath('//p[@class="sign-up-msg"]/a[1]').click()
time.sleep(2)
driver.quit()
8.css定位元素
比xpath定位速度快,但无法使用下标,若查询到有多个结果会匹配第一个
定位方法:find_element_by_css_selector("css选择器表达式")
8.1 id选择器
#id -----表示通过元素的id属性进行元素选择,#后面跟id的属性值,如 #user_nickname
8.2 class选择器
.class ------表示通过元素的class属性值其中一个属性值进行定位,.后面跟class的其中一个属性值,class="iconfont ic-wechat",如 .iconfont
8.3 元素选择器
通过元素标签名称来定位元素,表达式:tag_name,缺点是容易重复,默认定位到第一个,多数无法精准定位,不推荐使用
8.4 属性选择器
[属性名称=‘all属性值’] ------表示通过属性=属性值来定位,如 [class='iconfont ic-wechat']
8.5 层级选择器
父子关系表达式1:元素1>元素2 ------通过元素1来定位元素2,元素2需为元素1的直接子元素,如 定位<p />标签下的<input />标签,p>input 可以为元素1加属性,如 p[id='mytest']>input,也可结合id选择器写为:#mytest>input
父子或隔代关系表达式2:元素1 元素2------通过元素1来定位元素2,元素2需为元素1的后代元素,可为父子关系或隔代元素,如 p input 或p[id='mytest'] input,也可结合id选择器写为:p #mytest2
8.6 css扩展
input[属性名称^='p'] ------属性以p字母开头的元素 如:input[id^='my']
input[属性名称$='p'] ------属性以p字母结束的元素 如:input[type$='用户名']
input[属性名称*='p'] ------属性包含p字母的元素 如:input[name*='user']
import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.jianshu.com/sign_up")
# 通过css的id选择器定位用户名输入框,并输入字符
driver.find_element_by_css_selector("#user_nickname").send_keys("admin")
# 通过css的class选择器定位注册按钮,并点击
driver.find_element_by_css_selector(".sign-up-button").click()
# 使用css的属性选择器定位方法找到手机号码输入框元素,并输入字符
driver.find_element_by_css_selector("[id='user_mobile_number']").send_keys("13000000000")
# 使用css的父子层级选择器定位方法找到验证码输入框,并输入字符
driver.find_element_by_css_selector('div[class="input-prepend restyle no-radius security-up-code js-security-number"]>input').send_keys("111111")
# 使用css的隔代层级选择器定位方法找到密码输入框,并输入字符
driver.find_element_by_css_selector('form #user_password').send_keys("111111")
# 通过css的包含字符串扩展定位方式找到注册按钮,并点击
driver.find_element_by_css_selector("input[name*='comm']").click()
time.sleep(2)
driver.quit()