测开学习DAY29

黑马程序员网课学习(web自动化)

2Selenium-API操作

一、元素定位

1. 为什么要使用元素定位

要使用web自动化操作元素,必须首先找到此元素。

2. 定位工具

火狐:Firebug (F12获取直接点击 Friebug图标)

谷歌:F12键(开发者工具)

3. 定位元素时依赖于什么

  1. 标签名

  2. 属性

  3. 层级

  4. 路径

4. 定位方式

  1. id

  2. name

  3. class_name(使用元素的class属性定位)

  4. teg_name(标签名称 <标签名 .../>)

  5. link_text(定位超连接 a标签)

  6. partial_link_text(定位超链接 a标签 模糊)

  7. xpath(基于元素路径)

  8. css(元素选择器)

汇总:

  1. 基于元素属性特有定位方式(id\name\class_name)

  2. 基于元素标签名称定位:tag_name

  3. 定位超链接文本(link_text、partial_link_text)

  4. 基于元素路径定位(xpath)

  5. 基于选择器(css)

4.1 id 定位

说明:通过元素的id属性定位,id一般情况下在当前页面中是唯一。

方法:driver.find_element_by_id(id)

提示:元素必须要有id属性。

案例:

导包

获取浏览器驱动对象

打开url

查找用户名文本框

查找密码框文本框

输入用户名

输入密码

暂停3秒

关闭驱动

提示:

  1. 输入方法:send_keys("输入内容");

  2. 退出浏览器驱动:driver.quit();

  3. 打开url: driver.get(url)

  4. 导包:from selenium import webdriver

  5. 获取火狐浏览器驱动对象 driver = webdriver.Firefox()

python 复制代码
# 导包
from selenium import webdriver
from time import sleep

# 获取 浏览器对象
driver = webdriver.Firefox()

# 打开url
# 注意:\反斜杠在python是转义字符  r:修饰的字符串,如果字符串中有转义字符,不进行转义使用
url = r"E:\课堂\北京\北京十期\Day01\02_其他资料\浏览器\课堂素材\注册A.html"

# 使用双反斜杠 进行转义操作
# url = "E:\\课堂\\北京\\北京十期\\Day01\\02_其他资料\\浏览器\\课堂素材\\注册A.html"

# 使用本地浏览模式 前缀必须添加 file:///
# url = "file:///E:/课堂/北京/北京十期/Day01/02_其他资料/浏览器/课堂素材/注册A.html"

# 复制浏览器地址
# url = "file:///E:/%E8%AF%BE%E5%A0%82/%E5%8C%97%E4%BA%AC/%E5%8C%97%E4%BA%AC%E5%8D%81%E6%9C%9F/Day01/02_%E5%85%B6%E4%BB%96%E8%B5%84%E6%96%99/%E6%B5%8F%E8%A7%88%E5%99%A8/%E8%AF%BE%E5%A0%82%E7%B4%A0%E6%9D%90/%E6%B3%A8%E5%86%8CA.html"
driver.get(url)

# 查找 用户名元素
username = driver.find_element_by_id("userA")

# 查找 密码元素
password = driver.find_element_by_id("passwordA")

# 用户名输入 admin  send_keys("内容")
username.send_keys("admin")

# 密码 输入 123456
password.send_keys("123456")

# 暂停3秒
sleep(3)

# 退出浏览器驱动
driver.quit()
4.2 name 定位

说明:通过元素的name属性来定位, name一般名称为重复。

方法: drivr.find_element_by_name(name)

提示: 元素必须要有name属性

4.3 class_name定位

说明: 通过元素的class属性来定位,class属性一般为多个值。

方法: driver.find_element_by_class_name()

提示: 元素必须要有class属性

4.4 区别

id: 一般为唯一标识符。

name:可以重名

class:多个命名。

4.5 tag_name (了解)

说明:是通过元素的标签名称来定位,标签名(查看元素时尖括号(<)紧挨着的单词或字母就是标签名)(标签名也就是元素名)

