selenium元素定位详解

   前端页面定位有很多种插件,如谷歌浏览器插件chroPath,还有selenium Builder,下面我们通过chroPath插件来通过xpath和css selector进行定位
一、xpath进行定位
1.xpath定位之//*定位当前页面下的所有元素

 

 2.xpath定位之通过属性进行定位

 

 

 

 3.xpath定位之通过多属性进行定位

 

 4.xpath定位之层级定位

 

 

 

 

二、css selector进行定位
1.id属性进行定位

 

 2.class样式进行定位

 

 3.属性进行定位

 

 4.多属性进行定位

 

 5.层级定位

 

 

 

 6.模糊定位(以XXX开头,以XXX结尾,包含XXX)

 

 

 

 

 

 三、selenium 定位元素及浏览器操作常用api

复制代码
import time

from selenium import webdriver
from selenium.webdriver.common import by
browser=webdriver.Chrome()

# # 打开浏览器
browser.get('https://baidu.com')

# 通过id进行定位元素,send_keys表示发送输入内容
s=browser.find_element(by="id",value="kw").send_keys("selenium")
browser.find_element('id','su').click()
time.sleep(2)

# 清除输入框内容
browser.find_element(by="id",value="kw").clear()

# 根据id定位元素
s1=browser.find_element(by="id",value="kw").send_keys("python")
browser.find_element('id','su').click()
time.sleep(2)

# 通过name属性进行定位元素
browser.find_element(by="name",value="wd").send_keys("java")
browser.find_element('id','su').click()
time.sleep(2)

# 通过标签名称进行定位元素
s2=browser.find_elements(by.By.TAG_NAME,value='i')
print(s2)

# 通过class属性进行定位元素
browser.find_element(by.By.CLASS_NAME,value='')

# 通过xpath进行定位元素
browser.find_element(by.By.XPATH,value='')

# 通过链接进行定位元素
browser.find_element(by.By.LINK_TEXT,value='百度')

# 通过链接模糊搜索进行定位元素
browser.find_element(by.By.PARTIAL_LINK_TEXT,value='百度')

# 通过css属性选择器进行定位元素
browser.find_element(by.By.CSS_SELECTOR,"input[id='kw']")

#定位元素优先使用find_element(by.By.CSS_SELECTOR,value=''),因为底层代码就是使用css层级选择器,如果css层级选择器无法定位到元素的话在考虑
使用xpath来定位元素

# 浏览器全屏
browser.find_element(by.By.LINK_TEXT,'新闻')
browser.maximize_window()

# 获取浏览器窗口大小参数
print(browser.get_window_size())

# 浏览器后退
browser.back()

# 浏览器刷新
browser.refresh()

# 浏览器前进
browser.forward()

# 截图,保存在当前文件路径下
browser.get_screenshot_as_file('111.png')

# 执行js代码
browser.execute_script('alter(123)')

# 获取标签属性
ele=browser.find_element(by.By.LINK_TEXT,'新闻')
data=ele.get_attribute('innerText')

# 获取标签是否勾选,返回true表示已勾选,false为未勾选
flag=browser.find_element(by.By.CSS_SELECTOR,'#kw').is_selected()

#通过属性名称获取属性
browser.get_property("id")

#返回标签元素的名字
browser.tag_name

#获取当前标签的高和宽
browser.size

#获取元素的文本内容
browser.text

#获取元素的坐标
browser.location

# 关闭当前页面
browser.close()

# 退出驱动
browser.quit()
复制代码
复制代码
# 获取当前浏览器所有handles窗口
print(browser.window_handles,"==========")
# 获取当前浏览器的handles窗口
print(browser.current_window_handle,"-----------------")

browser.find_element(by.By.LINK_TEXT,'hao123').click()
print("所有handles:",browser.window_handles)

# 切换浏览器tab
browser.switch_to.window(browser.window_handles[-1])

print("当前的handles",browser.current_window_handle)

# 退出驱动
browser.quit()

# 关闭页面
browser.close()

# 点击alert弹框中的确认
browser.switch_to.alert.accept()

# 点击alert弹框中取消
browser.switch_to.alert.dismiss()

# 切换到iframe页面,接收一个element对象或id属性值或name属性值
browser.switch_to.frame("")

# 回到相对当前iframe的页面
browser.switch_to.parent_frame()

# 回到默认层iframe
browser.switch_to.default_content()

# 如果没有切换iframe没有name或id属性,可以先通过定位iframe标签
browser.switch_to.frame(element)




# 滑动滚动条位置
browser.execute_script('window.scrollTo(0,1800)')

# 操作下拉框元素
from selenium.webdriver.support.select import Select

element=browser.find_element('id','')
# 定位元素后获取下拉框中的值
Select(element).select_by_value('')
# 定位元素后通过下标操作下拉框的值
Select(element).select_by_index(1)


# 鼠标操作--连贯操作
from selenium.webdriver.common.action_chainsimport ActionChains
# 先获取到第一个和第二个元素
ele1=browser.find_element('id','k1')
ele2=browser.find_element('id','k2')
action=ActionChains(browser)
# 鼠标移动到第一个元素上后点击第二个元素
action.move_to_element(ele1).click(ele2).perform()

# drag_and_drop按照某个元素进行拖动
action.drag_and_drop(ele1,ele2).perform()

# 鼠标连贯操作,第二个操作有display=none属性
# 1.先获取display属性的标签,把none改成空,2在定位这个元素进行点击
js="documet.getElementById('').style.display='';"
browser.execute_script(js)
browser.find_element('id','').click()

# 隐式等待
browser.implicitly_wait(2)

# 显示等待
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

#
ele3=EC.presence_of_element_located((By.ID,'kw'),)
# 10s内直到定位ele3,否则报错
ele4=WebDriverWait(browser,10,0.5).until(ele3)
ele4.click()
复制代码

四.没有找到元素的常见异常

NoSuchElementException  没有找到元素
NoSuchFrameException  没有找到iframe
NoSuchWindowException 没有找到窗口句柄
NoSuchAttributebuteException 属性错误
NoAlertPresentException 没有找到alert弹出框
ElementNotvisibleException  元素不可见
ElementNotSelecttableException 元素没有被选中
timeoutException 查找元素超时

 

posted @   少壮不努力123  阅读(123)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示