【发布时间】:2019-10-18 10:13:50
【问题描述】:
我正在使用 pbixrefresher 自动刷新 PBI 报告,它可以正常工作,但是我还需要将数据表保存为 csv 文件,方法是将表复制到 excel 中,然后保存为 csv,因为该表是大到导出为 PBI 中的 csv(大约 60k 行)。我可以让 pywinauto 转到 PBI 中的数据视图,并且由于这里的一些帮助,我得到了下拉菜单(上下文菜单或弹出菜单)。我可以将菜单向下切换到所需的选项,但是当我使用 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('Copy table')[0].click_input()
返回:
`文件“C:\Program Files\Anaconda3\lib\site-packages\pywinauto\timings.py”,第 375 行,在 wait_until 引发错误
TimeoutError: 超时`
我也试过了:
app.ContextMenu.child_window(title="Copy table", control_type="MenuItem").click_input()
它返回了一个 MatchError:
MatchError: Could not find 'ContextMenu' in 'dict_keys(['DA_AgentList - Power BI DesktopDialog', 'Dialog', 'DA_AgentList - Power BI Desktop'])'
我也试过:
app.top_window().menu.item_by_path('Copy table')[0].click_input()
返回
MatchError: Could not find 'Copy table' in 'dict_keys(['System'])'
我尝试使用 print_control_identifiers 来获取有关下拉菜单的更多信息,但返回的信息似乎与它无关。不幸的是,我没有 inspect.exe,因此无法使用它来获取更多信息。
谁能帮我解决这个问题?
【问题讨论】:
-
如果您正在浏览选项,您不能在
win.type_keys("{VK_TAB 7}{ENTER}")的末尾添加一个{ENTER}吗?这应该对您有所帮助,因为它将帮助您避免尝试找到您不确定且无法找到的元素。 -
我试过你的建议,但不幸的是输入没有任何效果。菜单仍然显示,没有任何内容被复制。