一、文件上传
1.1 文件上传(input)
当页面标签为input时,使用send_keys向其输入一个文件地址来实现上传
'''
selenium只支持input元素的上传,直接使用send_keys将文件绝对地址写入元素即可
'''
import time
from selenium import webdriver
with webdriver.Chrome() as dirver:
dirver.get('http://www.baidu.com')
dirver.find_element_by_xpath('//span[@class="soutu-btn"]').click()
time.sleep(2)
input=dirver.find_element_by_xpath('//input[@class="upload-pic"]')
input.send_keys(r'C:\Users\Administrator\Desktop\123.png')
time.sleep(5)
1.2 文件上传(pywinauto)
很多时候页面不是使用input来进行文件上传,则需要使用第三方包来操作系统界面
pywinauto:
优点:只能在windows使用
缺点:能选择多个文件,可使用中文路径
1.2.1 安装
pip install pywinauto
1.2.2 使用
import time
from selenium import webdriver
from pywinauto.keyboard import send_keys
with webdriver.Chrome() as driver:
driver.get('http://www.baidu.com')
span=driver.find_element_by_xpath('//span[@class="soutu-btn"]')
span.click()
time.sleep(1)
# 打开选择文件窗口
select_span=driver.find_element_by_class_name('upload-wrap')
select_span.click()
time.sleep(2)
# 选择文件
send_keys(r'C:\Users\Administrator\Desktop\123.png')
time.sleep(1)
# 多文件上传
# send_keys('"c:\images\9.png"')
# send_keys('"c:\images\8.png"')
# send_keys('{vk_RETURN}')
# 点击确定
send_keys('{ENTER}')
time.sleep(5)
1.3 文件上传(pyautogui)
pyautogui:
优点:可跨平台使用(Linux、mac、windows等)
缺点:只能选择一个文件,当文件路径中存在中文则报错
1.3.1 安装
pip install pyautogui
1.3.2 使用
import time
from selenium import webdriver
import pyautogui
with webdriver.Chrome() as driver:
driver.get('http://www.baidu.com')
span = driver.find_element_by_xpath('//span[@class="soutu-btn"]')
span.click()
time.sleep(1)
# 打开选择文件窗口
select_span = driver.find_element_by_class_name('upload-wrap')
select_span.click()
time.sleep(2)
# 选择文件
pyautogui.write(r'C:\Users\Administrator\Desktop\123.png')
time.sleep(1)
# 选择确定 2表示确定
pyautogui.press('enter',2)
time.sleep(5)
12.4 文件上传(autoIT)
12.4.1 安装
1.4.2 识别控件
识别文件名输入框:
窗口的title为“打开”,标题的Class为“#32770”。
文件名输入框的class 为“Edit”,Instance为“1” ,所以ClassnameNN为“Edit1”。
识别打开按钮:
窗口的title为“打开”,标题的Class为“#32770”。
打开按钮的class 为“Button”,Instance为“1” ,所以ClassnameNN为“Button1”
1.4.3 打开SciTE Script Editor编辑器编写脚本
; 设置输入焦点到指定窗口的某个控件
; ControlFocus("窗口标题","窗口文本","控件ID")
ControlFocus("打开", "", "Edit1")
; 暂停脚本的执行直至指定窗口存在(出现)为止
;WinWait("窗口标题", "窗口文本", "超时时间")
WinWait("[CLASS:#32770]", "",10)
; 修改指定控件的文本
; ControlSetText("窗口标题", "窗口文本", "控件ID","新文本")
ControlSetText("打开", "", "Edit1", "C:\Users\tang\Desktop\123.jpg")
; 使脚本暂停指定时间
Sleep(2000)
; 向指定脚本发送鼠标点击命令
; ControlClick("窗口标题", "窗口文本","控件ID")
ControlClick("打开", "", "Button1")
1.4.4 AutoIT脚本编译成可执行文件
脚本编辑运行无误后,将其保存(xx.au3)。然后打开Complie Script to .exe工具,将保存的脚本编译成exe可执行文件,xxx.exe。
1.4.5 Python中使用
import time
import os
from selenium.webdriver import ActionChains
from selenium import webdriver
dr = webdriver.Chrome()
url = r'file:///C:/Users/tang/Desktop/pagetest/%E6%B3%A8%E5%86%8CA.html'
dr.get(url)
# dr.find_element_by_name('upfilea').send_keys(r'C:\Users\tang\Desktop\123.jpg')
time.sleep(3)
ipt = dr.find_element_by_name('upfilea')
action = ActionChains(dr)
action.click(ipt)
action.perform()
time.sleep(3)
os.system(r'C:\Users\tang\Desktop\shangchuan.exe')
dr.quit()
1.5 文件上传(pyautoit)
安装工具。autoit V3工具是用来查看windows窗口信息及控件信息的
通过pycharm安装 pyautoit
import time
import autoit
from selenium import webdriver
from selenium.webdriver import ActionChains
dr = webdriver.Chrome()
dr.maximize_window()
dr.implicitly_wait(10)
dr.get("http://www.baidu.com")
# 点击百度上面的照相机按钮
dr.find_element_by_css_selector('.soutu-btn').click()
# 点击选择文件
element = dr.find_element_by_css_selector('.upload-pic')
# 定义鼠标对象
action = ActionChains(dr)
# 调用鼠标事件
action.click(element)
# 执行鼠标事件方法
action.perform()
time.sleep(2)
# 等待窗口加载 窗口标题 等待时间
autoit.win_wait_active('打开', 5)
# 写入路径 窗口标题 输入框ID 文件的路径
autoit.control_send('打开', 'Edit1', r'C:\Users\tang\Desktop\123.jpg')
# 点击打开按钮 窗口标题 ’打开‘按钮
autoit.control_click('打开', 'Button1')
time.sleep(10)
dr.quit()
二、键盘操作
from selenium.webdriver.common.keys import Keys
模拟键盘上面的快捷键的操作
调用键盘操作的快捷键的方法 element.send_keys(快捷键的键值)
需要导入Keys类, 第一个字母是大写
单键值: 直接传入对应的键值
组合键: 键值之间由逗号分隔
send_keys(Keys.CONTROL, Keys.SHIFT, 'i')
常用的快捷键:
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, 'v') 粘贴
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
dr = webdriver.Chrome()
url = r'https://www.baidu.com/'
dr.get(url)
ipt = dr.find_element_by_id('kw')
time.sleep(3)
ipt.send_keys('123')
time.sleep(3)
ipt.send_keys(Keys.CONTROL, 'a')
time.sleep(3)
ipt.send_keys(Keys.CONTROL, 'c')
time.sleep(3)
ipt.send_keys(Keys.CONTROL, 'v')
time.sleep(3)
ipt.send_keys(Keys.CONTROL, 'v')
time.sleep(3)
ipt.send_keys(Keys.ENTER)
time.sleep(3)
dr.quit()