API常用操作

一、鼠标事件

1.导包: from selenium.webdriver import ActionChains

2.整体语法: 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(原始元素,目标元素).perform()

指定坐标点的位置进行拖动(重要):  x轴和y轴以左上角的原点位置为(0,0)
语法:ActionChains(driver).drag_and_drop_by_offset(目标元素, x轴坐标, y轴坐标).perform()
#鼠标双击及右击--实现代码
from selenium import webdriver
import time
# 导包
from selenium.webdriver import ActionChains
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
# 定位百度的新闻元素
ele = driver.find_element_by_link_text('新闻')
# 实例化鼠标的对象,也可以直接ActionChains(driver)实例化鼠标对象,本行代码可省略
action_chains = ActionChains(driver)
# 调用鼠标的双击的方法
ActionChains(driver).double_click(ele).perform()
# 调用鼠标右击的方法
ActionChains(driver).context_click(ele).perform()
#鼠标悬停--实现代码
from selenium import webdriver
import time
# 导包
from selenium.webdriver import ActionChains
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
# 窗口最大化
driver.maximize_window()
# 定位百度的设置元素
ele = driver.find_element_by_css_selector('span[id="s-usersetting-top"]')
# 调用鼠标悬停的方法
ActionChains(driver).move_to_element(ele).perform()
time.sleep(2)
driver.quit()
#按下鼠标左键--实现代码
from selenium import webdriver
import time
# 导包
from selenium.webdriver import ActionChains
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
# 窗口最大化
driver.maximize_window()
# 定位百度输入框
ele = driver.find_element_by_id('su')
time.sleep(5)
# 按下鼠标的左键
ActionChains(driver).click_and_hold(ele).perform()
time.sleep(2)
driver.quit()
#鼠标拖动---实现代码
import time
from selenium import webdriver
from selenium.webdriver import ActionChains
driver = webdriver.Chrome()
# 打开鼠标拖动练习的网页,见下方练习代码
driver.get('file:///D:/BaiduNetdiskDownload/%E6%B5%8B%E8%AF%95%E5%AD%A6%E4%B9%A0%E6%96%87%E6%A1%A3/%E5%AD%A6%E4%B9%A0/20230521python%E5%AD%A6%E4%B9%A0/%E7%BB%83%E4%B9%A0%E9%A1%B5%E9%9D%A2/drop.html')
#获取第一个元素
div1 = driver.find_element_by_id('div1')
#获取第二个元素
div2 = driver.find_element_by_id('div2')
time.sleep(5)
# 把元素从一个位置,拖动到另外一个元素的位置
ActionChains(driver).drag_and_drop(div1,div2).perform()
# 把元素拖动到指定的像素位置
ActionChains(driver).drag_and_drop_by_offset(div1, 800, 200).perform()
-----------------------------------------------------------------------------------------
  -------------------------这里是鼠标拖动练习的代码-------------------------------------
--<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>拖拽div</title>
<style type="text/css">
div{
 position:absolute;
 width:150px;
 height:150px;
 background-color:red;
}
</style>
<script type="text/javascript">
<!--
function drag(obj)
{
 if (typeof obj == "string") {
 var obj = document.getElementById(obj);
 obj.orig_index=obj.style.zIndex;
 //设置当前对象永远显示在最上层
 }
 obj.onmousedown=function (a){
 //鼠标按下
 this.style.cursor="move";
 //设置鼠标样式
 this.style.zIndex=1000;
  var d=document;
 if(!a) a=window.event;
 //按下时创建一个事件
 var x=a.clientX-document.body.scrollLeft-obj.offsetLeft;
 //x=鼠标相对于网页的x坐标-网页被卷去的宽-待移动对象的左外边距
 var y=a.clientY-document.body.scrollTop-obj.offsetTop;
 //y=鼠标相对于网页的y左边-网页被卷去的高-待移动对象的左上边距
 d.onmousemove=function(a){//鼠标移动
  if(!a) a=window.event;//移动时创建一个事件
  obj.style.left=a.clientX+document.body.scrollLeft-x;
  obj.style.top=a.clientY+document.body.scrollTop-y;
 }
 d.onmouseup=function (){//鼠标放开
  document.onmousemove=null;
  document.onmouseup = null;
  obj.style.cursor="normal";//设置放开的样式
  obj.style.zIndex=obj.orig_index;
 }
 }
}
-->
</script>
</head>
<body>
<div id="div1"> </div>
<div id="div2" style="left:170px; background-color:#408080"></div>
<script type="text/javascript">
<!--
 drag("div1");
 drag("div2");
-->
</script>
</body>
</html>

二、键盘事件

#键盘事件--实现代码
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)

三、下拉菜单选择

#下拉菜单--实现代码
from selenium import webdriver
from selenium.webdriver.support.select import Select
import time
driver = webdriver.Chrome()
driver.get('file:///D:/pythonstudy/5.21/%E6%B3%A8%E5%86%8CA.html')
# 定位点击下拉框
driver.find_element_by_id('select').click()
time.sleep(2)
# 点击选中对应的选项
driver.find_element_by_css_selector('option[value="sh"]').click()

ele = driver.find_element_by_id('select')

select = Select(ele)

time.sleep(2)
# 通过value值来选择下拉选项
select.select_by_value("gz")

time.sleep(2)
# 通过索引值进行定位
select.select_by_index(3)

time.sleep(2)
select.select_by_value('bj')

