Python —— 特殊场景处理(鼠标、键盘操作&文件上传)

1、鼠标操作

1、概述

使用Selenium的ActionChains类来模拟鼠标操作,导入模块如下:

python 复制代码
# 导入模块
from selenium.webdriver.common.action_chains import ActionChains

通过ActionChains对象可以发起鼠标左键、右键、移动鼠标等操作,最后使用perform方法执行操作。一些操作的方法如下所示:

python 复制代码
click() #单击
click_and_hold() #在特定元素上单击鼠标左键(不释放)
release() #抬起鼠标
double_click() #鼠标双击
move_to_element() #鼠标悬停到指定元素上
context_click() #鼠标右击
drag_and_drop() #拖动
perform() #执行具体的操作,前面6个方法都是声明一个操作,只有调用perform()后才会真正执行操作

一个简单的示例如下:

python 复制代码
ActionChains().click_and_hold(onElement).move_to_element(toElement).release().bu
ild().perform();

2、实战

python 复制代码
from selenium import  webdriver
from selenium.webdriver.common.by import By
from time import sleep
from selenium.webdriver.common.action_chains import ActionChains

driver = webdriver.Firefox()
driver.get("https://www.baidu.com/")
driver.maximize_window()
'''场景:在百度页面点击设置-高级搜索-在子页面更改数据'''
element = driver.find_element(By.ID,"s-usersetting-top")
ActionChains(driver).move_to_element(element).perform()
senior = driver.find_element(By.XPATH,"//span[text()='高级搜索']")
ActionChains(driver).click(senior).perform()
sleep(2)
notime = driver.find_element(By.XPATH,"//*[@id='adv-setting-gpc']/div/div[1]")
ActionChains(driver).move_to_element(notime).perform()
ActionChains(driver).click(notime).perform()
sleep(2)
ActionChains(driver).move_to_element(driver.find_element(By.XPATH,"//p[text()='一月内']")).perform()

sleep(2)
# 注意一定要使用 .perform()
ActionChains(driver).click(driver.find_element(By.XPATH,"//p[text()='一月内']")).perform()
sleep(5)
driver.close()

2、键盘操作

1、概述

Selenium中send_keys除了可以模拟键盘输入之外,还可以用它来输入键盘上的按键,甚至是组合键, 比如CTRL+A,CTRL+C,模块如下:

python 复制代码
from selenium.webdriver.common.keys import Keys

Keys()类提供了键盘上所有按键的方法,常用的键盘按键操作如下:

python 复制代码
send_keys(Keys.BACK_SPACE) #删除键(BackSpace)
send_keys(Keys.SPACE) #空格键(Space)
send_keys(Keys.TAB) #制表键(Tab)
send_keys(Keys.ESCAPE) #回退键(Esc)
send_keys(Keys.ENTER) #回车键(Enter)
send_keys(Keys.CONTROL,'a') #全选(Ctrl+A)
send_keys(Keys.CONTROL,'c') #复制(Ctrl+C)
send_keys(Keys.CONTROL,'x') #剪切(Ctrl+X)
send_keys(Keys.CONTROL,'v') #粘贴(Ctrl+V)
send_keys(Keys.F1) #键盘 F1
...
send_keys(Keys.F12) #键盘 F12

2、实战

python 复制代码
from selenium import  webdriver
from selenium.webdriver.common.by import By
from time import sleep

from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support.ui import Select
from selenium.webdriver.common.action_chains import ActionChains

driver = webdriver.Firefox()
driver.get('https://www.baidu.com')
driver.maximize_window()
sleep(2)
driver.find_element(By.ID,'kw').send_keys('柠檬')
sleep(2)
# 删除一个字
# driver.find_element(By.ID,'kw').send_keys(Keys.BACK_SPACE)
# driver.find_element(By.ID,'kw').send_keys(Keys.BACK_SPACE)
sleep(2)
#组合键
#全选
driver.find_element(By.ID,'kw').send_keys(Keys.CONTROL,'a')
# #复制
driver.find_element(By.ID,'kw').send_keys(Keys.CONTROL,'c')
# #粘贴
driver.find_element(By.ID,'kw').send_keys(Keys.CONTROL,'v') # 柠檬
driver.find_element(By.ID,'kw').send_keys(Keys.CONTROL,'v') # 柠檬柠檬
sleep(6)
##剪切
driver.find_element(By.ID,'kw').send_keys(Keys.CONTROL,'x') #因为粘贴的是"柠檬"这2个字
# print(driver.find_element(By.ID,'kw').send_keys(Keys.CONTROL,'x').text)  没有这个方法
# #粘贴
driver.find_element(By.ID,'kw').send_keys(Keys.CONTROL,'v') # 柠檬柠檬柠檬
driver.find_element(By.ID,'kw').send_keys(Keys.CONTROL,'v') # 柠檬柠檬柠檬柠檬
sleep(5)
driver.close()

