如何在没有AutoIT的情况下自动化OS交互?

时间:2017-11-02 04:14:06

标签: python windows selenium firefox robotframework

目前,我使用selenium来自动化Web应用程序交互,但为了节省执行时间,我需要打开几个选项卡并在它们之间切换。我已经弄清楚如何使用ctypes来发布我需要做的所有关键组合我只是不知道如何关注'或者激活窗口。

从我收集到的内容中,打开新标签并切换到它后,您必须执行

browser.switch_to_window(browser.current_window_handle)

将selenium的焦点切换到活动标签。然而,我的问题是激活操作系统中的实际浏览器窗口,这超出了selenium的范围。

我的主要限制是我在任何情况下都不能使用AutoIT。这是一个"我做了一个赌注"类型情况。另外,我更愿意坚持使用vanilla库。我必须安装的每个软件包都会对项目产生负面影响,因此请尽可能使用Python附带的内置函数和库。

最后,我不打算从这里复制任何代码,所以如果你能够并且愿意提供帮助,请以帮助我理解的方式这样做,而不是仅仅解决我的问题。

我感谢您提供给我的任何指导,这是我在stackoverflow上的第一篇文章!希望我提供了大量的信息。

Relevant info:
-using windows 7
-using firefox (target window for activation)
-using python 3
-can use robot framework
-using selenium (part of robot framework)
-using ctypes (ships with python 3)
-can import as many vanilla modules as needed,
  only constraint is I don't want to install additional

为了防止你们中任何人知道更简单的方法,这就是我处理关键组合的方式,因为它们在硒中无法正常工作:

import ctypes

user32 = ctypes.windll.user32

#CTRL+T
sleep(1)
user32.keybd_event(0x11,0,0,0)
sleep(1)
user32.keybd_event(0x54,0,0,0)
sleep(1)
user32.keybd_event(0x54,0,2,0)
sleep(1)
user32.keybd_event(0x11,0,2,0)

#CTRL+TAB
sleep(1)
user32.keybd_event(0x11,0,0,0)
sleep(1)
user32.keybd_event(0x09,0,0,0)
sleep(1)
user32.keybd_event(0x09,0,2,0)
sleep(1)
user32.keybd_event(0x11,0,2,0)

#CTRL+W
sleep(1)
user32.keybd_event(0x11,0,0,0)
sleep(1)
user32.keybd_event(0x57,0,0,0)
sleep(1)
user32.keybd_event(0x57,0,2,0)
sleep(1)
user32.keybd_event(0x11,0,2,0)

#CTRL+1
sleep(1)
user32.keybd_event(0x11,0,0,0)
sleep(1)
user32.keybd_event(0x31,0,0,0)
sleep(1)
user32.keybd_event(0x31,0,2,0)
sleep(1)
user32.keybd_event(0x11,0,2,0)

#CTRL+2
sleep(1)
user32.keybd_event(0x11,0,0,0)
sleep(1)
user32.keybd_event(0x32,0,0,0)
sleep(1)
user32.keybd_event(0x32,0,2,0)
sleep(1)
user32.keybd_event(0x11,0,2,0)

谢谢! :)

0 个答案:

没有答案