python + selenium webdriver 通过python来模拟鼠标、键盘操作,来解决SWFFileUpload调用系统底层弹出框无法定位问题

Webdriver是基于浏览器操作的,当页面上传文件使用的是flash的控件SWFFileUpload调用的时候,调用的是系统底层的文件选择弹出框

这种情况,Webdriver暂时是不支持除页面外的其他操作

前期尝试过很多种方法,比如send_keys("path"),但是都无法解决

虽然Webdriver无法对底层进行操作,但是Python的扩展是可以的

通过模拟鼠标、键盘的操作,可以解决这个问题,但是这个方法比较笨,而且不怎么理想,如果有好的方法,请留言给我,谢谢!

解决方法:

1、扩展python包

对底层进行操作,需要导入win32api,win32con

直接把两个模块下载下来进行安装即可

2、在python中进行调用实现鼠标定位,点击、键盘输入的操作

PS:在对文件选择弹出框进行定位,点击的时候,在我的操作系统下,出现了无法点击的情况,但在同事的电脑上却可以操作,于是我采取了模拟键盘输入文件名,确保文件能够正确上传

time的作用很重要,起到一个缓冲的作用,如果加载速度慢,没有加time,可能导致这种方法失败

①模拟键盘输入(要注意文件的位置)

import win32con
import win32api
from ctypes import *
import time

def mouse_click(x, y):
    # 设置鼠标初始坐
    windll.user32.SetCursorPos(x, y)
    win32api.mouse_event(win32con.MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0)  # 鼠标左键单击
    time.sleep(1)
    win32api.keybd_event(65,0,0,0) #a键位码是97
    win32api.keybd_event(65,0,win32con.KEYEVENTF_KEYUP,0)
    win32api.keybd_event(65,0,0,0) #a键位码是97
    win32api.keybd_event(65,0,win32con.KEYEVENTF_KEYUP,0)
    win32api.keybd_event(110,0,0,0) #.键位码是46
    win32api.keybd_event(110,0,win32con.KEYEVENTF_KEYUP,0)
    win32api.keybd_event(74,0,0,0) #j键位码是106
    win32api.keybd_event(74,0,win32con.KEYEVENTF_KEYUP,0)
    win32api.keybd_event(80,0,0,0) #p键位码是112
    win32api.keybd_event(80,0,win32con.KEYEVENTF_KEYUP,0)
    win32api.keybd_event(71,0,0,0) #g键位码是103
    win32api.keybd_event(71,0,win32con.KEYEVENTF_KEYUP,0)
    time.sleep(1)
    win32api.mouse_event(win32con.MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0)  # 鼠标左键释放
    time.sleep(1)
    win32api.keybd_event(13,0,0,0) #enter键位码
    win32api.keybd_event(13,0,win32con.KEYEVENTF_KEYUP,0)
    win32api.keybd_event(13,0,0,0) #enter键位码
    win32api.keybd_event(13,0,win32con.KEYEVENTF_KEYUP,0)
    time.sleep(1)

②模拟鼠标定位选择文件

def mouse_double_click(x,y):
	windll.user32.SetCursorPos(x,y)
	win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,0,0,0,0)
	win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)  # 鼠标左键释放
	win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,0,0,0,0)
	win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)  # 鼠标左键释放

  其实两种方法的都差不多,第二种方法实际是双击的效果

---恢复内容结束---

时间: 2024-08-07 17:00:19

python + selenium webdriver 通过python来模拟鼠标、键盘操作,来解决SWFFileUpload调用系统底层弹出框无法定位问题的相关文章

python模拟鼠标键盘操作 GhostMouse tinytask 调用外部脚本或程序 autopy右键另存为

1.参考 autopy (实践见最后一章节) 用Python制作游戏外挂(上) AutoPy Introduction and Tutorial autopy.mouse.smooth_move(1, 1) 可以实现平滑移动 autopy - API Reference pip install PyUserInput SavinaRoja/PyUserInput [python3.5][PyUserInput]模拟鼠标和键盘模拟 Python-模拟鼠标键盘动作 autoit selenium借助

selenium webdriver模拟鼠标键盘操作

