python - 如何使用 pywinauto 从上下文菜单中选择菜单项?

标签 python powerbi pywinauto

我正在使用 pbixrefresher 自动刷新 PBI 报告,效果很好,但是我还需要将数据表保存为 csv 文件,方法是将表复制到 Excel 中,然后另存为 csv,因为该表是较大,可在 PBI 中导出为 csv(约 60k 行)。我可以让 pywinauto 进入 PBI 中的数据 View ,并且感谢此处的一些帮助,出现了下拉菜单(上下文菜单或弹出菜单)。我可以在菜单中按 Tab 键找到所需的选项,但当我使用 click_input('left') 时没有任何反应。菜单仍然显示并且不采取任何操作。代码如下:

import time
import os
from pywinauto.application import Application
from pywinauto import timings


timings.after_clickinput_wait = 1
WORKBOOK = "C:/BBSDMthly/DA_AgentList.pbix"
PROCNAME = "PBIDesktop.exe"
os.system('start "" "' + WORKBOOK + '"')
app = Application(backend = 'uia').connect(path = PROCNAME)
win = app.window(title = 'DA_AgentList - Power BI Desktop')
time.sleep(5)
win.wait("enabled", timeout = 300)
win.Save.wait("enabled", timeout = 300)
win.set_focus()
win.Data.click_input()
win.Save.wait("enabled", timeout = 300)
win.wait("enabled", timeout = 300)
win.click_input(button = 'right')
win.Save.wait("enabled", timeout = 300)
win.wait("enabled", timeout = 300)
win.set_focus()
win.type_keys("{VK_TAB 7}")
win.click_input(button='left')

我已经搜索了与此有关的其他查询,并发现了几个但我尝试过的选项都不起作用。例如,我尝试过:

app.PopupMenu.wait('visible', timeout=15).menu().get_menu_path('复制表格')[0].click_input()

返回:

`文件“C:\Program Files\Anaconda3\lib\site-packages\pywinauto\timings.py”,第 375 行,在 wait_until 中 引发错误

超时错误:超时`

我也尝试过:

app.ContextMenu.child_window(title="复制表格", control_type="MenuItem").click_input()

返回了一个 MatchError:

MatchError:在“dict_keys(['DA_AgentList - Power BI DesktopDialog', 'Dialog', 'DA_AgentList - Power BI Desktop'])”中找不到“ContextMenu”

我也尝试过: app.top_window().menu.item_by_path('复制表格')[0].click_input()

返回的 MatchError:在“dict_keys(['System'])”中找不到“复制表”

我尝试使用 print_control_identifiers 来获取有关下拉菜单的更多信息,但返回的内容似乎与它无关。不幸的是,我没有检查.exe,因此无法使用它来获取更多信息。

有人可以帮我解决这个问题吗?

最佳答案

我似乎已经弄清楚如何从下拉菜单中选择复制表。我在 GitHub 上发现 inform.exe 是独立的,因此设法在没有任何管理员权限问题的情况下获得它。使用inspect.exe,我获得了复制表的坐标,并使用下面的代码单击按钮:

win.click_input(coords=(754,306))
win.Save.wait("enabled", timeout = 300)
win.wait("enabled", timeout = 300)
win.set_focus()

这已经工作了好几次了,看来已经解决了我的问题。现在我需要做的就是弄清楚如何将数据粘贴到 Excel 中!

关于python - 如何使用 pywinauto 从上下文菜单中选择菜单项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58448730/

相关文章:

r - 如何将 R 数据框导出到 Power Query 表

sql-server - 为什么 "sys.sql_expression_dependencies"没有 Azure 数据仓库中存储过程的任何引用?

python - 如何使用 Python 在 Windows 应用程序中获取右键单击上下文菜单?

python - pywinauto:如何使用wrapper_object()给出的内存位置字符串?

user-interface - 使用 pywinauto 检查复选框不起作用

python - 如何使用 Python 转换八进制转义序列

python - 使用一致的填充将数据帧行值连接成一个

c++ - 将 C++ 中的原始字符串数据传递给 Python 程序

python - Python/Django 中具有拆分模型的循环模块依赖关系

azure - 通过 PowerBi 虚拟数据网关访问 Databricks