一.鼠标事件
#.语法
1.导包
from selenium.webdriver import ActionChains
ActionChains(driver).方法名(元素).preform()
双击:
ActionChains(driver).double_click(ele).perform()
右击(重要):
ActionChains(driver).context_click(ele).perform()
鼠标悬停(重要):
ActionChains(driver).move_to_element(ele).perform()
拖动鼠标:
ActionChains(driver).drag_and_drop(原始元素,目标元素).perfrom
指定坐标点拖动----x轴和y轴以左上角圆点位置为(0,0):
ActionChains(driver).drag_and_drop_by_offset(目标元素,x轴移动,y轴移动).perform
例子:
定位元素
ele = driver.find_element_by_link_text('元素')
实例化鼠标的对象
action_chains = ActionChains(driver)
鼠标的双击的方法
ActionChains(driver).double_click(ele).perform()
driver.maximize_window()
右击
ele = driver.find_element_by_css_selector('a[id="s-top-loginbtn"]')
鼠标进行右击
ActionChains(driver).context_click(ele).perform()
ele = driver.find_element_by_css_selector('span[id="s-usersetting-top"]')
鼠标悬停
ActionChains(driver).move_to_element(ele).perform()
driver.find_element_by_id('kw').send_keys()
ele = driver.find_element_by_id('su')
按下鼠标的左键
ActionChains(driver).click_and_hold(ele).perform()
二.键盘事件
1.导包
from selenium.webdriver.common.keys import Keys
键盘的使用必须与send_keys结合起来
send_keys(keys.BACK_SPACE) 键盘键入删除键
send_keys(keys.TAB) 键盘键入tab键
send_keys(keys.ENTER) 键盘键入回车键
例子:
from selenium import webdriver
import time
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.find_element_by_id('kw').send_keys()
time.sleep(3)
# 键盘的使用必须和 send_keys 结合起来
driver.find_element_by_id('kw').send_keys(Keys.BACK_SPACE)
time.sleep(2)
# 键盘写入tab键
driver.find_element_by_id('kw').send_keys(Keys.TAB)
time.sleep(3)
# 键盘写入回车键
driver.find_element_by_id('kw').send_keys(Keys.ENTER)
三.下拉框选择
1.操作
1)通过元素的基本操作,进行下拉框定位
2).先定位下拉框,点击下拉出现选项
3).定位选项,再选中选项
例子:
from selenium import webdriver
from selenium.webdriver.support.select import Select
import time
driver = webdriver.Firefox()
driver.get('网页链接地址') # 复制一个网页地址
# 之前的方法
driver.find_element_by_id("selectA").click()
driver.find_element_by_css_selector('option[value="cq"]').click()
2.通过select定位
1.导包
from selenium.webdriver.support.select import Select
2.方法
通过value选择 select.select_by_value(value值)
通过索引选择 索引从0开始 select.select_by_index(索引值)
通过元素文本选择 select.select_by_visible_text(文本值)
例子:
from selenium import webdriver
from selenium.webdriver.support.select import Select
import time
driver = webdriver.Firefox()
driver.get(网页地址链接) # 复制一个网页地址
# 定位到下拉框元素
ele = driver.find_element_by_id("selectA")
# 实例化select对象
select = Select(ele)
time.sleep(3)
# 通过value选择
select.select_by_value("gz")
time.sleep(3)
# 通过索引选择
select.select_by_index(3)
time.sleep(3)
# 通过元素文本选择
select.select_by_visible_text("A北京")
time.sleep(3)
driver.quit()
四.滚动条处理
在webdriver里面本身没有提供对滚动条的操作,但是提供了一个执行js脚本的方法
因此可以通过js脚本来执行滚动条上下滑动
语法:
1.准备js脚本
window.scrollTo(x,y) 左右滑动改变x轴,上下滑动改变y轴
2.使用webdriver的execute_script(js脚本)的方法执行js脚本实现滚动条操作
driver.execute_script(js)
例子:
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get(网页地址) # 复制一个网页地址
# js = 'window.scrollTo(0,1000)'
#
time.sleep(3)
#
# driver.execute_script(js)
聚焦到某个元素位置:
1.定位需要聚焦的元素
ele = driver.find_element_by_id('alerta')
2.聚焦元素的js脚本
js = 'arguments[0].scrollIntoView();'
3.执行脚本传入元素
driver.execute_script(js,ele)
例子:
from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get(网页地址) # 复制一个网页地址
time.sleep(2)
# 准备需要聚焦到的元素
ele = driver.find_element_by_id("alerta")
# 准备js脚本聚焦到元素
js = "arguments[0].scrollIntoView();"
# 执行js脚本,聚焦到某元素
driver.execute_script(js, ele)
五.iframe操作
定义:是前端常用的一个标签,用于HTML页面的嵌套,会导致嵌套的页面元素能定位,但是实际上元素不在本页面
想要定位到iframe里面的元素,需要进行切换
怎么去切换:
driver.switch_to.frame(name值或者id值)
driver.switch_to.frame(索引值) 索引从0开始
driver.switch_to.frame(定位的元素)
退出嵌套页面:
1.退出所有的嵌套页面
driver.switch_to.default_content()
2.只退出一层嵌套
driver.switch_to.parent_frame()
iframe场景的应用场景:
1.登录
2.富文本编辑框
3.后台的菜单栏
例子:
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get('网页地址') # 复制一个网页地址进行
# 定位账号然后输入内容
driver.find_element_by_css_selector('input[id="user"]').send_keys('admin')
# 执行滚动到底部
js = 'window.scrollTo(0,1000)'
driver.execute_script(js)
time.sleep(2)
# 页面切换
# 通过frame的name切换页面
# driver.switch_to.frame('myframe1')
# 通过frame的id进行页面切换
# driver.switch_to.frame('idframe1')
# 通过frame的索引值切换 从0开始
# driver.switch_to.frame(0)
# 通过元素定位来切换
ele = driver.find_element_by_css_selector('iframe[id="idframe1"]')
driver.switch_to.frame(ele)
# 定位账号A输入内容
driver.find_element_by_css_selector('input[id="userA"]').send_keys('adminA')
# 切换回默认页面,退出所有的嵌套
# driver.switch_to.default_content()
# 只退出一层嵌套
driver.switch_to.parent_frame()
driver.find_element_by_id('password').send_keys('123456')
六.多窗口切换
概念:
窗口切换:
在超链接标签(a)里面存在 target=_blank 的时候点击会打开一个新的页面
窗口句柄:
获取窗口句柄
driver.current_window_handle 获取当前页面(原页面)的句柄
driver.window_handles 获取所有页面的句柄,返回一个列表
切换窗口:
driver.switch_to.window(句柄)
例子:
from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get(网页地址) # 复制一个网页地址进去
time.sleep(2)
# 获取当前页面句柄
curr1 = driver.current_window_handle
print(curr1)
# 定位到新浪新闻并点击
driver.find_element_by_id("fw").click()
time.sleep(2)
# 获取所有页面句柄,返回一个列表
curr2 = driver.window_handles
print(curr2)
# 切换回原页面
driver.switch_to.window(curr1)
time.sleep(2)
# 根据索引切换至新浪页面
driver.switch_to.window(curr2[1])
time.sleep(2)
# 根据索引切换回原页面
driver.switch_to.window(curr2[0])
time.sleep(2)
# 关闭页面
driver.quit()
多窗口切换方法2
通过js脚本移除target属性
js = 'document.getElementById("fw").removeAttribute("target")'
driver.execute_script(js)
例子:
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get('网页地址') # 复制一个网页地址
# 准备js脚本
js = 'document.getElementById("fw").removeAttribute("target")'
# 执行js脚本去掉target属性
driver.execute_script(js)
driver.find_element_by_id('fw').click()
time.sleep(3)
# 回到原页面
driver.back()
七.弹窗处理
概念:
为什么要取消弹窗?
因为存在弹窗之后页面的元素无法操作
原生弹窗:
alert:只有一个确定按钮
confirm:有一个确定按钮,一个取消按钮
prompt:有一个输入框,一个确定按钮,一个取消按钮
例子:
# alert原生弹窗
# 获取页面上原生的弹窗
my——alert= driver.switvh_to.alert
# 点击确定按钮
print(my_alert.text)
confirm:变量=driver.switch_to.alert
变量.accept() 点击确定
变量.dismiss() 点击取消
prompt:同confirm一样
多一个 变量.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() 判断元素是否选中
例子:
from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get('网页地址') # 复制一个网页地址进去
time.sleep(2)
li = driver.find_element_by_id('li')
# 是否选中
driver.find_element_by_id('jz').click()
print(li.is_selected())
time.sleep(3)
if li.is_selected():
pass
else:
li.click()
li.click()
time.sleep(10)
driver.quit()
十.多选框
概念: 多选框是html代码里面 type属性是 checkbox,name属性相同
全选:
from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get(网页地址) # 复制一个网页地址
time.sleep(2)
# 全选
# 获取所有的元素,
eles = driver.find_elements_by_name('checkbox')
print(eles)
# # 遍历全部选中
# 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()
time.sleep(10)
driver.quit()