Selenium八大元素定位方法
Selenium可以驱动浏览器完成各种操作,比如模拟点击等。要想操作一个元素,首先应该识别这个元素。人有各种的特征(属性),我们可以通过其特征找到人,如通过身份证号、姓名、家庭住址。
同理,一个元素会有各种的特征(属性),我们可以通过这个属性找到这对象。
一、ID定位
通过元素的ID属性值来进行元素定位
(在html标准规范中ID值是唯一的)
定位方法:find_element_by_id(id)
#id参数表示的是id的属性值;(定位的元素必须有ID属性)
driver.find_element_by_id("kw")
二、NAME定位
通过元素的NAME属性值来进行元素定位;
(name属性值在html页面中是可以重复的);
定位方法:find_element_by_name(name)
#name参数表示的是name的属性值;
(定位元素必须有NAME属性)
driver.find_element_by_name("wd")
三、CLASS_NAME定位
通过元素的CLASS属性值来进行元素定位;
(class属性值在html页面中是可以重复的);
定位方法:find_element_by_class_name(class_name)
#class_name参数表示的是class的属性值;
(定位元素必须有class属性)
注意:class属性值有多个时(用空格隔开),仅需要其中一个属性值:
(但若是使用Xpath属性定位时,需要用到全部属性值)
比如:driver.find_element_by_class_name(“s_ipt”)
四、TAG_NAME定位(不建议使用)
通过元素的标签名称来进行元素定位,在同一个html页面当中,相同标签元素会有很多;
定位方法:find_element_by_tag_name(tag_name)
#tag_name参数表示的是元素的标签名;
(定位元素必须有标签名)
如果有重复的元素定位到的元素默认都是第一个;
例:driver.find_element_by_tag_name("input")
五、LINK_TEXT定位
通过超链接的全部文本信息来进行元素定位
(主要用来定位a标签);
定位方法:find_element_by_link_text(link_text)
#link_text参数表示的是超链接(a标签)的全部文本内容;
driver.find_element_by_link_text("新闻")
driver.find_element_by_link_text("地图")
六,PARTIAL_LINK_TEXT定位(使用少)
通过超链接的局部文本信息来进行元素定位(主要用来定位a标签);
定位方法:find_element_by_partial_link_text(partial_link_text)
#partial_link_text参数表示的是超链接(a标签)的局部文本内容;
例:find_element_by_partial_link_text("访问")
find_element_by_partial_link_text("网站")
七、定位一组元素
定位一组元素的方法
find_elements_by_id(id)
find_elements_by_tag_name(tag_name)
定位一组元素返回的值是一个里列表;
可以通过下标来使用列表中的元素;(下标以0开始)
8,XPATH定位及CSS定位
在页面当中,有一些元素无法通过元素的信息精准的定位到,所以需要Xpath定位。
什么是XPATH
Xpath是XML Path的简称,是一门在XML文档中查找元素信息的语言;
XPATH定位策略
路径定位
属性定位
属性与逻辑结合
属性与层级结合
其中路径定位比较常用
定位方法:find_element_by_xpath(xpath)
#xpath表达式
selenium自动化浏览器测试脚本源码:
from selenium import webdriver
import time
# 存放浏览器驱动路径
path = "/usr/local/chromedriver_mac_arm64/chromedriver"
# 启动浏览器
driver = webdriver.Chrome(path)
# 访问网址
url = "https://www.baidu.com"
driver.get(url)
# 等待1s
time.sleep(1)
# 找到搜索框元素、输入搜索内容“姚咩咩”并提交
driver.find_element_by_id('kw').send_keys('姚咩咩')
# 找到确定按钮框元素、并执行点击操作
driver.find_element_by_id('su').click()
time.sleep(2)
# 在浏览器的开发者模式下,找到需要定位元素的xpath并copy下来
# //*[@id="9"]/div/div[1]/h3/a 注意要把双引号改成单引号
result = driver.find_element_by_xpath("//*[@id='9']/div/div[1]/h3/a")
#点击该元素访问页面
result.click()
#睡眠20s后自动关闭网页
time.sleep(20)
driver.close()