time.sleep(2)
# 通过文本值进行定位
select.select_by_visible_text('重庆')

四、滚动条操作

#滚动条及聚焦元素--实现代码
from selenium import webdriver
import time
driver=webdriver.Chrome()
driver.get('file:///D:/pythonstudy/5.21/%E6%B3%A8%E5%86%8CA.html')
# 滚动条操作
# js = 'window.scrollTo(0,800)'
# time.sleep(2)
# driver.execute_script(js)
# 聚焦元素
ele = driver.find_element_by_id('alerta')
js = 'arguments[0].scrollIntoView();'
time.sleep(2)
driver.execute_script(js,ele)
time.sleep(2)
driver.quit()

五、iframe操作

  -------------------------------------------iframe是什么?-------------------------------------------------

答:iframe是前端常用的一个标签,用于HTML页面的嵌套 会导致嵌套的页面元素能定位,但是实际上元素不在本页面 想要定位到iframe里面的元素,需要进行页面的切换

 ------------------------------------------怎么进行页面的切换?----------------------------------------

1.driver.switch_to.frame(name值或者id值)

2.driver.switch_to.frame(索引值) 索引从0开始

3.driver.switch_to.frame(定位的元素)

from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get('file:///D:/BaiduNetdiskDownload/%E6%B5%8B%E8%AF%95%E5%AD%A6%E4%B9%A0%E6%96%87%E6%A1%A3/%E5%AD%A6%E4%B9%A0/20230521python%E5%AD%A6%E4%B9%A0/%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.switch_to.frame('myframe1')
# 定位账号然后输入内容
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')
driver.quit()

六、多窗口切换--两种方法

#多窗口切换第一种---实现代码
from selenium import webdriver
import time
driver=webdriver.Chrome()
driver.get('file:///D:/BaiduNetdiskDownload/%E6%B5%8B%E8%AF%95%E5%AD%A6%E4%B9%A0%E6%96%87%E6%A1%A3/%E5%AD%A6%E4%B9%A0/20230521python%E5%AD%A6%E4%B9%A0/%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)
# 获取句柄
current_handle = driver.current_window_handle
print(current_handle)
time.sleep(2)
# 打开新浪
driver.find_element_by_id("fw").click()
time.sleep(2)
# 获取当前句柄
print(driver.current_window_handle)
# 获取所有的句柄,返回的是一个列表
print(driver.window_handles)
time.sleep(2)
# 切换到原来的界面
driver.switch_to.window(current_handle)
time.sleep(2)
# 通过索引获取句柄切换到新页面,索引从0开始
driver.switch_to.window(driver.window_handles[1])
time.sleep(2)
driver.quit()
#多窗口切换--第二种(js脚本去除)
from selenium import webdriver
import time
driver=webdriver.Chrome()
driver.get('file:///D:/BaiduNetdiskDownload/%E6%B5%8B%E8%AF%95%E5%AD%A6%E4%B9%A0%E6%96%87%E6%A1%A3/%E5%AD%A6%E4%B9%A0/20230521python%E5%AD%A6%E4%B9%A0/%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)
# 准备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()

driver.quit()

七、弹窗处理(原生弹窗、自定义弹窗)

# 1、为什么要取消弹窗?
  因为存在弹窗之后页面的元素无法操作
    原生弹窗:
        alert:只有一个确定按钮
        confirm:有一个确定按钮,一个取消按钮
        prompt:有一个输入框,一个确定按钮,一个取消按钮
------------------------------------------------------------------------------------------
#2、弹窗处理语法--原生弹窗
alert:
    变量 = driver.switch_to.alert
    变量.accept()
confirm:
    变量 = driver.switch_to.alert
    变量.accept()     点击确定
    变量.dismiss()    点击取消
prompt:
    变量 = driver.switch_to.alert
    变量.accept()     点击确定
    变量.dismiss()    点击取消
    变量.send_keys(内容)    输入内容

    都可以使用:变量.text  获取弹窗的文字信息
#3、自定义弹窗处理--实现代码(通过js脚本实现)
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get('https://cd.itsource.cn/')
# 去除弹窗的js脚本,把显示属性设置为空
js = 'document.getElementById("div_company_mini").style.display="none"'
# 执行js脚本
driver.execute_script(js)
time.sleep(5)
driver.quit()

八、单选框,多选框

  ----------------------------------------------概念及语法--------------------------------------------------

        单选框是在html代码里面 type是 radio 并且一组的单元 name属性值全部一样。多选框是html代码里面 type属性是 checkbox,name属性相同。

        语法:元素.is_selected()    判断元素是否选中

#单选框、多选框---实现代码
from selenium import webdriver
import time
driver=webdriver.Chrome()
driver.get('file:///D:/pythonstudy/5.21/%E6%B3%A8%E5%86%8CA.html')
# 全选,获取所有的元素
eles = driver.find_elements_by_name('checkbox')
# # 打印获取的元素
# print(eles)
# time.sleep(3)
# # 遍历元素
# for ele in eles:
#     # 判断为假
#     if not ele.is_selected():
#         # 就点击选中
#         ele.click()
# time.sleep(3)

option = ("购物","旅游")
for ele in eles:
    time.sleep(2)
    # 判断获取的属性是否存在在选项中
    if ele.get_attribute('value') in option:
        time.sleep(2)
        # 判断是否已经被选中
        if not ele.is_selected():
            # 没有选中才点击
            ele.click()
            time.sleep(2)
driver.quit()

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值