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

1、鼠标操作

1、概述

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

# 导入模块
from selenium.webdriver.common.action_chains import ActionChains

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

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

一个简单的示例如下:

ActionChains().click_and_hold(onElement).move_to_element(toElement).release().bu
ild().perform();

2、实战

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,模块如下:

from selenium.webdriver.common.keys import Keys

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

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、实战

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、概述

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

第一种情况

<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代码如下:

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

4、下拉框的定位

1、select标签的下拉框

有3种方法:
1、通过索引来选择选项。索引从0开始
2、通过value属性来选择
3、通过选项的文本来选择 - 也是最常用的方法

from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select

driver= webdriver.Firefox()
driver.get("file:///D:/%E6%9F%A0%E6%AA%AC%E7%8F%AD%E8%AF%BE%E7%A8%8B/web%E8%87%AA%E5%8A%A8%E5%8C%96/lemon/Python%E8%87%AA%E5%8A%A8%E5%8C%96VIP%E5%BD%95%E6%92%AD%E8%A7%86%E9%A2%91/py%E5%85%A8%E6%A0%8864%E6%9C%9F/%E5%8A%A0%E5%AF%86%E5%90%8E%E8%A7%86%E9%A2%91/%E5%BC%B9%E7%AA%97%E4%B8%8B%E6%8B%89%E6%A1%86demo.html")
driver.maximize_window()

'''
一、当下拉框是Select标签的时候,处理方法如下
'''
 ele = driver.find_element(By.ID,"select")
 sleep(3)
 '''方法一:通过索引来选择选项。索引从0开始'''
 # Select(ele).select_by_index(3)
 '''方法二:通过value属性来选择'''
 # Select(ele).select_by_value("o4")
 '''方法三:通过选项的文本来选择- 最常用'''
Select(ele).select_by_visible_text("浙江省")

sleep(5)
driver.close()

2、一般的下拉框 

'''
一、非Select标签,处理方法为:直接去点击对应下拉框
以百度页面的“设置”按钮为例
'''
driver.get("https://www.baidu.com/")
driver.find_element(By.ID,"s-usersetting-top").click()
driver.find_element(By.XPATH,"//span[text()='高级搜索']").click()
driver.find_element(By.XPATH,"//span[text()='时间不限']").click()
sleep(3)
driver.find_element(By.XPATH,"//p[text()='一月内']").click()
sleep(5)
driver.close()

完结,下次见~

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值