Selenium 8大定位方法中的最后一个 find_element_by_tag_name
,这是所有定位方式中最不理想的定位方式,主要是因为一个页面中,存在相当多的相同的标签,基本做不到唯一定位,通常只能默认选择第一个定位到的元素。
# find_element_by_tag_name 的应用:根据 tag_name 定位元素
from selenium import webdriver # 导入 webdriver 模块
from time import sleep # 导入 sleep 模块,可以使程序强制休眠
driver = webdriver.Chrome() # 调用 Chrome 浏览器
driver.maximize_window() # 窗口最大化
driver.get('https://www.baidu.com/') # 打开 百度
element = driver.find_element_by_tag_name("textarea") # 定位 textarea 标签元素
print(element.get_attribute("id")) # 打印 该元素 的 id 属性值
elements = driver.find_elements_by_tag_name("textarea") # 查找页面上所有的 textarea 标签元素
print(elements) # 打印
driver.quit() # 关闭浏览器
除了 8 种元素定位方式以外,还可以通过其他的形式定位元素。
通过父级定位元素来定位目标元素
在目标元素不方便定位时,可以先定位到它的父级元素,再通过已经定位的父级元素,对目标元素进行定位。
实际应用
# 通过已经定位到的父级元素定位目标元素
from selenium import webdriver # 导入 webdriver 模块
from time import sleep # 导入 sleep 模块,可以使程序强制休眠
driver = webdriver.Chrome() # 调用 Chrome 浏览器
driver.maximize_window() # 窗口最大化
driver.get('https://www.baidu.com/') # 打开 百度
sleep(2) # 强制休眠 2 秒
father_element = driver.find_element_by_id("form") # 定位找到父级元素
target_element = father_element.find_element_by_id("kw") # 通过父级元素定位目标元素
target_element.send_keys("自动化测试") # 输入
sleep(2) # 强制休眠 2 秒
driver.quit() # 关闭浏览器
通过元素组下标定位
Selenium 的 8 大定位方式,都有复数形式, 例如:
find_elements_by_id
find_elements_by_class_name
find_elements_by_xpath
……
以上的都能返回一个元素组(列表),通过元素组的下标,定位目标元素。
# 通过元素组下标定位
from selenium import webdriver # 导入 webdriver 模块
from time import sleep # 导入 sleep 模块,可以使程序强制休眠
driver = webdriver.Chrome() # 调用 Chrome 浏览器
driver.maximize_window() # 窗口最大化
driver.get('https://www.baidu.com/') # 打开 百度
sleep(2) # 强制休眠 2 秒
elements = driver.find_elements_by_xpath("//div[@id='s-top-left']/a") # 定位元素组
print(type(elements)) # 打印 elements 类型,<class 'list'>
# 打印元素组中每个元素中的文本
for element in elements:
print(element.text)
element1 = elements[0] # 通过 下标0 定位到第一个元素
element1.click() # 点击
sleep(2) # 强制休眠 2 秒
driver.quit() # 关闭浏览器