鼠标事件
1.导包
# 1.导包
from selenium import webdriver
from selenium.webdriver import ActionChains
# 2.实例化浏览器
driver = webdriver.Chrome()
# 3.通过对象的get方法打开指定网址网页
driver.get("http://www.baidu.com")
# 4.定位到指定元素
ele = driver.find_element_by_link_text('文本')
# 5.实例化鼠标对象
action_chains = ActionChains(driver)
语法
ActionChains(driver).方法名(元素).preform()
鼠标的操作方法
# 双击鼠标
ActionChains(driver).double_click(ele).perform()
# 鼠标右击
ActionChains(driver).click_and_hold(ele).perform()
# 鼠标悬停
ActionChains(driver).move_to_element(ele).perform()
# 鼠标拖动
ActionChains(driver).drag_and_drop(原始元素,目标元素).perform()
# 指定坐标点的位置进行拖动,x轴和y轴以左上角的原点位置为(0,0)
ActionChains(driver).drag_and_drop_by_offset(目标元素, x轴坐标, y轴坐标).perform()
键盘事件
# 键盘的使用必须和 send_keys 结合起来
# 定位需要点击的按钮位置并点击键盘BACK_SPACE键
driver.find_element_by_id('kw').send_keys(Keys.BACK_SPACE)
# 键盘写入tab键
driver.find_element_by_id('kw').send_keys(Keys.TAB)
# 键盘写入回车键
driver.find_element_by_id('kw').send_keys(Keys.ENTER)
下拉框选择
# 导包
from selenium import webdriver
from selenium.webdriver.support.select import Select
# 定位点击下拉框
driver.find_element_by_id('select').click()
# 点击选中对应的选项
driver.find_element_by_css_selector('option[value="sh"]').click()
2.通过Select定位
# 根据value值选择下拉框
Select(元素).select_by_value(value值)
# 根据索引选择下拉框
Select(元素).select_by_index(索引值) # 索引从0开始
# 根据文本值选择下拉框
Select(元素).select_by_visible_text(文本值)
滚动条处理
在webdriver里面本身没有提供对滚动条的操作,但是提供了一个执行js脚本的方法
因此可以通过js脚本来执行滚动条上下滑动
# 1.准备js脚本
window.scrollTo(x,y) # 左右滑动改变x轴,上下滑动改变y轴
# 2.使用webdriver的execute_script(js脚本)的方法执行js脚本实现滚动条操作
driver.execute_script(js)
聚焦到某个元素位置:
# 1.定位需要聚焦的元素
ele = driver.find_element_by_id('alerta')
# 2.聚焦元素的js脚本
js = 'arguments[0].scrollIntoView();'
# 3.执行脚本传入元素
driver.execute_script(js,ele)
iframe操作
想要定位到iframe里面的元素,需要进行页面的切换
什么时候去使用切换的方法?
1.当你定位元素能够定位但是在selenium里面找不到元素的时候去判断是否因为 iframe嵌套引起
2.在F12 elements里面定位该元素,然后在下方绝对路径里面查看是否有 iframe frame
存在则需要进行页面的切换才能操作
怎么进行页面切换:
driver.switch_to.frame(name值或者id值)
driver.switch_to.frame(索引值) # 索引从0开始
driver.switch_to.frame(定位的元素)
退出嵌套页面:
# 退出所有的嵌套页面
driver.switch_to.default_content()
# 只退出一层嵌套
driver.switch_to.parent_frame()
iframe场景的应用场景:1.登录 2.富文本编辑框 3.后台的菜单栏
窗口切换
在超链接标签(a)里面存在 target=_blank 的时候点击会打开一个新的页面
多窗口切换
窗口句柄
# 获取当前页面(原页面)的句柄
driver.current_window_handle
# 获取所有页面的句柄,返回一个列表
driver.window_handles
# 切换窗口
driver.switch_to.window(句柄)
窗口切换
在超链接标签(a)里面存在 target=_blank 的时候点击会打开一个新的页面
# 通过js脚本移除target属性
js = 'document.getElementById("fw").removeAttribute("target")'
driver.execute_script(js)
弹窗处理
原生弹窗
# 获取页面上原生的弹窗
driver.switch_to.alert
# 获取弹窗的文字信息
变量.text
# alert:只有一个确定按钮
变量 = driver.switch_to.alert
变量.accept()
# confirm:有一个确定按钮,一个取消按钮
变量 = driver.switch_to.alert
变量.accept() # 点击确定
变量.dismiss() # 点击取消
# prompt:有一个输入框,一个确定按钮,一个取消按钮
变量 = driver.switch_to.alert
变量.accept() # 点击确定
变量.dismiss() # 点击取消
变量.send_keys(内容) # 输入内容
自定义弹窗
# 自定义的弹窗没有提供的方法去去除,可以通过执行js脚本来去除自定义的弹窗
# js脚本,把显示属性设置为空
js = 'document.getElementById("iframe_company_mini_div").style.display ="none"'
# 执行js脚本
driver.execute_script(js)
选择框
单选框
# 在html代码里面 type是 radio 并且一组的单元 name属性值全部一样
# 判断元素是否选中
元素.is_selected()
多选框
# 多选框是html代码里面 type属性是 checkbox,name属性相同
# 全选
# 获取所有的元素
eles = driver.find_elements_by_name('checkbox')
# 遍历全部选中
for ele in eles:
if not ele.is_selected():
ele.click()
# 或者
option = ("购物", "旅游")
for ele in eles:
# 判断获取的属性是否存在选项中
if ele.get_attribute('value') in option:
# 判断是否已经被选中
if not ele.is_selected():
# 没有选中才进行点击选中
ele.click()
driver.quit()