打开URL并返回shell



我在python 3上运行一个脚本,该脚本使用webbrowser.open()打开一个URL,并立即要求用户输入。问题是,活动窗口现在是浏览器的窗口,而不是python shell的窗口,并且总是需要Alt Tab键或单击来提供答案。你可以想象,对于成千上万的图像来说,这是多么令人沮丧。代码就这么简单:

 for rP in images:
     webbrowser.open(rP)
     decision = str(input('Is image '+str(rP)+' ok?')

我想有三种方法可以解决这个问题,但我似乎找不到其中任何一种的实现。我在webbrowser.open()命令中尝试了"autoraise"选项,但没有成功。我猜,任何一种解决方案都会很简单,以至于我会在事后摇头。

因此:
解决方案#1:在输入行之前有一个命令,使shell窗口而不是浏览器处于活动状态
解决方案2:在后台打开网页,这样就永远不会离开外壳
解决方案#3:给shell窗口一个"始终在顶部"的属性。

有什么想法吗?

Windows

这是用Python 2.7.8测试的,partyfuddha发布了双重AppActivate技巧,eryksun发布了睡眠技巧:

from webbrowser import open as browse
from win32com.client import Dispatch
from win32gui import GetForegroundWindow
from win32process import GetWindowThreadProcessId
from time import sleep
images=['http://serverfault.com', 'http://stackoverflow.com']
for rP in images:
    _, pid = GetWindowThreadProcessId(GetForegroundWindow())
    browse(rP)
    sleep(1)
    shell = Dispatch("WScript.Shell")
    shell.AppActivate(pid)
    shell.AppActivate(pid)
    decision = raw_input('Is image ' + str(rP) + ' ok? ')

在没有1秒睡眠的情况下,浏览器保持了焦点,就好像AppActivate发生得太快了。

OS X

#!/usr/bin/env python
from webbrowser import open as browse
from subprocess import check_output
images=['http://serverfault.com', 'http://stackoverflow.com']
for rP in images:
     term = check_output(['/usr/bin/osascript', '-e',
         'copy path to frontmost application as text to stdout']).strip()
     browse(rP)
     check_output(['/usr/bin/osascript', '-e',
         'tell application "%s" to activate' % term])
     decision = raw_input('Is image ' + str(rP) + ' ok? ')

这段代码是用Python 2.7.5测试的,因此可能需要进行调整才能使用Python 3,但核心思想是使用osascript获取最前端的应用程序,然后在浏览器窗口中打开URL后激活它。

如果使用Selenium,焦点会在.get()之后自动返回到浏览器。

相关内容

  • 没有找到相关文章

最新更新