0


selenium 自动化

一,八大元素定位方式

1,driver.find_element_by_id('id') # 通过id属性定位

2,driver.find_element_by_name('name') # 通过name属性定位

3,driver.find_element_by_tag_name('tagname') # 通过tag属性定位

4,driver.find_element_by_class_name('类名') # 通过class类名属性定位

5,driver.find_element_by_xpath('xpath') # 通过xpath路径定位

6,driver.find_element_by_link_text('连接元素') # 查找超链接元素,精准匹配

7,driver.find_element_by_partial_link_text('连接元素') # 查找超连接元素,模糊匹配

8,driver.find_element_by_css_selector('css') # 通过css属性定位,样式选择器

二,元素操作

# 导包
import time

from selenium import webdriver
# 实例化浏览器
driver = webdriver.Chrome()

# 打开网页
driver.get('https://www.baidu.com')

# 需求
#  找到搜索框并输入内容
su = driver.find_element_by_id('kw')
su.send_keys('易烊千玺')
# 清空搜索框
su.clear()

su.send_keys('王嘉尔')
time.sleep(5)

# 关闭页面
driver.quit()

三,浏览器操作方法

# 常见的浏览器操作方法
"""
1,driver.maximize_window()  # 最大化浏览器
2,driver.set_window_size(3000,8000)  # 设置浏览器的大小【了解】
3,driver.set_window_position(x=400,y=600)  # 设置浏览器位置【了解】
4,driver.back()  # 后退操作
5,driver.forward()  # 前进操作
6,driver.refresh()  # 刷新
7,driver.close()  # 关闭当前窗口
8,driver.quit()  # 退出浏览器网页
9,driver.title()  # 获取当前页面的title信息
10,driver.current_url()  # 获取当前页面的url信息
"""

import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://www.baidi.com')
# 窗口最大化
driver.maximize_window()
time.sleep(2)
# 设置浏览器的宽,高【了解】
driver.set_window_size(1000,1000)
time.sleep(2)
# 设置浏览器位置【了解】
driver.set_window_position(200,200)
time.sleep(2)
# 定位搜索框,输入内容
driver.find_element_by_name('wd').send_keys('易烊千玺')
# 定位搜索按钮并点击
driver.find_element_by_xpath('//*[@id="su"]').click()
time.sleep(2)
# 获取当前页面的title
print('当前页面标题:',driver.title)
# 获取当前页面的url
print('当前页面的url:',driver.current_url)
# 后退
driver.back()
time.sleep(2)
# 前进
driver.forward()
time.sleep(2)
# 刷新
driver.refresh()
# 退出
driver.quit()

重要提示:

1,driver.title 和 driver.current_url 是没有属性括号,一般用于判断操作是否执行成功

2,driver.maximize_window() 一般在前置代码,放在获取driver地址后。对浏览器进行窗口最大化

3,driver.refresh() 刷新页面,在cookie会用到

4,close() 和 quit() 的区别【面试题】

close() :关闭当前页面

quit() :关闭浏览器/关闭启动的所有页面

** 四,常见的元素操作信息**

"""
常见的元素信息操作
1,driver.text 获取元素文本
2,driver.size  获取元素的大小
3,get_attribute  获取元素属性值
4,is_displayed  判断元素是否可见
5,is_enabled  判断元素是否可用
6,is_selected  判断元素是否被选中

"""

import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://www.baidu.com/')
time.sleep(2)
su = driver.find_element_by_id('kw')
print('目标元素的尺寸:',su.size)
time.sleep(2)
xw = driver.find_element_by_xpath('//*[@id="s-top-left"]/a[1]')
xw.click()
time.sleep(2)
print('目标元素文本:',xw.text)
xpath = driver.find_element_by_link_text('图片')
print('目标元素属性值:', xpath.get_attribute('xpath'))
time.sleep(2)
driver.close()

# 判断元素是否可见,不可见并不代表不能定位
span = driver.find_element_by_id('kw')
print('元素是否可见:',span.is_displayed())

btn = driver.find_element_by_xpath('//*[@id="su"]')
print('元素是否可用:',btn.is_enabled())

