目录

0. 上节回顾

1. 内置的等待条件

2. 元素属性

1. Python对象属性

2. HTML元素属性

3. 元素的交互

1. 输入框

2. 按钮

3. 单选框和复选框

0. 上节回顾

DEBUG的方式: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, '//*[@id="content"]/input')

if ele.is_enabled(): # 2.元素可用

return True

else:

return False

WebDriverWait(driver, 10).until(f)

ele = driver.find_element(By.XPATH, '//*[@id="content"]/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, '//*[@id="content"]/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, '//*[@id="kw"]')

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元素属性

autocomplete="off">

with get_webdriver() as driver:

driver.get("https://www.baidu.com/")

ele = driver.find_element(By.XPATH, '//*[@id="kw"]')

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中实现方式

 

输入的交互方法:

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标签实现的按钮



按钮的交互方法:

ele.click() # 鼠标 左键 单击ele.is_displayed()) # 是否显示ele.is_enabled()) # 是否可用

a标签实现的按钮



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不同

 



单选复选框的交互方法:

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是【切换状态】,如之前是选中,点击之后反而是没选中 在点击之前,建议 先判断状态

精彩链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: