mirror of https://github.com/jumpserver/jumpserver
parent
c86b28a305
commit
384b639dd3
|
@ -1,3 +1,11 @@
|
||||||
|
# 2023-07-28 Version 0.7
|
||||||
|
## 功能优化
|
||||||
|
- 增加进度窗口,隐藏代填操作
|
||||||
|
|
||||||
|
# 2023-07-13 Version 0.6
|
||||||
|
## 功能优化
|
||||||
|
- 优化 Chrome 插件拦截逻辑
|
||||||
|
|
||||||
# 2023-07-06 Version 0.5
|
# 2023-07-06 Version 0.5
|
||||||
## 功能更新
|
## 功能更新
|
||||||
- 增加匿名用户的支持,如果账号是匿名用户,username 和 secret 则为空
|
- 增加匿名用户的支持,如果账号是匿名用户,username 和 secret 则为空
|
||||||
|
|
|
@ -9,7 +9,7 @@ from selenium.webdriver.chrome.service import Service
|
||||||
from selenium.webdriver.common.by import By
|
from selenium.webdriver.common.by import By
|
||||||
from selenium.webdriver.remote.webelement import WebElement
|
from selenium.webdriver.remote.webelement import WebElement
|
||||||
|
|
||||||
from code_dialog import CodeDialog
|
from code_dialog import CodeDialog, wrapper_progress_bar
|
||||||
from common import (Asset, User, Account, Platform, Step)
|
from common import (Asset, User, Account, Platform, Step)
|
||||||
from common import (BaseApplication)
|
from common import (BaseApplication)
|
||||||
from common import (notify_err_message, block_input, unblock_input)
|
from common import (notify_err_message, block_input, unblock_input)
|
||||||
|
@ -249,6 +249,7 @@ class AppletApplication(BaseApplication):
|
||||||
self._chrome_options.add_argument("--app={}".format(self.asset.address))
|
self._chrome_options.add_argument("--app={}".format(self.asset.address))
|
||||||
self._chrome_options.add_argument("--user-data-dir={}".format(self._tmp_user_dir.name))
|
self._chrome_options.add_argument("--user-data-dir={}".format(self._tmp_user_dir.name))
|
||||||
|
|
||||||
|
@wrapper_progress_bar
|
||||||
def run(self):
|
def run(self):
|
||||||
service = Service()
|
service = Service()
|
||||||
# driver 的 console 终端框不显示
|
# driver 的 console 终端框不显示
|
||||||
|
@ -256,11 +257,11 @@ class AppletApplication(BaseApplication):
|
||||||
self.driver = webdriver.Chrome(options=self._chrome_options, service=service)
|
self.driver = webdriver.Chrome(options=self._chrome_options, service=service)
|
||||||
self.driver.implicitly_wait(10)
|
self.driver.implicitly_wait(10)
|
||||||
if self.app.asset.address != "":
|
if self.app.asset.address != "":
|
||||||
|
self.driver.minimize_window()
|
||||||
ok = self.app.execute(self.driver)
|
ok = self.app.execute(self.driver)
|
||||||
if not ok:
|
if not ok:
|
||||||
print("执行失败")
|
print("执行失败")
|
||||||
self.driver.maximize_window()
|
self.driver.maximize_window()
|
||||||
|
|
||||||
def wait(self):
|
def wait(self):
|
||||||
disconnected_msg = "Unable to evaluate script: disconnected: not connected to DevTools\n"
|
disconnected_msg = "Unable to evaluate script: disconnected: not connected to DevTools\n"
|
||||||
closed_msg = "Unable to evaluate script: no such window: target window already closed"
|
closed_msg = "Unable to evaluate script: no such window: target window already closed"
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
import functools
|
||||||
|
import threading
|
||||||
import tkinter as tk
|
import tkinter as tk
|
||||||
from tkinter import StringVar, messagebox
|
from tkinter import StringVar, messagebox
|
||||||
from tkinter import ttk
|
from tkinter import ttk
|
||||||
|
@ -13,7 +15,7 @@ class CodeDialog(object):
|
||||||
mainframe.grid(column=0, row=0, )
|
mainframe.grid(column=0, row=0, )
|
||||||
self.label = ttk.Label(mainframe, text=label, width=10)
|
self.label = ttk.Label(mainframe, text=label, width=10)
|
||||||
self.input = ttk.Entry(mainframe, textvariable=self.code, width=20)
|
self.input = ttk.Entry(mainframe, textvariable=self.code, width=20)
|
||||||
self.button = ttk.Button(mainframe, text="ok", command=self.click_ok, width=5,)
|
self.button = ttk.Button(mainframe, text="ok", command=self.click_ok, width=5, )
|
||||||
self.label.grid(row=1, column=0)
|
self.label.grid(row=1, column=0)
|
||||||
self.input.grid(row=1, column=1)
|
self.input.grid(row=1, column=1)
|
||||||
self.button.grid(row=2, column=1, sticky=tk.E)
|
self.button.grid(row=2, column=1, sticky=tk.E)
|
||||||
|
@ -32,6 +34,63 @@ class CodeDialog(object):
|
||||||
self.root.destroy()
|
self.root.destroy()
|
||||||
|
|
||||||
|
|
||||||
|
class TkProgressBar(object):
|
||||||
|
def __init__(self, wait_func=None):
|
||||||
|
self._wait_func = wait_func
|
||||||
|
self._done = threading.Event()
|
||||||
|
self._root = None
|
||||||
|
|
||||||
|
def _check(self):
|
||||||
|
if self._done.isSet():
|
||||||
|
self._root.destroy()
|
||||||
|
return
|
||||||
|
self._root.after(100, self._check)
|
||||||
|
|
||||||
|
def stop(self):
|
||||||
|
self._done.set()
|
||||||
|
|
||||||
|
def show(self):
|
||||||
|
if not self._wait_func:
|
||||||
|
return
|
||||||
|
root = tk.Tk()
|
||||||
|
width, height = root.winfo_screenwidth(), root.winfo_screenheight()
|
||||||
|
root.geometry('%dx%d' % (width, height))
|
||||||
|
root.title('Progress')
|
||||||
|
root.grid()
|
||||||
|
pb_length = width - 20
|
||||||
|
pb = ttk.Progressbar(root, orient='horizontal', length=pb_length, mode='indeterminate')
|
||||||
|
pb.pack(expand=True, padx=10, pady=10)
|
||||||
|
|
||||||
|
self._root = root
|
||||||
|
self._root.after(60, pb.start)
|
||||||
|
self._root.after(100, self._check)
|
||||||
|
|
||||||
|
def _wait_run_func():
|
||||||
|
self._wait_func()
|
||||||
|
self.stop()
|
||||||
|
print('wait func done')
|
||||||
|
|
||||||
|
self._root.attributes("-topmost", True)
|
||||||
|
self._root.attributes("-fullscreen", True)
|
||||||
|
threading.Thread(target=_wait_run_func).start()
|
||||||
|
self._root.mainloop()
|
||||||
|
|
||||||
|
|
||||||
|
# progress bar 装饰器,用于显示进度动画
|
||||||
|
# 此方法会创建一个全屏的进度条窗口
|
||||||
|
def wrapper_progress_bar(func):
|
||||||
|
def inner(*args, **kwargs):
|
||||||
|
wait_func = functools.partial(func, *args, **kwargs)
|
||||||
|
tk_process = TkProgressBar(wait_func=wait_func)
|
||||||
|
tk_process.show()
|
||||||
|
|
||||||
|
return inner
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
code = CodeDialog(title="Code Dialog", label="Code: ").wait_string()
|
# code = CodeDialog(title="Code Dialog", label="Code: ").wait_string()
|
||||||
print(code)
|
# print(code)
|
||||||
|
import time
|
||||||
|
progress = TkProgressBar(wait_func=lambda: time.sleep(15))
|
||||||
|
progress.show()
|
||||||
|
print('end')
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
name: chrome
|
name: chrome
|
||||||
display_name: "{{ 'Chrome Browser' | trans }}"
|
display_name: "{{ 'Chrome Browser' | trans }}"
|
||||||
version: 0.6
|
version: 0.7
|
||||||
comment: "{{ 'Chrome Browser Open URL Page Address' | trans }}"
|
comment: "{{ 'Chrome Browser Open URL Page Address' | trans }}"
|
||||||
author: JumpServer Team
|
author: JumpServer Team
|
||||||
exec_type: python
|
exec_type: python
|
||||||
|
|
Loading…
Reference in New Issue