7.selenium文件上传和键盘操作

一、文件上传

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 安装

地址:AutoIt Downloads - AutoIt

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值