3、文件上传

1、概述

文件上传是自动化中比较麻烦棘手的部分。

第一种情况

python 复制代码
<input type="file" id="fu" value="选择文件">

因为上传文件会需要打开windows的文件选择窗口,而selenium是无法操作这个窗口的

解决办法:使用send_keys写入文件的路径

第二种情况:

如果文件上传不是input元素,而是使用的第三方的控件。那么这种情况就很棘手了,必须要使用一些第 三方的工具,比如AutoIT来完成。参考:http://testingpai.com/article/1595507303689

mac平台上传文件:https://www.cnblogs.com/deeptester-vv/p/15629135.html

2、实战

注意:auto文件的文件名要根据实际的文件名去写

文件目录如下:

python代码如下:

python 复制代码
import os

from selenium import  webdriver
from selenium.webdriver.common.by import By
from time import sleep

driver = webdriver.Firefox()
driver.get("https://www.XXXXXXXX.com/#/login")
driver.maximize_window()

driver.find_element(By.XPATH,"//input[@placeholder='请输入邮箱/手机号/账号']").send_keys("1234567892")
driver.find_element(By.XPATH,"//input[@placeholder='请输入密码']").send_keys("jiayoujiayou666")
sleep(2)
driver.find_element(By.XPATH,"//span[text()='登录']").click()
sleep(2)
driver.find_element(By.XPATH,"//*[@id='app']/div[2]/div[2]/div/span[3]/span/img").click()
driver.find_element(By.XPATH,"//li[text()='个人设置 ']").click()
sleep(3)
driver.find_element(By.XPATH,"//*[@id='app']/div[3]/div[1]/div[1]/span/img").click()
sleep(2)
driver.find_element(By.XPATH,"//span[text()='重新上传']").click()
sleep(1)
os.system('test4.exe E:\\python310\\web_auto\\d4_特殊场景处理\\test.jpg')
sleep(2)
driver.find_element(By.XPATH,"//div[@class='dialog-footer']/button[2]/span").click()
sleep(5)
driver.refresh()
sleep(5)
driver.close()

完结,下次见~

相关推荐
神奇程序员5 天前
不止高刷:明基 RD280UG 在编码场景下的表现如何
计算机外设
开开心心就好5 天前
安卓开源应用,超时提醒紧急人护独居安全
windows·决策树·计算机视觉·pdf·计算机外设·excel·动态规划
上海合宙LuatOS5 天前
LuatOS核心库API——【iotauth 】 IOT 鉴权库
java·单片机·嵌入式硬件·物联网·struts·计算机外设·硬件工程
谁刺我心6 天前
qml自定义鼠标
计算机外设
SamtecChina20236 天前
Samtec连接器设计研究 | 载流量:温升为什么重要?
大数据·网络·人工智能·算法·计算机外设
ACP广源盛139246256736 天前
GSV6502与GSV2001应用场景相同点和差异点对比@ACP
单片机·计算机外设
凌云拓界7 天前
TypeWell全攻略(二):热力图渲染引擎,让键盘发光
前端·后端·python·计算机外设·交互·pyqt·数据可视化
南山十一少8 天前
cherry键盘组合MacBook使用
计算机外设
开开心心就好9 天前
免费音频转文字工具,绿色版离线多模型可用
人工智能·windows·计算机视觉·计算机外设·ocr·excel·语音识别
开开心心就好10 天前
实用系统备份还原,小巧免PE备份快镜像小
windows·计算机视觉·pdf·计算机外设·迭代器模式·excel·桥接模式