pan = driver.find_element_by_id('su')
print('元素是否被选中:',pan.is_selected())
driver.quit()

五,鼠标操作(需要实例化鼠标对象)

鼠标事件对应的方法类(​ ActionChains)

鼠标事件的常用操作

1,context_click() # 右击
2,double_click()  # 双击
3,double_and_drop()  # 拖拽
4,move_to_element()  # 悬停【重点】
5,perform()  # 执行鼠标事件的方法【重点】

5.1:鼠标的右击和双击

# 导包
from selenium.webdriver import ActionChains
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://www.baidu.com/')
# 定位操对象
ele = driver.find_element_by_id('kw')
# 实例化鼠标对象
action = ActionChains(driver)
# 鼠标右击
action.context_click(ele)
# 鼠标双击
action.double_click(ele)
# 执行鼠标操作
action.perform()

5.2:鼠标拖拽

import time

from selenium.webdriver import ActionChains
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://www.baidu.com/')
driver.find_element_by_id('kw').send_keys('国庆节放假安排')
driver.find_element_by_id('su').click()
tupian = driver.find_element_by_xpath('//*[@id="s_tab"]/div/a[3]')
tupian.click()
tu1 = driver.find_element_by_xpath('//*[@id="imgid"]/div[1]/ul/li[2]/div/div[2]/a/img')
tu2 = driver.find_element_by_xpath('//*[@id="imgid"]/div[1]/ul/li[3]/div[1]/div[2]/a/img')
# 实例化鼠标
action = ActionChains(driver)
time.sleep(2)
# 鼠标拖拽
action.drag_and_drop(tu1,tu2)
# 执行操作
action.perform()

5.3:鼠标悬浮【重点】

import time

from selenium.webdriver import ActionChains
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://www.baidu.com/')
# 最大化窗口
driver.maximize_window()
# 定位悬停对象
ele = driver.find_element_by_id('s-usersetting-top')
# 实例化鼠标
action = ActionChains(driver)
# 鼠标悬停
action.move_to_element(ele)
# 执行鼠标操作
action.perform()
time.sleep(2)
driver.get()

六,元素等待方式

1,为什么要设置元素等待

在查找元素时,元素代码没有在第一时间内没有被加载出来,而抛出未找到元素的异常

2,元素等待的分类【面试题】

强制等待/线性等待:time.sleep()

隐式等待:implicitly_wait 全局通用,只需要设置一次

显示等待:webdriverwait 特定条件使用,等到就走

"""
元素等待
"""
import time
from selenium import webdriver
driver = webdriver.Chrome()
# 获取浏览器对象
driver.get('http://39.101.167.251/qftest/index.php?m=backend')
# 窗口最大化
driver.maximize_window()
# 设置隐式等待
driver.implicitly_wait(30)
driver.find_element_by_id('username').send_keys('admin')
# 线性等待
time.sleep(2)
driver.quit()

七,下拉框操作【重点】

1,下拉框操作使用(select类)

先导包(from selenium.webdriver.support.select import Select)

实例化下拉框(select = Select(element) )

调用方法(select.select_by_index() )

2,Select 类提供的方法

select1.select_by_index(1):通过索引定位—索引从0开始

select1.select_by_value('46'):通过value值获取

select1.select_by_visible_text('任务'):通过文本获取

# 导包
import time
from selenium import webdriver
from selenium.webdriver.support.select import Select
driver = webdriver.Chrome()
driver.get('http://39.101.167.251/MiFengOA/ ')

driver.find_element_by_name('adminuser').send_keys('admin')
driver.find_element_by_xpath('//*[@id="loginview0"]/div[3]/div/input').send_keys('a8983983')
driver.find_element_by_name('button').click()
time.sleep(5)
driver.find_element_by_xpath('//*[@id="app-navbar-collapse"]/ul[1]/li[2]').click()
time.sleep(5)
driver.find_element_by_xpath('//*[@id="menulist"]/a[1]').click()
time.sleep(5)
# 获取下拉框元素
ele = driver.find_element_by_xpath('//*[@id="mode_1664437126438_7750"]')
# 实例化下拉框
select1 = Select(ele)
# index 索引方法
select1.select_by_index(1)
time.sleep(2)
# value 属性值选择目标
select1.select_by_value('46')
time.sleep(2)
# text 采用文本获取目标信息
select1.select_by_visible_text('任务')
time.sleep(2)

