1.鼠标的操作
举例说明:
第一步:先导包
from selenium import webdriver
from selenium.webdriver import Actionchains #鼠标的导包
web=webdriver.Chrome() #选择谷歌驱动
web.get("http://baidu.com/") #选择URL网址
ele=web.find_element_by_link_text('新闻') # 定位超链接
第二步:鼠标的双击.右击.悬停.拖动.左击 操作
①双击 double_click
ActionChains(web).double_click(ele).perform()
②右击 context_click
ActionChains(web).context_click(ele).perform()
③悬停 move_to_element
ele2=web.find_element_by_css_selector('span[name="tj_settingicon"]') ActionChains(web).move_to_element(ele2).perform()
④拖动 drag_and_drop(定位元素3,定位元素4); drag_and_drop_by_offset(ele3,x轴,y轴)
ActionChains(web).drag_and_drop(ele3,ele4).perform()
ActionChains(web).drag_and_drop_by_offset(ele3,800,200).perform()
⑤左击 click_hold
ActionChains(web).click_hold(ele).perform()
2.键盘操作
#第一步先导包
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('软件开发')
#第二步
# 键盘的使用必须和 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)
3.下拉框操作
#第一步:导包
from selenium import webdriver
#导入selenium模块中 select类的包 ---->alt+enter导包
from selenium.webdriver.support.select import Select
driver=webdriver.Chrome()
driver.get('url') #含下拉框的URL
#第二步
#定位select下拉框标签元素
ele=driver.find_element_by_css_selector('select[name="selecta"]')
#第三步: 定位下拉框中的内容 的三三种方式
Select(ele).select_by_value("value的属性值")
Select(ele).select_by_index(索引) #索引从0开始
Select(ele).select_by_visible_text('文本')
4.滚动条的处理: 执行js脚本
在webdriver里面本身没有提供对滚动条的操作,但是提供了一个执行js脚本的方法 因此可以通过js脚本来执行滚动条上下滑动; selenium中webdriver类的execute_script()方法 来实现
方式一
第一步:准备js脚本
js='window.scrollTo(x轴,y轴)' #输入数字
第二步:执行脚本
driver.execute_script(js)
#导包
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('http://www.baidu.com/')
#准备js脚本
js = 'window.scrollTo(0,1000)'
#执行脚本
driver.execute_script(js)
方式二 :聚焦导某个元素
# 定位需要聚焦的元素
ele = driver.find_element_by_id('id属性值')
# 聚焦元素的js脚本
js = 'arguments[0].scrollIntoView();'
# 执行脚本传入元素
driver.execute_script(js,ele)
5.HTML页面嵌套
前要:
iframe是什么? iframe是前端常用的一个标签,用于HTML页面的嵌套 会导致嵌套的页面元素能定位,但是实际上元素不在本页面 想要定位到iframe里面的元素,需要进行页面的切换 什么时候去使用切换的方法? 1.当你定位元素能够定位但是在selenium里面找不到元素的时候去判断是否因为 iframe嵌套引起 2.在F12 elements里面定位该元素,然后在下方绝对路径里面查看是否有 iframe frame 存在则需要进行页面的切换才能操作
from selenium import webdriver
driver=webdriver.Chrome()
driver.get('file:///D:/%E6%B5%8B%E8%AF%95%E5%AD%A6%E4%B9%A0/5.21web%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95day02/resources/%E7%BB%83%E4%B9%A0%E9%A1%B5%E9%9D%A2/%E6%B3%A8%E5%86%8C%E5%AE%9E%E4%BE%8B.html')
driver.maximize_window()
ele=driver.find_element_by_id('user').send_keys('账号')
ele1 = driver.find_element_by_css_selector('iframe[id="idframe1"]')
#页面切换
driver.switch_to.frame('myframe1') # iframe标签的 name或id的属性值
# driver.switch_to.frame(0) # iframe的索引 从0开始
# driver.switch_to.frame(ele1) #定位iframe的元素
ele2=driver.find_element_by_id('userA').send_keys('账号A') #是嵌套的页面的元素
# 退出嵌套 的两种方式
# driver.switch_to.default_content() #退出所有嵌套回到默认页面
driver.switch_to.parent_frame() #退出当前页面
ele3=driver.find_element_by_id('password').send_keys('密码')
driver.quit() #关闭浏览器
语法 怎么进行页面切换: 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.后台的菜单栏
6.多窗口切换
方式一: 句柄切换---->每个打开的页面都有唯一的句柄
from selenium import webdriver
import time
driver=webdriver.Chrome()
driver.get('file:///D:/%E6%B5%8B%E8%AF%95%E5%AD%A6%E4%B9%A0/5.21web%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95day02/resources/%E7%BB%83%E4%B9%A0%E9%A1%B5%E9%9D%A2/%E6%B3%A8%E5%86%8C%E5%AE%9E%E4%BE%8B.html')
time.sleep(4)
ele=driver.find_element_by_css_selector('a[id="fw"]').click() #点击一个 含target属性的a标签
time.sleep(4)
info=driver.window_handles #获取所有页面的句柄 返回一个列表
#切换窗口: switch_to.window(句柄)
driver.switch_to.window(info[0])
time.sleep(4)
句柄语法:
窗口句柄: 获取窗口句柄 driver.current_window_handle 获取当前页面(原页面)的句柄 driver.window_handles 获取所有页面的句柄,返回一个列表 切换窗口 driver.switch_to.window(句柄)
方式二:js脚本
# 通过js脚本移除target属性
js = 'document.getElementById("fw").removeAttribute("target")'
driver.execute_script(js)
#利用js脚本切换窗口:去除a标签的target属性,就不会打开新窗口,执行back() 回退就可以了
#js脚本移除target属性 js=' 内容 '
js='document.getElementById("fw").removeAttribute("target")' #可以ById属性 也可ByName,ByClass 属性
#执行脚本:execute_script(js)
driver.execute_script(js) #就已经移除target属性了
#再打开点击a标签\
ele2=driver.find_element_by_css_selector('a[id="fw"]').click()
time.sleep(3)
#回退
driver.back()
time.sleep(3)
# driver.quit()
7.弹窗处理
自定义弹窗和原生弹窗(alert,confirm,prompt)
自定义弹窗概念 自定义的弹窗没有提供的方法去去除,可以通过执行js脚本来去除自定义的弹窗 语法 js脚本,把显示属性设置为空 js = 'document.getElementById("iframe_company_mini_div").style.display ="none"' 执行js脚本 driver.execute_script(js)
from selenium import webdriver
import time
#自定义弹窗
driver=webdriver.Chrome()
driver.get('https://cd.itsource.cn/')
time.sleep(3)
#js脚本把style属性设置为空 即style.display="none"
js='document.getElementById("div_company_mini").style.display="none" ' # div_company_mini弹窗id的属性
#执行js脚本 execute_script(js脚本)
driver.execute_script(js)
time.sleep(3)
driver.quit()
#原生弹窗
driver=webdriver.Firefox()
driver.get('file:///D:/%E6%B5%8B%E8%AF%95%E5%AD%A6%E4%B9%A0/5.21web%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95day02/resources/%E7%BB%83%E4%B9%A0%E9%A1%B5%E9%9D%A2/%E6%B3%A8%E5%86%8C%E5%AE%9E%E4%BE%8B.html')
driver.maximize_window()
#获取原生弹窗---->alert,confirm,prompt 都是它:driver.switch_to.alert
#alert的原生弹窗 :只有确认
driver.find_element_by_id("alert").click()
alert=driver.switch_to.alert #获取弹窗
time.sleep(3)
#点击确认
alert.accept()
time.sleep(3)
#confirm的原生弹窗:确认和取消
driver.find_element_by_id("confirm").click()
confirm=driver.switch_to.alert
time.sleep(3)
#点击确认
confirm.accept()
time.sleep(3)
#点击取消
driver.find_element_by_id("confirm").click()
confirm.dismiss()
time.sleep(3)
9.单选框,多选框
单选框 :元素.is_selected() 判断元素是否选中
"""概念
在html代码里面 type是 radio 并且一组的单元 name属性值全部一样
语法
元素.is_selected() 判断元素是否选中
"""
from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get('file:///E:/310%E6%B5%8B%E8%AF%95%E7%B2%BE%E8%8B%B1%E7%8F%AD/10web%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/2023-05-22web%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95day03/resources/%E7%BB%83%E4%B9%A0%E9%A1%B5%E9%9D%A2/%E6%B3%A8%E5%86%8C%E5%AE%9E%E4%BE%8B.html')
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()
多选框:元素.is_selected() 判断元素是否选中
步骤:
1.获取所有的元素
eles = driver.find_elements_by_name('name属性值') 返回一个列表
2.1.遍历全部
for ele in eles:
if not ele.is_selected():
ele.click()
2.2根据要求遍历
info=('value属性值1','value属性值2') #也可以是其他的属性名,不一定是value属性名
for ele in eles:
if ele.get_attribute('value') in info:
if not ele.is_selected():
ele.click()
"""
概念
多选框是html代码里面 type属性是 checkbox,name属性相同
"""
from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get(
'file:///E:/310%E6%B5%8B%E8%AF%95%E7%B2%BE%E8%8B%B1%E7%8F%AD/10web%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/2023-05-22web%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95day03/resources/%E7%BB%83%E4%B9%A0%E9%A1%B5%E9%9D%A2/%E6%B3%A8%E5%86%8C%E5%AE%9E%E4%BE%8B.html')
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()