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

完结,下次见~

相关推荐
Hello_Pyhx1 天前
Hookshot v2.1.0:用键鼠玩《时之笛》,把操控和画面调顺手
计算机外设
Rattenking1 天前
OpenCV 轨迹栏操作和键盘响应操作
人工智能·opencv·计算机外设
jllws17 天前
键盘实现输入的思路
计算机外设
不脱发的程序猿9 天前
STM32制作单手鼠标键盘
stm32·嵌入式硬件·计算机外设·usb·qmk
AntsData11 天前
用 12K+ 条亚马逊评论信号,定位机械键盘下一版该改什么
java·大数据·计算机外设
时间的情敌11 天前
Vue3 + Cesium 鼠标交互绘制多边形 / 线(贴地绘制,动态预览,Entity 实现)
计算机外设
小幂同学12 天前
鼠标左右键自动点击怎么设置?单击、双击与宏录制说明
计算机外设·鼠标连点器·连点器·点击器·自动点击器
摩尔芯创12 天前
一期一会 | 什么是抬头显示器(HUD)?
计算机外设
苏州福兰克12 天前
运行裸眼3D显示器对电脑显卡配置有什么要求?
3d·计算机外设·电脑
巧手打字通-一起来打字12 天前
怎么才能科学快速的学会电脑26键盘打字?
计算机外设·电脑·键盘