建设考试的报名网站,商城app定制,福州seo推广,建设工程查询系统目录
0. 上节回顾
1. 内置的等待条件
2. 元素属性
1. Python对象属性
2. HTML元素属性
3. 元素的交互
1. 输入框
2. 按钮
3. 单选框和复选框
0. 上节回顾
DEBUG的方式#xff1a;JS断点 Python断点编程语言提供的等待方式#xff1a;sleepselenium提供的等待方式JS断点 Python断点编程语言提供的等待方式sleepselenium提供的等待方式
隐式等待显式等待流畅等待
等待条件的要求
是一个函数接收一个参数webdriver对象的实例返回一个布尔值尽量不要出现异常
1. 内置的等待条件
selenium 内置了一些判断函数可用在需要的时候判断页面是否就绪
例如在 http://118.24.147.95:8086/flash.html 如果要点击按钮等待条件有2个
元素存在元素可用
with get_webdriver() as driver:driver.get(http://118.24.147.95:8086/flash.html)def f(_):# 1. 元素存在ele driver.find_element(By.XPATH, //*[idcontent]/input)if ele.is_enabled(): # 2.元素可用return Trueelse:return FalseWebDriverWait(driver, 10).until(f)ele driver.find_element(By.XPATH, //*[idcontent]/input)ele.click()
使用预期条件可用免去函数的定义过程
element_to_be_clickable 判断元素可见并且可点击alert_is_present 判断出现了alert 弹窗
with get_webdriver() as driver:driver.get(http://118.24.147.95:8086/flash.html)ele WebDriverWait(driver, 10).until(element_to_be_clickable((By.XPATH, //*[idcontent]/input)))ele.click()
with get_webdriver() as driver:driver.get(http://118.24.147.95:8086/delay_alert.html)ele WebDriverWait(driver, 10).until(alert_is_present()) # 放入 等待条件ele.accept() # 对弹窗点击【确定】所有的内置等待条件需要加括号调用
调用之后返回一个函数用这个函数进行等待
2. 元素属性
元素的属性和交互主要对WebElement对象的交互
获取网页元素的信息方法WebElement对象的属性对网页元素进行交互 调用WebElement对象的方法
1. Python对象属性
with get_webdriver() as driver:
driver.get(https://www.baidu.com/)
# ele 是 WebElement 对象代表网页中的一个元素
ele driver.find_element(By.XPATH, //*[idkw])
ele_keys [
id, # 对象的ID
tag_name, # 元素的标签
location, # 在页面中的位置x,y坐标
size, # 元素大小
rect, # 位置 大小
parent, # WebDriver 对象
]
for key in ele_keys:
print(key)
print(getattr(ele, key))
print(- * 20)2. HTML元素属性 input idkw namewd classs_ipt value maxlength255
autocompleteoff
with get_webdriver() as driver:driver.get(https://www.baidu.com/)ele driver.find_element(By.XPATH, //*[idkw])att_keys [id,name,class,value,maxlength,autocomplete,]for att in att_keys:print(att:ele.get_attribute(att))print(- * 20) 问题 如何获取元素的HTML源码 print(ele.get_attribute(outerHTML)) # 通过特殊属性获取源码 如何获取浏览器的HTML源码 print(driver.page_source) # 获取网页源码 3. 元素的交互
不同的元素它支持的交互方式可能是不一样的所以要区别对待
1. 输入框
输入框有2中实现方式
input valueinput标签实现的输入框
textareatextarea标签实现的输入框/textarea 输入的交互方法
ele.clear() # 清除内容ele.send_keys(new content) # 输入内容ele.is_displayed()) # 是否显示ele.is_enabled()) # 是否可用
with get_webdriver() as driver:driver.get(file:///F:/pythonWorkspace/UI_P39_Selenium4/index.html)ele driver.find_element(By.XPATH, //input)ele.clear() # 清除内容ele.send_keys(new content) # 输入内容ele.is_displayed() # 是否显示ele.is_enabled() # 是否可用ele.screenshot(a.png) # 对元素进行截图
2. 按钮
按钮有多种实现方式 进行隐藏一下
a hrefjavascript:; onclickbtn_on_click(this)a标签实现的按钮/a
hr /
input typebutton onclickbtn_on_click(this) valueinput标签实现的按钮/
hr /
button onclickbtn_on_click(this) button标签实现的按钮/button
script
function btn_on_click(event){
console.log(event);
alert(你点到我了);
}
/script 按钮的交互方法
ele.click() # 鼠标 左键 单击ele.is_displayed()) # 是否显示ele.is_enabled()) # 是否可用
a hrefjavascript:; onclickbtn_on_click(this)a标签实现的按钮/a
hr /
input typebutton onclickbtn_on_click(this) valueinput标签实现的按钮 hiddentrue/
hr /
button onclickbtn_on_click(this) disabledtrue button标签实现的按钮
/button
script
function btn_on_click(event){
console.log(event);
alert(你点到我了);
}
/script
with get_webdriver() as driver:driver.get(file:///F:/pythonWorkspace/UI_P39_Selenium4/index2.html)for tag_name in [a, input, button]:try:ele driver.find_element(By.XPATH, f//{tag_name})print(是否可见:, ele.is_displayed())print(是否可用:, ele.is_enabled())ele.click() # 点击按钮# 按钮被禁用的时候click 没有报错但其实也是点击失败driver.switch_to.alert.accept() # 处理弹窗except Exception as e:print(e)print(交互失败)print(- * 20)
在selenium 中使用JS进行元素点击
ele.click() # selenium 提供 点击按钮driver.execute_script(return arguments[0].click(), ele) # js 进行点击
对于被遮挡的元素selenium的点击可能会失败这时候换成js代码
如点一下 个人中心 遮挡 登录按钮 with get_webdriver() as driver:driver.get(http://101.34.221.219:8010/)# 出现遮挡driver.find_element(By.XPATH, /html/body/div[2]/div/ul[2]/div[1]/div/a).click()# 点击登录按钮ele driver.find_element(By.XPATH, /html/body/div[2]/div/ul[1]/div/div/a[1])# ele.click() # 预期失败driver.execute_script(return arguments[0].click(), ele) # 通过JS实现点击 不能点击的场景如下 手动不能点击 selenium不能点击 js代码不能点击 底层控制鼠标的移动和点击 如上图 手动能点击 但是页面被遮挡 selenium不能点击 如上图js代码不能点击
selenium点击元素的原理
定位元素找到元素 x,y坐标把鼠标移动 x,y坐标中心 可用手动调整坐标模拟真人操作按下鼠标
3. 单选框和复选框
单选框和复选框都是input标签实现的只是type不同 !--多选框 --
input typecheckbox namecheck_1 value1/
br
input typecheckbox namecheck_1 value2/
hr/
!--单选框 --
input typeradio namecheck_2/
input typeradio namecheck_2 /
单选复选框的交互方法
ele.click() # 鼠标 左键 单击ele.is_displayed()) # 是否显示ele.is_enabled()) # 是否可用ele.is_selected() # 本元素是否被选中
with get_webdriver() as driver:driver.get(file:///F:/pythonWorkspace/UI_P39_Selenium4/index3.html)ele driver.find_element(By.XPATH, /html/body/input[1])print(是否选中, ele.is_selected())ele.click()print(是否选中, ele.is_selected())
对于单选复选框来说click是【切换状态】如之前是选中点击之后反而是没选中 在点击之前建议 先判断状态