浏览器操作
设置浏览器显示范围:
1、窗口最大化 dirver.maxmize_window()
2、设置窗口大小 dirver.set_window_size(width, height)
3、设置窗口位置 dirver.set_window_position(x, y)
浏览器显示页面操作:
1、页面后退操作 dirver.back()
2、页面前进操作 dirver.forword()
3、页面刷新操作 dirver.refresh()
"""需求:打开注册A.html页面,完成以下操作1).最大化窗口2).打印当前窗口的标题和地址3).暂停3s,点击界面 访问 百度 网站 超链接4).暂停3s,再次打印当前窗口的标题和地址5).暂停3s,关闭当前窗口6).暂停3s,关闭浏览器"""# 最大化浏览器driver.maximize_window()sleep(3)# 设置窗口大小driver.set_window_size(500, 700)sleep(3)driver.set_window_position(0, 500)sleep(3)# 点击新浪driver.find_element_by_partial_link_text("新浪").click()sleep(3)# 后退driver.back()sleep(3)# 前进driver.forward()sleep(3)driver.refresh()
浏览器关闭操作:
关闭当前窗口dirver.close()
关闭浏览器 dirver.quit()
获取浏览器操作:
获取标题:dirver.title
获取网页地址:dirver.current_url
当前窗口:创建驱动时第一个打开的窗口,对于当前窗口的元素一般都可以直接定位和操作,如果弹出新的窗口, 对于新的窗口元素是不能直接进行操作,需要学习后续的窗口切换。
"""需求:打开注册A.html页面,完成以下操作1).最大化窗口2).打印当前窗口的标题和地址3).暂停3s,点击界面 访问 百度 网站 超链接4).暂停3s,再次打印当前窗口的标题和地址5).暂停3s,关闭当前窗口6).暂停3s,关闭浏览器"""# 最大化浏览器driver.maximize_window()# 获取当前窗口标题print("当前窗口title:", driver.title)# 获取当前窗口urlprint("当前窗口url:", driver.current_url)sleep(3)driver.find_element_by_partial_link_text("注册A网页").click()# 获取当前窗口标题print("当前窗口title:", driver.title)# 获取当前窗口urlprint("当前窗口url:", driver.current_url)sleep(3)
页面交互操作
1、下拉框
方式1:使⽤css或xpth (推荐)
元素定位的方式操作下拉框: 操作繁琐 、影响脚本运行效率
定位元素后调用点击的操作方法进行选择
"""需求:使用‘注册A.html’页面,完成对城市的下拉框的操作:1).选择‘广州’ 2).暂停2秒,选择‘上海’ 3).暂停2秒,选择‘北京"""driver.find_element(By.CSS_SELECTOR, '[value="gz"]').click()sleep(2)driver.find_element(By.CSS_SELECTOR, '[value="sh"]').click()sleep(2)driver.find_element(By.CSS_SELECTOR, '[value="bj"]').click()
方式2:使⽤专属Select类
步骤:
1、导包
2、创建Select类
3、选择选项
# 使用Select类来实现# 1、定位下拉框元素 selectel = driver.find_element(By.CSS_SELECTOR, "#selectA")# 2、实例化Select对象select = Select(el)# 3、使用下标定位广州select.select_by_index(2)sleep(2)# 使用value定位上海select.select_by_value("sh")# 使用文本定位 北京sleep(2)select.select_by_visible_text("A北京")
注意:
Select类实现选项只适用于HTML原生态的<select> + <option>的下拉框
2、弹出框
为什么要处理弹框:如果⻚⾯操作过程中,有弹窗出现,不处理,⽆法继续对⻚⾯操作。
类型:
1、js原⽣弹窗(警告框、输⼊框、提示框)必须处理
2、开发使⽤标签⾃定义弹窗效果 (不⽤处理,正常操作即可。)
步骤:
1、获取弹出框对象
alert = driver.switch_to.alert
alert.text 获取弹窗框文本
三种弹窗框,在获取对象的时候都一样
2、弹出框处理方法
alert.accept() 接受弹出框
alert.dismiss() 取消弹出框
确认框没有取消按钮,取消方法一样生效
"""需求:打开注册A.html页面,完成以下操作:1).点击 alert 按钮2).关闭警告框3).输入用户名:admin"""# 点击弹窗driver.find_element(By.ID,"alerta").click()sleep(2)# 获取弹窗对象el = driver.switch_to.alert# 处理弹窗 同意/取消# el.dismiss() # 取消# print("弹出文本:",el.text)el.accept() # 同意sleep(2)# 输入用户名driver.find_element(By.CSS_SELECTOR,"#userA").send_keys("admin")
3、滚动条
所要操作的元素不在当前展示页,需要 滑动滚动条才能找到。
有些⻚⾯场景,必须滚动条拉倒最底下才做某事 。如:注册⻚⾯,阅读完需求,协议才能勾选,此时就必须拖动滚动条。
步骤:
1、定义Js字符串 js = "window.scrollTo(0,1000)"
2、执行Js字符串 driver.execute_script(js)
"""需求:打开新浪官网页面,完成以下操作1).暂停2s,控制滚动条滑动到页面最底部2).暂停2s,点击返回顶部按钮"""driver.get('/')# js -> 向下滑动10000像素# js_down = "window.scrollTo(0,10000)"# 动态执⾏滑倒底部 向下滑动滚动条⾼度# js(0,10000) 第⼀个0为⽔平滚动条js_down = "window.scrollTo(0,document.body.scrollHeight)"# 执⾏js⽅法driver.execute_script(js_down)sleep(2)# js—> 向上js_top = "window.scrollTo(0,0)"driver.execute_script(js_top)
滚动条扩展 -- 动态滚动
滚动到页面底部 js ="window.scrollTo(0,document.body.scrollHeight)" 比如:新浪页面太长,在超过10000像素时动态滑动到最底部
鼠标操作
ActionChains鼠标类 :点击、右击、双击、 、拖拽等
步骤:
1、导包from selenium.webdriver import ActionChains
2、实例化鼠标对象 action = ActionChains(driver)
3、调用鼠标方法:
action.move_to_element(element) 鼠标悬停
action.context_click(element) 鼠标右击
action.double_click(element) 鼠标双击
action.drag_and_drop(source, target) 鼠标拖拽
4、执行鼠标操作action.perform()
调用鼠标方法并不会去执行鼠标操作,必须调用perform才会执行
"""需求:打开注册页面A,模拟鼠标悬停在‘注册’按钮上"""from selenium.webdriver import ActionChains# 获取ActionChains对象action = ActionChains(driver)el = driver.find_element(By.CSS_SELECTOR,"button")sleep(2)# 调用悬停方法action.move_to_element(el).perform()
# 需求:打开注册页面A,在用户名文本框上点击鼠标右键# 获取ActionChains对象action = ActionChains(driver)username = driver.find_element(By.CSS_SELECTOR,"#userA")# 鼠标右击action.context_click(username).perform()sleep(2)
"""需求:打开注册A,输入用户名admin,暂停3秒钟后,双击鼠标左键,选中admin"""from selenium.webdriver import ActionChains# 获取ActionChains对象action = ActionChains(driver)username = driver.find_element(By.CSS_SELECTOR,"#userA")username.send_keys("admin")sleep(3)# 鼠标双击action.double_click(username).perform()
# 鼠标拖拽方法sleep(3)# 获取ActionChains对象action = ActionChains(driver)div1 = driver.find_element(By.CSS_SELECTOR, "#div1")div2 = driver.find_element(By.CSS_SELECTOR, "#div2")action.drag_and_drop(div1, div2).perform()
元素等待----隐式等待和显示等待
元素等待概念:在等位元素时如未定位到,会在指定时间内一直等待的过程
代码执⾏过程中,第⼀次未找到元素,先不抛出异常。激活等待时间,在等待过程中如果找到元素 就执⾏
为什么有元素等待:
1、网络配置低
2、电脑配置低
3、服务器处理速度请求慢
由于⽹络或配置原因,导致元素未加载出来,⽽代码已执⾏,会触发异常。
元素类型类型 : 隐式等待、显示等待、强制等待
1、隐式等待
说明: 针对全部元素⽣效
⽅法: driver.implicitly_wait(timeout秒)
提示:在项⽬中,如果未封装⾃动化框架时,推荐使⽤。
定位元素时,如果能定位到元素则直接返回该元素,不触发等待;
如果不能定位到该元素,则间隔一段时间后再去定位元素;
如果在达到最大时长时还没有找到指定元素,则抛出元素不存在的异常NoSuchElementException。
# 全局生效,所有元素第一次未找到触发 等待10秒driver.implicitly_wait(10)# 验证隐式等待driver.find_element(By.CSS_SELECTOR,"#userAA")
2、显示等待
说明: 针对单个元素⽣效,可以修改查找频率和超时时间。
特点: 查找并返回元素
提示:在封装框架时,高手使用,灵活
定位 元素时,如果能定位到元素则直接返回该元素,不触发等待;
如果不能定位到该元素,则间隔一段时间后再去定位元素
如果在达到最大时长时还没有找到指定元素,则抛出超时异常TimeoutException
步骤:
1、导包from selenium.webdriver.support.wait import WebDriverWait
2、创建显示等待类对象WebDriverWait(driver, timeout, poll_frequency=0.5)
3、调用utils方法 until(method):直到...时
4、element = WebDriverWait(driver,10,1).until(lambda x: x.find_element(By.CSS_SELECTOR,"#userAA"))
# 1、导包from selenium.webdriver.support.wait import WebDriverWait# 2、显示等待 -> 返回查找到的元素el = WebDriverWait(driver,10,0.5).until(lambda x: x.find_element(By.CSS_SELECTOR,"#userAA"))el.send_keys("admin")
3、强制等待
语法: sleep(10)
提示: 执⾏到这句必须等待10秒,不灵活。
time.sleep()影响运行效率
from time import sleepsleep(10)