一,八大元素定位方式
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])
版权归原作者 蘑菇大人* 所有, 如有侵权,请联系我们删除。