目录
一、前置代码
二、通过HTML元素ID的方式去进行元素定位
三、通过HTML元素的name属性进行元素定位
四、练习一:打开百度登录界面并输入数据后登录
五、通过HTML元素的类名来进行元素定位
六、通过链接的文本值方式进行元素定位
七、通过部分的链接文本值进行元素定位
八、通过标签名的方式进行元素定位
# coding=utf-8
from selenium import webdriver
import time
driver = webdriver.Chrome()
url = "https://www.baidu.com"
driver.get(url)
# 最大化浏览器窗口
driver.maximize_window()
# 添加全局的等待时间
driver.implicitly_wait(10)
这里打开百度首页
语法介绍:
通过ID方式进行元素定位
find_element_by_id("id值")对id值进行事件操作
表单输入内容:send_keys("字符串")
.send_keys("文本")
是将指定的文本输入到找到的元素中。
send_keys
是Selenium提供的方法,用于模拟键盘输入操作。在这个方法中,可以传递一个字符串参数,表示要输入的文本。
点击事件:click()
操作代码
# 一.通过ID方式进行元素定位
# 在百度首页输入框中输入软件测试
driver.find_element_by_id("kw").send_keys("软件测试")
# 点击“百度一下”按钮
driver.find_element_by_id("su").click()
跑一下没问题就把代码注释掉,进行下一个操作
介绍:
通过name方式进行元素定位
语法:find_element_by_name("name值")
同样,这里打开百度首页,然后去输入一个“人工智能”
# 在百度首页输入框中输入人工智能
driver.find_element_by_name("wd").send_keys("人工智能")
跑起来没问题,拓展一下需求:
此时,点击百度首页的右上角登录按钮,弹出
结合上述内容,编写一个需求:打开首页 --> 点击右上角登录按钮 --> 输入 账号、密码 --> 勾选协议 --> 点击登录
# #在百度首页点击右上角的登录按钮
driver.find_element_by_id("s-top-loginbtn").click()
# #输入百度账号
driver.find_element_by_name("userName").send_keys("zhangsan")
# #输入密码
driver.find_element_by_id("TANGRAM__PSP_11__password").send_keys("12345678")
# #点击登录按钮
driver.find_element_by_name("isAgree").click()
driver.find_element_by_id("TANGRAM__PSP_11__submit").click()
time.sleep(5)
介绍:
通过class方式进行元素定位
语法:find_element_by_class_name("class_name值")
这里通过华为商场的登录来进行演示
# 三.通过class_name方式进行元素定位
url = "https://id1.cloud.huawei.com/CAS/portal/loginAuth.html" # 华为登录页面
driver.get(url)
# 点击div
driver.find_element_by_class_name("hwid-input-div").click()
driver.find_element_by_class_name("userAccount").send_keys("admin")
time.sleep(1)
# 输入密码
driver.find_element_by_class_name("hwid-input-div").click()
driver.find_element_by_class_name(
"hwid-input-pwd").send_keys("1234567a")
time.sleep(1)
# 点击登录按钮
driver.find_element_by_class_name("button-base-box").click()
1、url重新设置了地址并get打开
2、通过类名去输入表单数据,但是要先点击div盒子进入输入框
在这里遇到个问题,使用多类名的话,就会提示找不到元素的报错,在进行元素检查的时候
直接复制粘贴了两个类名,就报错找不到了,这里可以注意一下
介绍:
1、通过链接的全部的文本值进行元素定位(link_text)
find_element_by_link_text("全部的文本值")2、获取页面句柄
handles=driver.window_handles以列表的形式返回结果
3、切换句柄
driver.switch_to_window(handles[-1])
这里的句柄接收的变量可以打印输出,是一个以列表,然后是英文字符串的方法
可以在控制台进行打印,
(列表中两个值,也就是分别对应了两个页面的头)
这里跑一个例子:打开首页 --> 打开新闻页 --> 到最后一个句柄 --> 回到第一个 --> 再返回 --> 打开文字标题为‘xxx’的新闻
# 1、在百度首页,点击新闻链接
driver.find_element_by_link_text("新闻").click()
# 2、点击:杭州亚残运会运动员风采:每一箭的信心与信任
# 获取页面句柄(获取所有窗口的句柄)
handles = driver.window_handles
print(f'当前页面的句柄:{handles}')
# 3、切换句柄
driver.switch_to_window(handles[-1])
time.sleep(1)
driver.switch_to_window(handles[0])
time.sleep(1)
driver.switch_to_window(handles[-1])
# 4、选中新闻文本,点击
driver.find_element_by_link_text('杭州亚残运会运动员风采:每一箭的信心与信任').click()
通过部分的链接文本值进行元素定位
语法:find_element_by_partial_link_text("部分的链接文本值")
举个例子:首页打开新闻(在首页定位新字) --> 打开下面这个新闻 ,部分文字:杭州亚残运会
杭州亚残运会运动员风采:每一箭的信心与信任
# 1、点击百度首页新闻
driver.find_element_by_partial_link_text("新").click()
time.sleep(1)
# 2、获取句柄(这里要记得切换句柄)
handles = driver.window_handles
driver.switch_to_window(handles[-1])
time.sleep(1)
# 3、点击“杭州亚残运会运动员风采:每一箭的信心与信任 ”链接
driver.find_element_by_partial_link_text("杭州亚残运会").click()
通过标签名的方式进行元素定位
语法:find_element_by_tag_name("标签名")
# 打印小米官网中,顶部nav导航栏
url = "https://www.mi.com/"
driver.get(url)
# 获取到导航栏的nav标签
ele = driver.find_element_by_tag_name("nav")
print(f'元素:{ele}')
print(f'包含的文本内容:{ele.text}')