八,弹框处理

1,为什么要处理弹框

一旦出现弹框,如果不进行处理,后面的操作就不可实现

2,对话框的分类

alert:警告框

confirm:确认框

prompt:提示框

import time
from selenium.webdriver import Chrome, Firefox, Ie, opera, Safari
chrome = Chrome()
chrome.get("http://39.101.167.251/MiFengOA/")
# 定位name和pwd的两个input标签
name = chrome.find_element_by_xpath('//input[contains(@placeholder,"请输入用户名")]')
pwd = chrome.find_element_by_xpath('//input[@placeholder="请输入密码"]')
login = chrome.find_element_by_xpath('//button[@class="webbtn"]')
name.send_keys('rock')
pwd.send_keys('qf1234567890')
login.click()
time.sleep(5)
# 查找用户名元素并点击
chrome.find_element_by_id('indexuserl').click()
chrome.find_element_by_xpath('//*[contains(text(), "退出")]').click()
time.sleep(2)
# 点击 模拟对话框中的确认按钮
chrome.find_element_by_id('confirm_btn1').click()
chrome.quit()

九,frame 表单切换

1,应用场景

处于frame 中的元素,虽然可以获取元素信息,但是代码执行时无法定位元素,需要切换到frame,再进行元素定位操作

2,如何切换frame 表单

切入frame 表单:driver.switch_to.frame("id/name"):传入代表frame唯一的值

切出frame 表单:driver.switch_to.default_content()

import time
from selenium.webdriver import Chrome
# 1,创建浏览器
chrome = Chrome()
# 2,打开浏览器
chrome.get('http://39.101.167.251:81/jinxiaocun/index.asp')
# 3,查找元素:查找三个input标签
inputs = chrome.find_elements_by_tag_name('input')
# 3.1向用户名输入框输入admin账号
inputs[0].send_keys('admin')
# 3.2向口令输入框输入admin密码
inputs[1].send_keys('admin')
# 3.3点击登录按钮
inputs[2].click()
time.sleep(1)  # 等待进入主页
# 截屏
# chrome.save_screenshot('jxc_main.png')
# 4,查找退出连接标签
# 查找frame标签:name=topFrame
topFrame = chrome.find_element_by_name('topFrame')
# 切换到topFrame窗口中
chrome.switch_to.frame(topFrame)
# 根据连接文本查找并点击
chrome.find_element_by_link_text('安全退出').click()
time.sleep(2)
# 弹出对话框,确认对话框
# accept():确认
# .dismiss():取消
chrome.switch_to.alert.accept()
# 5,退出浏览器
chrome.quit()

十,多窗口切换

driver.current_window_handle 获取当前的句柄值

driver.window_handles 获取driver启动的所有窗口句柄

driver.switch_to.window(handles[-1]) 切换窗口操作

from denglu import driver
# 获取当前句柄
print('句柄:',driver.current_window_handle)
# 切换窗口操作,获取driver启动的所有窗口句柄
handles = driver.window_handles
# 切入窗口
driver.switch_to.window(handles[2])
# 切出窗口
driver.switch_to.default_content()
driver.quit()

十一,附加一个常问的面试题

出现 no such element 的几种原因【重要哦】

1,页面没有加载完成,需要加等待时间

2,页面没有当前元素,需要滚动页面

3,元素内嵌在表单中,需要查找frame或iframe表单

切入表单使用:switch_to.frame(元素对象)

切出表单使用:switch_to.default_content()

4,元素在新的窗口中,需要切入窗口

获取driver启动的所有窗口句柄:driver.window_handles

切换窗口操作:driver.switch_to.window(handles[-1])


本文转载自: https://blog.csdn.net/m0_68285439/article/details/127103913
版权归原作者 蘑菇大人* 所有, 如有侵权,请联系我们删除。

“selenium 自动化”的评论:

还没有评论