首页 > 其他分享 >selenium元素定位和常见操作

selenium元素定位和常见操作

时间:2022-08-26 08:00:06浏览次数:98  
标签:定位 元素 selenium element switch find CSS

selenium元素定位和常见操作

一、selenium的元素定位:

name定位,id定位,class定位,标签定位,链接文本定位,部分链接文本定位,xpath定位,css定位

在进行元素定位前,先要安装selenium这个第三方的模块,再导入selenium模块和By模块

from selenium import webdriver
from selenium.webdriver.common.by import By
d=webdriver.Chrome() # 打开浏览器
d.maximize_window() # 窗口最大化
d.get('http://www.baidu.com') # 打开需要的地址
d.implicitly_wait(5) # 隐式等待
d.find_element(By.ID,'kw').clear() # 根据id定位到 用户名输入框 clear()清空输入框的内容
d.find_element(By.CLASS_NAME,'s_ipt').send_keys('python自动化') # class_name定位法
d.find_element(By.NAME,'wd').send_keys("python自动化") # name定位法,.send_keys("内容")在输入框添加内容
d.find_element(By.TAG_NAME,'标签名') # 标签定位法
d.find_element(By.LINK_TEXT,'新闻').click() # 超文本链接定位法
d.find_element(By.PARTIAL_LINK_TEXT,'123').click() # 部分超文本链接定位法
d.find_elements(By.TAG_NAME,'a')[4].click()#find_elements查看所有的标签#tag_name以网页元素的类型定位元素
# xpath绝对路径定位,从最上层一级一级往下找
# /html/body/div/div/div/div/div/form/span/input
d.find_element(By.XPATH,'/html/body/div/div/div/div/div/form/span/input').send_keys("111") # 绝对路径
# xpath相对路径定位,语法 //标签名[@属性名=’属性值‘],如果有多个属性如下
d.find_element(By.XPATH,"//input[@id='kw'][@name='wd']").send_keys("111")
# xpath相对路径定位子集属性
d.find_element(By.XPATH,'//div[@id="s-top-left"]/a[@href="http://news.baidu.com"]').click()
# xpath定位到div下的第三个-地图
d.find_element(By.XPATH,'//div[@id="s-top-left"]/a[2]').click()
# 如果[]中的属性值有两个,那么这两个属性值都要写class="s-top-left-new s-isindex-wrap"
d.find_element(By.XPATH,'//div[@class="s-top-left-new s-isindex-wrap"]/a[2]').click()
d.find_element(By.XPATH,'//*[@id="kw"]').send_keys('111') # 在xpath中,不想写标签名时,可以用*号代替
d.find_element(By.XPATH,'//a[text()="新闻"]').click()#xpath文本定位,用于定位a标签的时候不需要加@符号
d.find_element(By.CSS_SELECTOR,'#kw').send_keys("111") # css-id定位
d.find_element(By.CSS_SELECTOR,'.s_ipt').send_keys("111") # css-class定位
d.find_element(By.CSS_SELECTOR,'[name="wd"]').send_keys("111") # css-name定位
d.find_element(By.CSS_SELECTOR,'input#kw.s_ipt[name="wd"]').send_keys("111")
res=d.find_element(By.CSS_SELECTOR,'[id="ip2"]').is_displayed()
print(res)
d.quit() # 关闭所有的浏览器

二、selenium的常见操作:

1、获取元素属性对应值或文本信息。

# 获取属性对应值,根据属性名称获取对应值
.get_attribute('属性名称') 
# 获取元素文本信息
.text()

# 定位到 诗词的 div标签
# 获取属性的值 , 通过属性名称 返回到对应的值  get_attribute('属性名称')
msg = d.find_element(By.CSS_SELECTOR,'[id="getval01"]').get_attribute('title')
print(msg)
# 获取到 标签的文本信息
msg2 = d.find_element(By.CSS_SELECTOR,'[id="getval01"]').text
print(msg2)

2、上传文件

针对input标签的上传按钮,直接定位到该按钮,然后send_keys('文件路径')即可上传。