在测试使用Selenium webdriver测试WEB系统的时候,用到了模拟鼠标.键盘的一些输入操作. 1.鼠标的左键点击.双击.拖拽.右键点击等: 2.键盘的回车.回退.空格.ctrl.alt.shift等: 在webdriver中,有专门的一个类,是用来进行鼠标.键盘的模拟操作的,那就是Actions类,该类使用时,又会涉及到Keyboard.Mouse.CompositeAction(复合动作),先对Mouse的方法做简单罗列,然后再用代码说明: 1.鼠标左键点击: Actions ac

pyautogui模拟鼠标键盘操作

安装pyautogui库 快捷键win+R调出"运行"命令窗口,输出cmd 在cmd命令窗口输出: pip install pyautogui 等待安装,直到完成 如何使用 打开python的IDLE 导入库: import pyautogui as pg 按需输入命令即可 命令 每条指令运行间隔(类似全局): pg.PAUSE=1 %每隔1s运行一条程序 鼠标类命令 获取当前鼠标位置: pg.position() 模拟鼠标左键: pg.click(x,y) 模拟鼠标双击左键: pg.

模拟鼠标键盘操作,含硬件模拟技术[转载]

键盘是我们使用计算机的一个很重要的输入设备了,即使在鼠标大行其道的今天,很多程序依然离不开键盘来操作.但是有时候,一些重复性的,很繁琐的键盘操作总会让人疲惫,于是就有了用程序来代替人们按键的方法,这样可以把很多重复性的键盘操作交给程序来模拟,省了很多精力,按键精灵就是这样的一个软件.那么我们怎样才能用VB来写一个程序,达到与按键精灵类似的功能呢?那就让我们来先了解一下windows中响应键盘事件的机制.    当用户按下键盘上的一个键时,键盘内的芯片会检测到这个动作,并把这个信号传送到计算机.如

Delphi下利用WinIo模拟鼠标键盘详解

http://www.cnblogs.com/rogee/archive/2010/09/14/1827248.html 本文最早在编程论坛上发表,文章地址:http://programbbs.com/bbs/view12-17207-1.htm,相关文件可以在上述地址的页面中下载.转载时请注明出处. 前言 一日发现SendInput对某程序居然无效,无奈只好开始研究WinIo.上网查了很多资料,发现关于WinIo模拟鼠标键盘的资料很少,有的也只是支言片语讲的不是很详细,而且大部分都是关于模拟键

python+selenium webdriver 自动化测试(一)

作为一个刚刚接触python,第一次编程,第一次试着去做自动化的小渣渣,借此地来见证自己的进步,也许每一步对于别人来说微不足道, 但是对于自己来说,是无数次思考之后才能迈出的一步,很吃力,也同样很欣慰.废话不多说,进入主题. 我用的是python+selenium webdriver来搭建自动化框架,对于python语言,不熟悉,只是粗略的看了一遍书,不知道该编什么,也不知道怎么编,请教大牛后,直接上路,不纠结,实战中可以学会更多.推荐一本书,虫师的<selenium webdriver (py

Python+Selenium笔记(九):操作警告和弹出框

#之前发的 driver.switch_to_alert() 这句虽然可以运行通过,但是会弹出警告信息(这种写法3.x不建议使用)  改成 driver.switch_to.alert就不会了. (一) 前言 开发人员使用JavaScript 警告或者模态对话框来提示校验错误信息.报警信息.执行操作后的返回信息,甚至用来接收输入值等. (二) Alert类 Selenium WebDriver 通过Alert 类来操控 JavaScript 警告. (三) Alert功能及方法 功能/属性 简单

Python Selenium 获取不到弹出框的另外一种思路

大家都知道弹出框大致可以分为三种:1.警告消息框(alert).2.确认消息框(confirm).3.提示消息对话(prompt) 而selenium 提供switch_to_alert()方法来定位: switch_to_alert() #定位弹出对话 text()               #获取对话框文本值 accept()                   #相当于点击"确认" dismiss()                  #相当于点击"取消"

Linux 模拟 鼠标 键盘 事件

/************************************************************************ * Linux 模拟 鼠标 键盘 事件 * 说明: * 以前看到有些软件能够控制鼠标移动,键盘操作等功能,总想知道这些到底 * 是怎么做到的,好像是2年前也尝试去做这件事,但那时候对知识的匮乏直接导致 * 无法进行,早上突然想到这件事,于是又搜索了一下,鉴于目前经常接触Linux * 驱动,对这些东西的理解也就很容易. * * 2016-2-27 深