方法:driver.find_element_by_tag_name("标签名")

注意: 如果页面中存在多个相同标签,默认返回第一个标签元素。

说明:定位超链接标签

方法:driver.find_element_by_link_text()

注意: link_text:只能使用精准匹配(a标签的全部文本内容)

说明:定位超链接标签

方法:driver.find_element_by_partial_link_text()

注意:

  1. 可以使用精准或模糊匹配,如果使用模糊匹配最好使用能代表唯一的关键词

  2. 如果有多个值,默认返回第一个值

二、Xpath 和 Css 定位

1. 为什么使用Xpath和css定位

  1. id,name,class:依赖于元素这三个对应的属性,如果元素没有以上三个属性,定位方法不能使用。

  2. link_text,partial_link_text:只适合超链接

  3. tag_name:只能找页面唯一元素,或者 页面中多个相同元素中的第一个元素

2. 什么是Xpath定位

说明:基于元素的路径

3. xpath介绍

xpath是XML Path简称

(xml是一种标记语言,焦点:数据存储于传递(配置文件) ,后缀.XML)

4. Xpath常用的定位策略

  1. 路径

1). 绝对路径:

语法:以单斜杠开头逐级开始编写,不能跳级。如:/html/body/div/p[1]/input

2). 相对路径

语法:以双斜杠开头,双斜杠后边跟元素名称,不知元素名称可以使用*代替。

如: //input 或者 //*

  1. 路径结合属性

语法:在Xpath中,所有的属性必须使用@符号修饰 如://*[@id='id值']

  1. 路径结合逻辑(多个属性)

语法://*[@id="id值" and @属性='属性值']

  1. 路径结合层级

语法://*[@id='父级id属性值']/input

提示:

  1. 一般建议使用指定标签名称,不使用*代替,效率比较慢。

  2. 无论是绝对路径和相对路径,/后面必须为元素的名称或者*

  3. 扩展:在工作中,如果能使用相对路径绝对不使用绝对路径。

python 复制代码
"""
    需求:
        1. 使用绝对路径定位 用户名 输入 admin
        2. 暂停2秒钟
        3. 使用相对路径定位 密码框 输入 123

    方法:
        driver.find_element_by_xpath()
"""

# 导包
from selenium import webdriver
from time import sleep


# 获取 浏览器驱动对象
driver = webdriver.Firefox()

# 打开 注册A.html
url = r"D:\web自动化素材\课堂素材\注册A.html"
driver.get(url)

# 使用绝对路径定位 用户名 admin
# driver.find_element_by_xpath("/html/body/form/div/fieldset/p[1]/input").send_keys("admin")

# 使用层级结合属性 定位用户名:
driver.find_element_by_xpath("//p[@id='p1']/input").send_keys("admin")

# 暂停2秒
sleep(2)

# 使用相对路径 定位 密码  123
# driver.find_element_by_xpath("//input[@id='passwordA']").send_keys("123")


# 使用逻辑结合
driver.find_element_by_xpath("//input[@id='passwordA' and @placeholder='密码A']").send_keys("123")
# 暂停 3秒
sleep(3)
# 退出浏览器驱动
driver.quit()

5. Xpath扩展

  1. //*[text()='XXX'] # 定位文本值等于XXX的元素

提示:一般适合 p标签,a标签

  1. //*[contains(@属性,'xxx')] # 定位属性包含xxx的元素 【重点】

提示:contains为关键字,不可更改。

  1. //*[starts-with(@属性,'xxx')] # 定位属性以xxx开头的元素

提示:starts-with为关键字不可更改

相关推荐
西岸行者3 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意3 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码3 天前
嵌入式学习路线
学习
毛小茛3 天前
计算机系统概论——校验码
学习
babe小鑫3 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms3 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下3 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。3 天前
2026.2.25监控学习
学习
im_AMBER3 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode
CodeJourney_J3 天前
从“Hello World“ 开始 C++
c语言·c++·学习