# 定位到上传按钮,直接 send_keys(R'路径') 输入路径
# 只能够 处理 input 标签的上传按钮
d.find_element(By.CSS_SELECTOR,'[name="file"]').send_keys(R'C:\abc.png')

3、执行js语句/判断元素是否显示

# 想让滚动条 下拉 500px
# window.scrollTo myjs='window.scrollTo(0,500);' # y需换成 与顶部的距离 b.execute_script(myjs)
# 判断元素是否可见  is_displayed(),返回True或者False
# 隐藏元素 可以定位,只是无法操作,如果想要操作,就需要去除掉隐藏属性
sleep(3)
res = d.find_element(By.CSS_SELECTOR,'[id="ip2"]').is_displayed()
print(res)
 
# 去除属性的js语句
# document.querySelector('CSS定位').removeAttribute('属性名称');
myjs2 = """document.querySelector('[id="ip2"]').removeAttribute('type');"""
d.execute_script(myjs2)
 
'''
readonly="readonly" 只读属性   readonly
type="hidden" 隐藏属性      type 
style="display:none;" 隐藏属性  style
'''

4、鼠标悬停

# 鼠标悬停
# 1、先定位到需要悬停的元素
mte = d.find_element(By.CSS_SELECTOR,'[class="btn"]')
 
# 2、实现鼠标悬停 导入 from selenium.webdriver import ActionChains
# ActionChains(浏览器).move_to_element(需要悬停的元素).perform()
ActionChains(d).move_to_element(mte).perform()
 
sleep(1) # 悬停之后,最好等待1s中,悬停过程中,放下鼠标键盘
 
# 3、点击悬停后 出现的元素
d.find_element(By.LINK_TEXT,'淘宝网').click()

5、下拉框定位

# 获取下拉框标签中的内容
# 先导包from selenium.webdriver.support.ui import Select
Select(下拉框元素定位).select_by_index(下标)
Select(下拉框元素定位).select_by_value(value的值)
Select(下拉框元素定位).select_by_visible_text(文本信息)

# 1、先定位到需要操作的下拉框
sel_ele = d.find_element(By.CSS_SELECTOR,'[name="op01"]')
# 2、导入Select模块,进行操作
# 2.1 根据 选项的下标来  Select(下拉框的元素定位).select_by_index(选项的下标)
Select(sel_ele).select_by_index(2)
sleep(1)
# 2.2 根据选项的value属性值  Select(下拉框的元素定位).select_by_value('value属性值')
Select(sel_ele).select_by_value('zj')
sleep(1)
# 2.3 根据选项的文本信息  Select(下拉框的元素定位).select_by_visible_text('选项的文本信息')
Select(sel_ele).select_by_visible_text('江苏')
sleep(1)

6、切换窗口

# Selenium默认只在第一个窗口操作,多窗口操作时需要切换窗口
# 先获取所有窗口 window_handles 以列表的形式返回
# 切换窗口 switch_to.window(窗口的下标)

d.find_element(By.LINK_TEXT,'去一个新窗口').click() # 点击之后 弹出一个新窗口
# Selenium默认只在第一个窗口操作,多窗口操作时需要切换窗口
# 1、先获取所有窗口  window_handles  以列表的形式返回
allwin = d.window_handles
# 2、切换窗口 switch_to.window(窗口的下标)
d.switch_to.window( allwin[1] )

7、切换警告框

# 警告框一个页面只能够出现一次,所以不需要定位,直接切换即可
# 通过 switch_to.alert.dismiss() 取消警告框
# 通过 switch_to.alert.accept() 确认警告框

d.find_element(By.CSS_SELECTOR,'[type="button"]').click() # 点击之后出现警告框
sleep(2)
# 1、确定 警告框  switch_to.alert.accept()
# d.switch_to.alert.accept()
# 2、关闭/取消 警告框 switch_to.alert.dismiss()
# d.switch_to.alert.dismiss()
# 3、获取警告框的 文本信息 switch_to.alert.text
msg = d.switch_to.alert.text
print(msg)

8、切换表单

# 表单嵌套是前端常用的一种技术,如果你操作的元素处于frame标签或者iframe标签中的时候,需要先切换到该标签在进行操作
# 切换表单
switch_to.frame(定位) 
# 退回到上层表单:
d.switch_to.parent_frame()
# 退回到最外层表单:
d.switch_to.default_content()

