我目前正在尝试使用Pywinauto 0.6.0访问Firebox浏览器的活动窗口的URL,作为可以跟踪网站使用情况的python应用程序的一部分。我是一个新手python程序员,所以如果我犯了一些明显的错误,那么这就是原因。
我已经阅读了我在Google和Pywinauto文档上可以找到的所有资料,但是没有明确的迹象表明如何做到这一点,至少在没有使用" Typekeys"连接到窗口后。
事实上,我已经能够访问" hack"通过pywinauto连接到浏览器窗口,然后使用" TypeKeys()"获取URL并将其复制到剪贴板。但这种方法对我来说不起作用,因为它会中断用户,我的应用程序必须在后台运行,而用户正常访问他们的系统。在更改或刷新窗口然后尝试获取URL时,使用typekeys方法会引入一些奇怪的鼠标和窗口行为 - 因此这种方法对我来说是不可行的。
目前我的代码如下(我使用了我用于测试的特定窗口的窗口文本标题=''实际上它是浏览器上的活动选项卡是):
$question
我使用from pywinauto import *
app = application.Application()
app.connect(title=u'Facebook - Log In or Sign Up - Mozilla Firefox', found_index=0)
window = app.top_window_()
window.PrintControlIdentifiers()
titlebar = window.child_window(title=u'Facebook - Log In or Sign Up - Mozilla Firefox')
toolbar = titlebar.child_window(title=u'Navigation Toolbar')
combobox = toolbar.child_window(title=u'Search or enter address')
edit = combobox.child_window(title=u'Search or enter address')
来查看我可以与之交互的元素,但这只返回
MozillaWindowClass - ' Facebook - 登录或注册 - Mozilla Firefox' (L-32000,T-32000,R-31840,B-31944) [u' Facebook - 登录或注册 - Mozilla Firefox',u' MozillaWindowClass',u' Facebook - 登录或注册 - Mozilla FirefoxMozillaWindowClass']
我可以使用当前活动选项卡访问Firefox窗口,但是下次尝试访问ChildWindow和后续的ChildWindow时没有错误,直到我尝试用childwindow做一些事情,例如,Click()函数就是什么我在URL栏UI元素中思考。但是,我甚至不确定代码是否正在首先正确访问子窗口元素。或者,如果这是尝试过滤子元素以获取URL编辑控件元素的正确方法。
如下图所示,UI元素的树形视图(使用UISPY.exe),以下树访问包含URL的firefox浏览器编辑控件元素:
Tree view of Firefox UI elements via UISPY
"窗口" - > "标题栏" - > "工具栏" "导航工具栏" - > "组合框" - > "搜索或输入地址" - > "编辑" "搜索或输入地址
"编辑" control包含属性Value,Value:" url",我需要将其提取到变量。
对此的任何帮助都将非常感激。
答案 0 :(得分:1)
这可能为时已晚,但万一将来的开发人员有类似的问题。这是有效的解决方案。
只需将backend='uia'
作为参数传递给application.Application(backend='uia')
。现在,可以在child_window上访问并执行操作。
这里是所有网址的完整代码段。
url='https://google.com'
app = application.Application(backend='uia').connect(title_re=".*Mozilla Firefox")
main_firefox_winspec = app.window(title_re=".*Mozilla Firefox")
address_bar = main_firefox_winspec.child_window(title_re=".*or enter address", control_type="Edit")
address_bar.set_edit_text(url)
time.sleep(3)
main_firefox_winspec.child_window(title="Go to the address in the Location Bar").wrapper_object().click_input()