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()

完结,下次见~

相关推荐
Mac新人15 小时前
又发现了Mac妙控鼠标的新使用方法
计算机外设
好想有猫猫4 天前
【51单片机】矩阵键盘
单片机·嵌入式硬件·矩阵·计算机外设·51单片机·学习方法
ggome4 天前
Win10 连接到 Ubuntu 黑屏无法连接 使用Rustdesk显示 No Displays 没有显示器
linux·ubuntu·计算机外设
四维碎片9 天前
【Qt】QApplication::restoreOverrideCursor():恢复鼠标光标到原始状态的用法解析
开发语言·qt·计算机外设
lrlianmengba9 天前
推荐一款多显示器屏幕亮度调节工具:Twinkle Tray
计算机外设
北京同三维影音设备9 天前
同三维TK101控制键盘连接和使用视频说明书:控制键盘
计算机外设·音视频
yybcp99 天前
4K双模显示器值得买吗?
计算机外设
快乐的小山泽9 天前
显示器时不时黑一下是什么原因?
计算机外设
legendary_16310 天前
现在设备普遍切换成TYPE-C适配器后,一拖三数据线接口变革探析
c语言·开发语言·网络·计算机外设·电脑
G果12 天前
键盘控制车子四轮转向
计算机外设