# 1、先定位到需要切换到的 frame标签或者iframe标签
fre_ele = d.find_element(By.CSS_SELECTOR,'[id="fr01"]')
# 2、切换到该标签  switch_to.frame( frame标签或者iframe标签的元素定位 )
d.switch_to.frame( fre_ele )
sleep(1)
 
d.find_element(By.CSS_SELECTOR,'[id="only"]').send_keys('123456')
sleep(2)
# 3、在表单中完成操作后,需要跳出表单
# d.switch_to.parent_frame()  # 跳到上一层表单
d.switch_to.default_content() # 跳出到最外层表单
d.find_element(By.CSS_SELECTOR,'[type="button"]').click()
sleep(5)

9、定位一组元素

# 通过find_elements()定位一组元素,将所有符合元素的定位以列表的方式返回
# 定位勾选框   元素1
# find_element()  定位是一个元素,返回一个元素  元素1
# find_elements()  定位一组元素 , 以列表的形式返回 [元素1,元素2,元素3]
allbox = d.find_elements(By.CSS_SELECTOR,'[type="checkbox"]')
for i in allbox: # 全部勾选
    i.click()
    sleep(0.5)
 
sleep(5)

 

标签:定位,元素,selenium,element,switch,find,CSS
From: https://www.cnblogs.com/hqh2021/p/16626310.html

相关文章

  • 列表、元素、字典和集合
    Pythonlist`list`可存储任意类型,支持`list()`。list方法增删查appendpopindexextendremovecountinsertclear子串是Python序列操作的一......
  • vue 百度地图定位
    具体引入上篇文章有提到div:<divclass="BaiDuMap"><baidu-mapclass="map-wrap":center="mapData.center":zoom="mapData.zoom"@ready="mapHandler"@cli......
  • python selenium使用无头模式执行用例
    什么是无头模式?HeadlessBrowser模式是浏览器的无界面状态,即在不打开浏览器界面的情况下使用浏览器。该模式的好处如下:1)可以加快web自动化测试的执行时间,对于web自动化......
  • java操作selenium浏览器自动化操作
    seleniumgithubselenium官网各类型浏览器webDriver驱动下载chrome浏览器webDriver驱动下载,注意要与电脑上实际安装的浏览器版本相对应原理说明:java代码直接通过sele......
  • PE结构之重定位表(6)
    重定位表什么是重定位表当一个PE文件执行时会加载多个PE文件,而每个被加载的PE文件都有它在内存展开后的起始地址,这个地址是由此PE文件的imagebase(基址)所决定的若前......
  • 658. 找到 K 个最接近的元素
    658.找到K个最接近的元素给定一个排序好的数组 arr,两个整数k和x,从数组中找到最靠近x(两数之差最小)的k个数。返回的结果必须要是按升序排好的。整数a比......
  • LeetCode/找k个最接近元素
    给定排序好的数组arr,两个整数k和x,从数组中找到最靠近x(两数之差最小)的k个数。返回的结果必须要是按升序排好的1.通用调库解法classSolution{public:vec......
  • 盒子模型、 浮动布局、定位属性、 z-index、JavaScript基础语法
    今日内容概要盒子模型浮动布局定位属性z-indexJavaScript基础语法今日内容详细盒子模型所有的标签都可以看成是一个快递盒1.外边距(margin):指标签之间的距离(......
  • 前端之盒子模型和定位
    盒子模型所有的标签都可以看成是一个盒子盒子模型的概念:1.magin(外边距):用于控制元素与元素之间的距离,两个标签之间的间隔2.border(边框):外边框与标签的距离3.padding(内......
  • 前端知识之CSS(3)-盒子模型、浮动布局、溢出属性、定位、脱离文档流、z-index之模态框
    目录盒子模型浮动布局(float)1.什么是浮动2.浮动的作用3.浮动有俩个特点4.浮动(float)格式5.浮动会造成父标签塌陷这是一个不好的现象因为会引起歧义6.解决父标签塌陷问题溢......