元素定位(通过代码调用方法查找元素)、xpath、CSS
一、ID 定位
通过元素的 id 属性来定位元素
前置条件:所要定位的元素必须要有 id 属性
方法:driver.find_element_by_id(ID属性值)
注意:send_keys("admin") ,send_keys 表示给该标签传值。
from time import sleep from selenium import webdriver #获取浏览器 driver = webdriver.Chrome() #打开url driver.get("file://Users/lgy/Documents/fodder/web/%E%B3%A8%E5%86%8CA.html") #查找操作元素 username = driver.find_element_by_id("userA").send_keys("admin") #找到该元素,并输入指定内容 password = driver.find_element_by_id("passwordA").send_keys("123456") #3 秒后关闭浏览器 sleep(3) driver.quit()
二、Name 定位(包括:class 属性)
通过元素的 name 属性来定位元素
前置条件:所要定位的元素有 name 属性
方法:driver.find_element_by_name(name属性值)
注意:当一个元素标签包含的 class 属性有多个值时,主需要写其中一个就可以(如:<input class="c1 c2 c3">,此时随便使用一个值都可以定位)
from time import sleep from selenium import webdriver #获取浏览器 driver = webdriver.Chrome() #打开url driver.get("file://Users/lgy/Documents/fodder/web/%E%B3%A8%E5%86%8CA.html") #查找操作元素 username = driver.find_element_by_name("userA").send_keys("admin") #找到该元素,并输入指定内容 password = driver.find_element_by_name("passwordA").send_keys("123456") #通过 calss 属性传值 tel = driver.find_element_by_class_name("telA").send_keys("18900000001") #3 秒后关闭浏览器 sleep(3) driver.quit()
三、标签名定位(Tag_name)
通过元素的标签名来定位元素
方法:driver.find_element_by_tag_name(标签名)
from time import sleep from selenium import webdriver #获取浏览器 driver = webdriver.Chrome() #打开url driver.get("file://Users/lgy/Documents/fodder/web/%E%B3%A8%E5%86%8CA.html") #查找操作元素 username = driver.find_element_by_tag_name("input").send_keys("admin") #3 秒后关闭浏览器 sleep(3) driver.quit()
四、link_text 定位(<a>标签)
专门用来定位超链接元素(<a>标签)
方法:driver.find_element_by_link_text(“链接文本”),传入的链接文本必须全部匹配,不能模糊
注意:driver.find_element_by_partial_link_text("新"),可以支持模糊匹配
from time import sleep from selenium import webdriver #获取浏览器 driver = webdriver.Chrome() #打开url driver.get("file://Users/lgy/Documents/fodder/web/%E%B3%A8%E5%86%8CA.html") #查找操作元素(此时文本包含:新浪、百度、淘宝) tag_a = driver.find_element_by_link_text("新浪").click() #点击新浪的链接标签,里面的文本只要包含即可 #此时支持模糊匹配 tag_a1 = driver.find_element_by_partial_link_text("新").click() #3 秒后关闭浏览器 sleep(3) driver.quit()
五、定位一组元素(此时方法为:find_by_elements )
定位所有符合元素条件的元素
返回数据:返回数据为所有符合条件的元素的对象列表,若未查找到列表,则返回一个空列表。
取用返回数据的对象列表里的对象:定位一组符合条件的元素后,通过下标取指定的元素对象。
方法:driver.find_elements_by_xxx() .
from time import sleep from selenium import webdriver #获取浏览器 driver = webdriver.Chrome() #打开url driver.get("file://Users/lgy/Documents/fodder/web/%E%B3%A8%E5%86%8CA.html") #查找操作元素 inputs = driver.find_elements_by_id("input") inputs[0].send_keys("admin") inputs[1].send_keys("123456") inputs[2].send_keys("18900000001") #3 秒后关闭浏览器 sleep(3) driver.quit()
六、xpath 定位
Xpath:XML Path 简称,用于在XML文档中查找元素信息的语言。
方法:driver.find_element_by_xpath(xpath表达式)
xpath定位-路径定位
绝对路径:对外界依赖强,不建议使用
从最外层元素到指定元素之间所有经过的元素层级的路径
表达式写法:绝对路径以 / html 根节点开始,使用 / 来分隔元素层级
相对路径:
从目标定位元素的任意层级的上级元素开始到目标元素所经过的层级的路径
表达式写法:以 // 开始,后续每个层级都是用 / 分隔
1、使用绝对路径 和 相对路径
from time import sleep from selenium import webdriver #获取浏览器 driver = webdriver.Chrome() #打开url driver.get("file://Users/lgy/Documents/fodder/web/%E%B3%A8%E5%86%8CA.html") #查找操作元素,绝对路径 driver.find_element_by_xpath("/html/body/form/div/center/p[1]/input").send_keys("admin") #相对路径 driver.find_element_by_xpath("//p[1]/input").send_keys("123456") #3 秒后关闭浏览器 sleep(3) driver.quit()
2、xpath 定位 -- 属性定位
利用元素的属性定位
1、实例://input[@type='submit']
from time import sleep from selenium import webdriver #获取浏览器 driver = webdriver.Chrome() #打开url driver.get("file://Users/lgy/Documents/fodder/web/%E%B3%A8%E5%86%8CA.html") #查找操作元素 driver.find_element_by_xpath("//input[@placeholder='账号A']").send_keys("admin") #3 秒后关闭浏览器 sleep(3) driver.quit()
2、xpath -- 属性与逻辑结合(当查找的标签,含有相同的属性值,可以使用多个属性定位唯一标签)
利用元素的多个属性来进行定位
实例://input[@type='submit' and @class='banana']
from time import sleep from selenium import webdriver #获取浏览器 driver = webdriver.Chrome() #打开url driver.get("file://Users/lgy/Documents/fodder/web/%E%B3%A8%E5%86%8CA.html") #查找操作元素 driver.find_element_by_xpath("//input[@placeholder='账号A' and @id='userA']").send_keys("admin") #3 秒后关闭浏览器 sleep(3) driver.quit()
3、xpath定位 -- 属性与层级
先定位到其父级元素,然后再找到该元素。
//父标签//后代标签:父级和后代之间可以跨越元素
实例://div[@id='test1']/input[@value='提交']
from time import sleep from selenium import webdriver #获取浏览器 driver = webdriver.Chrome() #打开url driver.get("file://Users/lgy/Documents/fodder/web/%E%B3%A8%E5%86%8CA.html") #查找操作元素 driver.find_element_by_xpath("//p[@id='p1']/input").send_keys("admin") #3 秒后关闭浏览器 sleep(3) driver.quit()
4、xpath定位 -- 延伸
利用元素的文本定位元素://*[text()='注册']
利用局部属性值定位元素://*[contains(@attribute,'局部属性值')]
from time import sleep from selenium import webdriver #获取浏览器 driver = webdriver.Chrome() #打开url driver.get("file://Users/lgy/Documents/fodder/web/%E%B3%A8%E5%86%8CA.html") #查找操作元素,包含关键字:contains driver.find_element_by_xpath("//input[contains(@placeholder,'账号')]").send_keys("admin") #根据文本(此为精确匹配,和原文本必须保持一致) driver.find_element_by_xpath("//*text()='访问 新浪 网站'") #3 秒后关闭浏览器 sleep(3) driver.quit()
xpath 综合案例:
from time import sleep from selenium import webdriver #获取浏览器 driver = webdriver.Chrome() #打开url driver.get("file://Users/lgy/Documents/fodder/web/%E%B3%A8%E5%86%8CA.html") #查找操作元素 #点击登录,文本 driver.find_element_by_xpath("//*[text()='登录']").click() #输入用户名和邮箱,属性 driver.find_element_by_xpath("//*[@placeholder='手机号/邮箱']").send_keys("12300000001") #密码,包含 driver.find_element_by_xpath("*[contains(@placeholder,'密码')]").send_keys("1234566") #验证码,多属性 driver.find_element_by_xpath("//*[@placeholder='验证码' and @name='verify_code']").send_keys("8888") #登录按钮,层级 driver.find_element_by_xpath("//*[@class='login_bnt']/a").click() #3 秒后关闭浏览器 sleep(3) driver.quit()
七、CSS 选择器
是一种语言,用来描述HTML元素显示的样式
选择器:一种表达式,可以找到 HTML 中的元素标签
CSS定位:selenium 利用选择器定位元素的定位方法
方法:driver.find_element_by_css_selector(选择器表达式)
策略:ID 选择器(#id属性值)、类选择器(.class属性值)、元素选择器(标签名)、属性选择器([name='属性值'])、层级选择器
from time import sleep from selenium import webdriver #获取浏览器 driver = webdriver.Chrome() #打开url driver.get("file://Users/lgy/Documents/fodder/web/%E%B3%A8%E5%86%8CA.html") #查找操作元素 #用户名:id选择器 -- #id属性值 driver.find_element_by_css_selector("#userA").send_keys("admin") #密码:属性选择器 -- [属性名='属性值'] driver.find_element_by_css_selector("[name='passwordA]").send_keys("123456") #电话:类选择器 -- .class属性值 driver.find_element_by_css_selector(".telA").send_keys("12345678901") #确定,标签选择器 -- 标签名 driver.find_element_by_css_selector("button").click() #3 秒后关闭浏览器 sleep(3) driver.quit()
CSS层级选择器
父子关系:根据元素的父子关系来选择元素
表达式:element1>element2(如:p[id='p1']>input)
后代关系:根据元素的上级元素来选择元素(只要是目标元素上层元素即可)
表达式:element1 element2(记住两个元素之间有空格)(如:p[id='p1'] input)
CSS定位 -- 延伸
利用局部属性值定位:tagName[attribute*='局部属性值']
from time import sleep from selenium import webdriver #获取浏览器 driver = webdriver.Chrome() #打开url driver.get("file://Users/lgy/Documents/fodder/web/%E%B3%A8%E5%86%8CA.html") #查找操作元素:账号 driver.find_element_by_css_selector("[placeholder*='账']").send_keys("adming") #层级选择器:密码 driver.find_element_by_css_selector("#p1>input").send_keys("123456") #3 秒后关闭浏览器 sleep(3) driver.quit()
八、元素定位的另一种写法(用于后期封装)
find_element 方法
八种元素定位方法底层都是使用find_element,通过BY 不同的值区分定位方式。
from time import sleep from selenium import webdriver from selenium.webdriver.common.by import By #获取浏览器 driver = webdriver.Chrome() #打开url driver.get("file://Users/lgy/Documents/fodder/web/%E%B3%A8%E5%86%8CA.html") #查找操作元素 driver.find_element(By.ID,"userA").send_keys("admin") driver.find_element(By.NAME,"passwordA").send_keys("123456") driver.find_element(By.CLASS_NAME,"telA").send_keys("18600000111") driver.find_element(By.TAG_NAME,"button").click() #3 秒后关闭浏览器 sleep(3) driver.quit()