Power BI Desktop的Pbixrefresher报告刷新/发布错误

时间:2020-08-15 08:58:40

标签: python powerbi

我正在尝试刷新力量b.i.比当前网关计划刷新的功能更频繁。

我发现了这一点: https://github.com/dubravcik/pbixrefresher-python

已安装并验证,我已经安装了所有必需的软件包才能运行。 现在,它可以正常工作到最后-刷新后似乎可以正确执行Save函数-但报表没有保存-尝试使用Publish函数时,系统会创建一个提示,询问用户是否要保存并且是否存在超时。

我尝试增加超时参数并在例程中添加更多等待时间(以及github问题线程中的其他一些建议)。

下面是cmd的外观以及错误-我还添加了pbixrefresher文件的Main例程,以防存在其他保存方式(热键)或值得尝试的方法。我在CMD中以用户和管理员身份尝试了此操作-但不确定权限设置是否有可能阻止报表保存。感谢您阅读任何帮助,深表感谢。

Starting Power BI
Waiting 15 sec
Identifying Power BI window
Refreshing
Waiting for refresh end (timeout in 100000 sec)
Saving
Publish
Traceback (most recent call last):
File "c:\python36\lib\site-packages\pywinauto\application.py", line 258, in __resolve_control
criteria)
File "c:\python36\lib\site-packages\pywinauto\timings.py", line 458, in wait_until_passes
raise err
pywinauto.timings.TimeoutError

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "c:\python36\lib\runpy.py", line 193, in _run_module_as_main
"main", mod_spec)
File "c:\python36\lib\runpy.py", line 85, in run_code
exec(code, run_globals)
File "C:\Python36\Scripts\pbixrefresher.exe_main.py", line 9, in
File "c:\python36\lib\site-packages\pbixrefresher\pbixrefresher.py", line 77, in main
publish_dialog.child_window(title = WORKSPACE, found_index=0).click_input()
File "c:\python36\lib\site-packages\pywinauto\application.py", line 379, in getattribute
ctrls = self.__resolve_control(self.criteria)
File "c:\python36\lib\site-packages\pywinauto\application.py", line 261, in __resolve_control
raise e.original_exception
File "c:\python36\lib\site-packages\pywinauto\timings.py", line 436, in wait_until_passes
func_val = func(*args, **kwargs)
File "c:\python36\lib\site-packages\pywinauto\application.py", line 222, in __get_ctrl
ctrl = self.backend.generic_wrapper_class(findwindows.find_element(**ctrl_criteria))
File "c:\python36\lib\site-packages\pywinauto\findwindows.py", line 87, in find_element
raise ElementNotFoundError(kwargs)
pywinauto.findwindows.ElementNotFoundError: {'auto_id': 'KoPublishToGroupDialog', 'top_level_only': False, 'parent': <uia_element_info.UIAElementInfo - 'Simple - Power BI Desktop', WindowsForms10.Window.8.app.0.1bb715_r6_ad1, 8914246>, 'backend': 'uia'}

pbixrefresher的主要例程:

def main():   
    # Parse arguments from cmd
    parser = argparse.ArgumentParser()
    parser.add_argument("workbook", help = "Path to .pbix file")
    parser.add_argument("--workspace", help = "name of online Power BI service work space to publish in", default = "My workspace")
    parser.add_argument("--refresh-timeout", help = "refresh timeout", default = 30000, type = int)
    parser.add_argument("--no-publish", dest='publish', help="don't publish, just save", default = True, action = 'store_false' )
    parser.add_argument("--init-wait", help = "initial wait time on startup", default = 15, type = int)
    args = parser.parse_args()

    timings.after_clickinput_wait = 1
    WORKBOOK = args.workbook
    WORKSPACE = args.workspace
    INIT_WAIT = args.init_wait
    REFRESH_TIMEOUT = args.refresh_timeout

    # Kill running PBI
    PROCNAME = "PBIDesktop.exe"
    for proc in psutil.process_iter():
        # check whether the process name matches
        if proc.name() == PROCNAME:
            proc.kill()
    time.sleep(3)

    # Start PBI and open the workbook
    print("Starting Power BI")
    os.system('start "" "' + WORKBOOK + '"')
    print("Waiting ",INIT_WAIT,"sec")
    time.sleep(INIT_WAIT)

    # Connect pywinauto
    print("Identifying Power BI window")
    app = Application(backend = 'uia').connect(path = PROCNAME)
    win = app.window(title_re = '.*Power BI Desktop')
    time.sleep(5)
    win.wait("enabled", timeout = 300)
    win.Save.wait("enabled", timeout = 300)
    win.set_focus()
    win.Home.click_input()
    win.Save.wait("enabled", timeout = 300)
    win.wait("enabled", timeout = 300)

    # Refresh
    print("Refreshing")
    win.Refresh.click_input()
    #wait_win_ready(win)
    time.sleep(5)
    print("Waiting for refresh end (timeout in ", REFRESH_TIMEOUT,"sec)")
    win.wait("enabled", timeout = REFRESH_TIMEOUT)

    # Save
    print("Saving")
    type_keys("%1", win)
    #wait_win_ready(win)
    time.sleep(5)
    win.wait("enabled", timeout = REFRESH_TIMEOUT)

    # Publish
    if args.publish:
        print("Publish")
        win.Publish.click_input()
        publish_dialog = win.child_window(auto_id = "KoPublishToGroupDialog")
        publish_dialog.child_window(title = WORKSPACE).click_input()
        publish_dialog.Select.click()
        try:
            win.Replace.wait('visible', timeout = 10)
        except Exception:
            pass
        if win.Replace.exists():
            win.Replace.click_input()
        win["Got it"].wait('visible', timeout = REFRESH_TIMEOUT)
        win["Got it"].click_input()

    #Close
    print("Exiting")
    win.close()

    # Force close
    for proc in psutil.process_iter():
        if proc.name() == PROCNAME:
            proc.kill()

        
if __name__ == '__main__':
    try:
        main()
    except Exception as e:
        print(e)
        sys.exit(1)



1 个答案:

答案 0 :(得分:0)

有同样的问题,但使用 "win.type_keys("^S")" 解决了。

相关问题