2024-04-23, add refrash at target time
							parent
							
								
									7f5ca0ad4c
								
							
						
					
					
						commit
						9b0d32918f
					
				|  | @ -44,7 +44,7 @@ except Exception as exc: | ||||||
|     print(exc) |     print(exc) | ||||||
|     pass |     pass | ||||||
| 
 | 
 | ||||||
| CONST_APP_VERSION = "MaxBot (2024.04.22)" | CONST_APP_VERSION = "MaxBot (2024.04.23)" | ||||||
| 
 | 
 | ||||||
| CONST_MAXBOT_ANSWER_ONLINE_FILE = "MAXBOT_ONLINE_ANSWER.txt" | CONST_MAXBOT_ANSWER_ONLINE_FILE = "MAXBOT_ONLINE_ANSWER.txt" | ||||||
| CONST_MAXBOT_CONFIG_FILE = "settings.json" | CONST_MAXBOT_CONFIG_FILE = "settings.json" | ||||||
|  | @ -10851,6 +10851,20 @@ def resize_window(driver, config_dict): | ||||||
|             driver.set_window_size(int(size_array[0]), int(size_array[1])) |             driver.set_window_size(int(size_array[0]), int(size_array[1])) | ||||||
|             driver.set_window_position(position_left, 30) |             driver.set_window_position(position_left, 30) | ||||||
| 
 | 
 | ||||||
|  | def check_refresh_datetime_occur(driver, target_time): | ||||||
|  |     is_refresh_datetime_sent = False | ||||||
|  | 
 | ||||||
|  |     system_clock_data = datetime.now() | ||||||
|  |     current_time = system_clock_data.strftime('%H:%M:%S') | ||||||
|  |     if target_time == current_time: | ||||||
|  |         try: | ||||||
|  |             driver.refresh() | ||||||
|  |             is_refresh_datetime_sent = True | ||||||
|  |             print("send refresh at time:", current_time) | ||||||
|  |         except Exception as exc: | ||||||
|  |             pass | ||||||
|  | 
 | ||||||
|  |     return is_refresh_datetime_sent | ||||||
| 
 | 
 | ||||||
| def main(args): | def main(args): | ||||||
|     config_dict = get_config_dict(args) |     config_dict = get_config_dict(args) | ||||||
|  | @ -10885,6 +10899,8 @@ def main(args): | ||||||
| 
 | 
 | ||||||
|     maxbot_last_reset_time = time.time() |     maxbot_last_reset_time = time.time() | ||||||
|     is_quit_bot = False |     is_quit_bot = False | ||||||
|  |     is_refresh_datetime_sent = False | ||||||
|  | 
 | ||||||
|     while True: |     while True: | ||||||
|         time.sleep(0.05) |         time.sleep(0.05) | ||||||
| 
 | 
 | ||||||
|  | @ -10936,6 +10952,9 @@ def main(args): | ||||||
|                 driver = reset_webdriver(driver, config_dict, url) |                 driver = reset_webdriver(driver, config_dict, url) | ||||||
|                 maxbot_last_reset_time = time.time() |                 maxbot_last_reset_time = time.time() | ||||||
| 
 | 
 | ||||||
|  |         if not is_refresh_datetime_sent: | ||||||
|  |             is_refresh_datetime_sent = check_refresh_datetime_occur(driver, config_dict["refresh_datetime"]) | ||||||
|  | 
 | ||||||
|         tixcraft_family = False |         tixcraft_family = False | ||||||
|         if 'tixcraft.com' in url: |         if 'tixcraft.com' in url: | ||||||
|             tixcraft_family = True |             tixcraft_family = True | ||||||
|  |  | ||||||
|  | @ -24,7 +24,7 @@ import webbrowser | ||||||
| 
 | 
 | ||||||
| import util | import util | ||||||
| 
 | 
 | ||||||
| CONST_APP_VERSION = "MaxBot (2024.04.22)" | CONST_APP_VERSION = "MaxBot (2024.04.23)" | ||||||
| 
 | 
 | ||||||
| CONST_MAXBOT_LAUNCHER_FILE = "config_launcher.json" | CONST_MAXBOT_LAUNCHER_FILE = "config_launcher.json" | ||||||
| CONST_MAXBOT_CONFIG_FILE = "settings.json" | CONST_MAXBOT_CONFIG_FILE = "settings.json" | ||||||
|  |  | ||||||
|  | @ -1,11 +1,5 @@ | ||||||
| # Demo (示範影片) | # Demo (示範影片) | ||||||
| 
 | 
 | ||||||
| ### 2024-04-14 |  | ||||||
| 
 |  | ||||||
| 網頁設定介面 |  | ||||||
| 
 |  | ||||||
| https://youtu.be/VDQFbweMLxU |  | ||||||
| 
 |  | ||||||
| ### 2024-04-11 | ### 2024-04-11 | ||||||
| 
 | 
 | ||||||
| 信用卡活動登錄自動填身份證號碼 | 信用卡活動登錄自動填身份證號碼 | ||||||
|  |  | ||||||
|  | @ -32,7 +32,7 @@ except Exception as exc: | ||||||
|     print(exc) |     print(exc) | ||||||
|     pass |     pass | ||||||
| 
 | 
 | ||||||
| CONST_APP_VERSION = "MaxBot (2024.04.22)" | CONST_APP_VERSION = "MaxBot (2024.04.23)" | ||||||
| 
 | 
 | ||||||
| CONST_MAXBOT_ANSWER_ONLINE_FILE = "MAXBOT_ONLINE_ANSWER.txt" | CONST_MAXBOT_ANSWER_ONLINE_FILE = "MAXBOT_ONLINE_ANSWER.txt" | ||||||
| CONST_MAXBOT_CONFIG_FILE = "settings.json" | CONST_MAXBOT_CONFIG_FILE = "settings.json" | ||||||
|  | @ -2152,6 +2152,23 @@ def nodriver_overwrite_prefs(conf): | ||||||
|     with open(state_filepath, 'w') as outfile: |     with open(state_filepath, 'w') as outfile: | ||||||
|         outfile.write(json_str) |         outfile.write(json_str) | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
|  | async def check_refresh_datetime_occur(tab, target_time): | ||||||
|  |     is_refresh_datetime_sent = False | ||||||
|  | 
 | ||||||
|  |     system_clock_data = datetime.now() | ||||||
|  |     current_time = system_clock_data.strftime('%H:%M:%S') | ||||||
|  |     if target_time == current_time: | ||||||
|  |         try: | ||||||
|  |             await tab.reload() | ||||||
|  |             is_refresh_datetime_sent = True | ||||||
|  |             print("send refresh at time:", current_time) | ||||||
|  |         except Exception as exc: | ||||||
|  |             pass | ||||||
|  | 
 | ||||||
|  |     return is_refresh_datetime_sent | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| async def main(args): | async def main(args): | ||||||
|     config_dict = get_config_dict(args) |     config_dict = get_config_dict(args) | ||||||
| 
 | 
 | ||||||
|  | @ -2205,6 +2222,8 @@ async def main(args): | ||||||
| 
 | 
 | ||||||
|     maxbot_last_reset_time = time.time() |     maxbot_last_reset_time = time.time() | ||||||
|     is_quit_bot = False |     is_quit_bot = False | ||||||
|  |     is_refresh_datetime_sent = False | ||||||
|  | 
 | ||||||
|     while True: |     while True: | ||||||
|         time.sleep(0.05) |         time.sleep(0.05) | ||||||
| 
 | 
 | ||||||
|  | @ -2250,6 +2269,9 @@ async def main(args): | ||||||
|             time.sleep(0.1) |             time.sleep(0.1) | ||||||
|             continue |             continue | ||||||
| 
 | 
 | ||||||
|  |         if not is_refresh_datetime_sent: | ||||||
|  |             is_refresh_datetime_sent = await check_refresh_datetime_occur(tab, config_dict["refresh_datetime"]) | ||||||
|  | 
 | ||||||
|         # for kktix.cc and kktix.com |         # for kktix.cc and kktix.com | ||||||
|         if 'kktix.c' in url: |         if 'kktix.c' in url: | ||||||
|             is_quit_bot = await nodriver_kktix_main(tab, url, config_dict) |             is_quit_bot = await nodriver_kktix_main(tab, url, config_dict) | ||||||
|  |  | ||||||
|  | @ -1,8 +1,9 @@ | ||||||
| { | { | ||||||
|     "homepage": "about:blank", |     "homepage": "about:blank", | ||||||
|     "browser": "chrome", |     "browser": "chrome", | ||||||
|     "language": "English", |     "language": "\u7e41\u9ad4\u4e2d\u6587", | ||||||
|     "ticket_number": 2, |     "ticket_number": 2, | ||||||
|  |     "refresh_datetime": "", | ||||||
|     "ocr_captcha": { |     "ocr_captcha": { | ||||||
|         "enable": true, |         "enable": true, | ||||||
|         "beta": true, |         "beta": true, | ||||||
|  | @ -82,7 +83,7 @@ | ||||||
|         "remote_url": "\"http://127.0.0.1:16888/\"", |         "remote_url": "\"http://127.0.0.1:16888/\"", | ||||||
|         "auto_reload_page_interval": 0.1, |         "auto_reload_page_interval": 0.1, | ||||||
|         "auto_reload_overheat_count": 4, |         "auto_reload_overheat_count": 4, | ||||||
|         "auto_reload_overheat_cd": 1, |         "auto_reload_overheat_cd": 1.0, | ||||||
|         "reset_browser_interval": 0, |         "reset_browser_interval": 0, | ||||||
|         "proxy_server_port": "", |         "proxy_server_port": "", | ||||||
|         "window_size": "480,1024", |         "window_size": "480,1024", | ||||||
|  |  | ||||||
|  | @ -39,7 +39,7 @@ try: | ||||||
| except Exception as exc: | except Exception as exc: | ||||||
|     pass |     pass | ||||||
| 
 | 
 | ||||||
| CONST_APP_VERSION = "MaxBot (2024.04.22)" | CONST_APP_VERSION = "MaxBot (2024.04.23)" | ||||||
| 
 | 
 | ||||||
| CONST_MAXBOT_ANSWER_ONLINE_FILE = "MAXBOT_ONLINE_ANSWER.txt" | CONST_MAXBOT_ANSWER_ONLINE_FILE = "MAXBOT_ONLINE_ANSWER.txt" | ||||||
| CONST_MAXBOT_CONFIG_FILE = "settings.json" | CONST_MAXBOT_CONFIG_FILE = "settings.json" | ||||||
|  | @ -104,6 +104,8 @@ def get_default_config(): | ||||||
|     config_dict["browser"] = "chrome" |     config_dict["browser"] = "chrome" | ||||||
|     config_dict["language"] = "English" |     config_dict["language"] = "English" | ||||||
|     config_dict["ticket_number"] = 2 |     config_dict["ticket_number"] = 2 | ||||||
|  |     config_dict["refresh_datetime"] = "" | ||||||
|  | 
 | ||||||
|     config_dict["ocr_captcha"] = {} |     config_dict["ocr_captcha"] = {} | ||||||
|     config_dict["ocr_captcha"]["enable"] = True |     config_dict["ocr_captcha"]["enable"] = True | ||||||
|     config_dict["ocr_captcha"]["beta"] = True |     config_dict["ocr_captcha"]["beta"] = True | ||||||
|  |  | ||||||
|  | @ -34,7 +34,7 @@ try: | ||||||
| except Exception as exc: | except Exception as exc: | ||||||
|     pass |     pass | ||||||
| 
 | 
 | ||||||
| CONST_APP_VERSION = "MaxBot (2024.04.22)" | CONST_APP_VERSION = "MaxBot (2024.04.23)" | ||||||
| 
 | 
 | ||||||
| CONST_MAXBOT_ANSWER_ONLINE_FILE = "MAXBOT_ONLINE_ANSWER.txt" | CONST_MAXBOT_ANSWER_ONLINE_FILE = "MAXBOT_ONLINE_ANSWER.txt" | ||||||
| CONST_MAXBOT_CONFIG_FILE = "settings.json" | CONST_MAXBOT_CONFIG_FILE = "settings.json" | ||||||
|  | @ -106,6 +106,7 @@ def load_translate(): | ||||||
|     en_us["browser"] = 'Browser' |     en_us["browser"] = 'Browser' | ||||||
|     en_us["language"] = 'Language' |     en_us["language"] = 'Language' | ||||||
|     en_us["ticket_number"] = 'Ticker Number' |     en_us["ticket_number"] = 'Ticker Number' | ||||||
|  |     en_us["refresh_datetime"] = 'Refresh at specified time' | ||||||
| 
 | 
 | ||||||
|     en_us["enable"] = 'Enable' |     en_us["enable"] = 'Enable' | ||||||
|     en_us["recommand_enable"] = "Recommended to enable" |     en_us["recommand_enable"] = "Recommended to enable" | ||||||
|  | @ -226,6 +227,7 @@ def load_translate(): | ||||||
|     zh_tw["browser"] = '瀏覽器' |     zh_tw["browser"] = '瀏覽器' | ||||||
|     zh_tw["language"] = '語言' |     zh_tw["language"] = '語言' | ||||||
|     zh_tw["ticket_number"] = '門票張數' |     zh_tw["ticket_number"] = '門票張數' | ||||||
|  |     zh_tw["refresh_datetime"] = '刷新在指定時間' | ||||||
| 
 | 
 | ||||||
|     zh_tw["enable"] = '啟用' |     zh_tw["enable"] = '啟用' | ||||||
|     zh_tw["recommand_enable"] = "建議啟用" |     zh_tw["recommand_enable"] = "建議啟用" | ||||||
|  | @ -344,6 +346,7 @@ def load_translate(): | ||||||
|     zh_cn["browser"] = '浏览器' |     zh_cn["browser"] = '浏览器' | ||||||
|     zh_cn["language"] = '语言' |     zh_cn["language"] = '语言' | ||||||
|     zh_cn["ticket_number"] = '门票张数' |     zh_cn["ticket_number"] = '门票张数' | ||||||
|  |     zh_cn["refresh_datetime"] = '刷新在指定时间' | ||||||
| 
 | 
 | ||||||
|     zh_cn["enable"] = '启用' |     zh_cn["enable"] = '启用' | ||||||
|     zh_cn["recommand_enable"] = "建议启用" |     zh_cn["recommand_enable"] = "建议启用" | ||||||
|  | @ -464,6 +467,7 @@ def load_translate(): | ||||||
|     ja_jp["browser"] = 'ブラウザ' |     ja_jp["browser"] = 'ブラウザ' | ||||||
|     ja_jp["language"] = '言語' |     ja_jp["language"] = '言語' | ||||||
|     ja_jp["ticket_number"] = '枚数' |     ja_jp["ticket_number"] = '枚数' | ||||||
|  |     ja_jp["refresh_datetime"] = '目標時間にリフレッシュ' | ||||||
| 
 | 
 | ||||||
|     ja_jp["enable"] = '有効' |     ja_jp["enable"] = '有効' | ||||||
|     ja_jp["recommand_enable"] = "有効化を推奨" |     ja_jp["recommand_enable"] = "有効化を推奨" | ||||||
|  | @ -591,6 +595,8 @@ def get_default_config(): | ||||||
|     config_dict["browser"] = "chrome" |     config_dict["browser"] = "chrome" | ||||||
|     config_dict["language"] = "English" |     config_dict["language"] = "English" | ||||||
|     config_dict["ticket_number"] = 2 |     config_dict["ticket_number"] = 2 | ||||||
|  |     config_dict["refresh_datetime"] = "" | ||||||
|  | 
 | ||||||
|     config_dict["ocr_captcha"] = {} |     config_dict["ocr_captcha"] = {} | ||||||
|     config_dict["ocr_captcha"]["enable"] = True |     config_dict["ocr_captcha"]["enable"] = True | ||||||
|     config_dict["ocr_captcha"]["beta"] = True |     config_dict["ocr_captcha"]["beta"] = True | ||||||
|  | @ -1023,6 +1029,7 @@ def btn_save_act(slience_mode=False): | ||||||
|             txt_resume_keyword_second.insert("1.0", config_dict["advanced"]["resume_keyword_second"].strip()) |             txt_resume_keyword_second.insert("1.0", config_dict["advanced"]["resume_keyword_second"].strip()) | ||||||
| 
 | 
 | ||||||
|     if is_all_data_correct: |     if is_all_data_correct: | ||||||
|  |         config_dict["refresh_datetime"] = txt_refresh_datetime.get().strip() | ||||||
|         config_dict["area_auto_select"]["enable"] = bool(chk_state_area_auto_select.get()) |         config_dict["area_auto_select"]["enable"] = bool(chk_state_area_auto_select.get()) | ||||||
|         config_dict["area_auto_select"]["mode"] = combo_area_auto_select_mode.get().strip() |         config_dict["area_auto_select"]["mode"] = combo_area_auto_select_mode.get().strip() | ||||||
| 
 | 
 | ||||||
|  | @ -1258,6 +1265,7 @@ def applyNewLanguage(): | ||||||
|     global lbl_browser |     global lbl_browser | ||||||
|     global lbl_language |     global lbl_language | ||||||
|     global lbl_ticket_number |     global lbl_ticket_number | ||||||
|  |     global lbl_refresh_datetime | ||||||
| 
 | 
 | ||||||
|     # for kktix |     # for kktix | ||||||
|     global lbl_auto_press_next_step_button |     global lbl_auto_press_next_step_button | ||||||
|  | @ -1347,6 +1355,7 @@ def applyNewLanguage(): | ||||||
|     lbl_browser.config(text=translate[language_code]["browser"]) |     lbl_browser.config(text=translate[language_code]["browser"]) | ||||||
|     lbl_language.config(text=translate[language_code]["language"]) |     lbl_language.config(text=translate[language_code]["language"]) | ||||||
|     lbl_ticket_number.config(text=translate[language_code]["ticket_number"]) |     lbl_ticket_number.config(text=translate[language_code]["ticket_number"]) | ||||||
|  |     lbl_refresh_datetime.config(text=translate[language_code]["refresh_datetime"]) | ||||||
| 
 | 
 | ||||||
|     lbl_auto_press_next_step_button.config(text=translate[language_code]["auto_press_next_step_button"]) |     lbl_auto_press_next_step_button.config(text=translate[language_code]["auto_press_next_step_button"]) | ||||||
|     lbl_auto_fill_ticket_number.config(text=translate[language_code]["auto_fill_ticket_number"]) |     lbl_auto_fill_ticket_number.config(text=translate[language_code]["auto_fill_ticket_number"]) | ||||||
|  | @ -1674,9 +1683,6 @@ def PreferenctTab(root, config_dict, language_code, UI_PADDING_X): | ||||||
|     print("python version:", platform.python_version()) |     print("python version:", platform.python_version()) | ||||||
|     print("platform:", platform.platform()) |     print("platform:", platform.platform()) | ||||||
| 
 | 
 | ||||||
|     global lbl_homepage |  | ||||||
|     global lbl_ticket_number |  | ||||||
| 
 |  | ||||||
|     global lbl_kktix |     global lbl_kktix | ||||||
|     global lbl_tixcraft |     global lbl_tixcraft | ||||||
| 
 | 
 | ||||||
|  | @ -1686,6 +1692,7 @@ def PreferenctTab(root, config_dict, language_code, UI_PADDING_X): | ||||||
|     group_row_count = 0 |     group_row_count = 0 | ||||||
| 
 | 
 | ||||||
|     # first row need padding Y |     # first row need padding Y | ||||||
|  |     global lbl_homepage | ||||||
|     lbl_homepage = Label(frame_group_header, text=translate[language_code]['homepage']) |     lbl_homepage = Label(frame_group_header, text=translate[language_code]['homepage']) | ||||||
|     lbl_homepage.grid(column=0, row=group_row_count, sticky = E) |     lbl_homepage.grid(column=0, row=group_row_count, sticky = E) | ||||||
| 
 | 
 | ||||||
|  | @ -1699,6 +1706,7 @@ def PreferenctTab(root, config_dict, language_code, UI_PADDING_X): | ||||||
| 
 | 
 | ||||||
|     group_row_count+=1 |     group_row_count+=1 | ||||||
| 
 | 
 | ||||||
|  |     global lbl_ticket_number | ||||||
|     lbl_ticket_number = Label(frame_group_header, text=translate[language_code]['ticket_number']) |     lbl_ticket_number = Label(frame_group_header, text=translate[language_code]['ticket_number']) | ||||||
|     lbl_ticket_number.grid(column=0, row=group_row_count, sticky = E) |     lbl_ticket_number.grid(column=0, row=group_row_count, sticky = E) | ||||||
| 
 | 
 | ||||||
|  | @ -1719,6 +1727,17 @@ def PreferenctTab(root, config_dict, language_code, UI_PADDING_X): | ||||||
| 
 | 
 | ||||||
|     frame_group_header.grid(column=0, row=row_count, sticky = W, padx=UI_PADDING_X) |     frame_group_header.grid(column=0, row=row_count, sticky = W, padx=UI_PADDING_X) | ||||||
| 
 | 
 | ||||||
|  |     group_row_count+=1 | ||||||
|  | 
 | ||||||
|  |     global lbl_refresh_datetime | ||||||
|  |     lbl_refresh_datetime = Label(frame_group_header, text=translate[language_code]['refresh_datetime']) | ||||||
|  |     lbl_refresh_datetime.grid(column=0, row=group_row_count, sticky = E) | ||||||
|  | 
 | ||||||
|  |     global txt_refresh_datetime | ||||||
|  |     txt_refresh_datetime_value = StringVar(frame_group_header, value=str(config_dict["refresh_datetime"])) | ||||||
|  |     txt_refresh_datetime = Entry(frame_group_header, width=30, textvariable = txt_refresh_datetime_value) | ||||||
|  |     txt_refresh_datetime.grid(column=1, row=group_row_count, sticky = W) | ||||||
|  | 
 | ||||||
|     row_count+=1 |     row_count+=1 | ||||||
| 
 | 
 | ||||||
|     # for sub group KKTix. |     # for sub group KKTix. | ||||||
|  | @ -3130,7 +3149,7 @@ def main_gui(): | ||||||
| 
 | 
 | ||||||
|     load_GUI(root, config_dict) |     load_GUI(root, config_dict) | ||||||
| 
 | 
 | ||||||
|     GUI_SIZE_WIDTH = 590 |     GUI_SIZE_WIDTH = 610 | ||||||
|     GUI_SIZE_HEIGHT = 645 |     GUI_SIZE_HEIGHT = 645 | ||||||
| 
 | 
 | ||||||
|     GUI_SIZE_MACOS = str(GUI_SIZE_WIDTH) + 'x' + str(GUI_SIZE_HEIGHT) |     GUI_SIZE_MACOS = str(GUI_SIZE_WIDTH) + 'x' + str(GUI_SIZE_HEIGHT) | ||||||
|  |  | ||||||
|  | @ -1 +1 @@ | ||||||
| {"homepage": "about:blank", "browser": "chrome", "language": "English", "ticket_number": 2, "ocr_captcha": {"enable": true, "beta": true, "force_submit": true, "image_source": "canvas"}, "webdriver_type": "undetected_chromedriver", "date_auto_select": {"enable": true, "date_keyword": "", "mode": "random"}, "area_auto_select": {"enable": true, "mode": "random", "area_keyword": ""}, "keyword_exclude": "\"\u8f2a\u6905\",\"\u8eab\u969c\",\"\u8eab\u5fc3 \u969c\u7919\",\"Restricted View\",\"\u71c8\u67f1\u906e\u853d\",\"\u8996\u7dda\u4e0d\u5b8c\u6574\"", "kktix": {"auto_press_next_step_button": true, "auto_fill_ticket_number": true, "max_dwell_time": 60}, "cityline": {"cityline_queue_retry": true}, "tixcraft": {"pass_date_is_sold_out": true, "auto_reload_coming_soon_page": true}, "advanced": {"play_sound": {"ticket": true, "order": true, "filename": "ding-dong.wav"}, "tixcraft_sid": "", "ibonqware": "", "facebook_account": "", "kktix_account": "", "fami_account": "", "cityline_account": "", "urbtix_account": "", "hkticketing_account": "", "kham_account": "", "ticket_account": "", "udn_account": "", "ticketplus_account": "", "facebook_password": "", "kktix_password": "", "fami_password": "", "urbtix_password": "", "cityline_password": "", "hkticketing_password": "", "kham_password": "", "ticket_password": "", "udn_password": "", "ticketplus_password": "", "facebook_password_plaintext": "", "kktix_password_plaintext": "", "fami_password_plaintext": "", "urbtix_password_plaintext": "", "cityline_password_plaintext": "", "hkticketing_password_plaintext": "", "kham_password_plaintext": "", "ticket_password_plaintext": "", "udn_password_plaintext": "", "ticketplus_password_plaintext": "", "chrome_extension": true, "disable_adjacent_seat": false, "hide_some_image": false, "block_facebook_network": false, "headless": false, "verbose": false, "auto_guess_options": true, "user_guess_string": "", "remote_url": "\"http://127.0.0.1:16888/\"", "auto_reload_page_interval": 0.1, "auto_reload_overheat_count": 4, "auto_reload_overheat_cd": 1, "reset_browser_interval": 0, "proxy_server_port": "", "window_size": "480,1024,0", "idle_keyword": "", "resume_keyword": "", "idle_keyword_second": "", "resume_keyword_second": ""}, "domain_filter": ["*.doubleclick.net/*", "*.googlesyndication.com/*", "*.ssp.hinet.net/*", "*a.amnet.tw/*", "*adx.c.appier.net/*", "*cdn.cookielaw.org/*", "*cdnjs.cloudflare.com/ajax/libs/clipboard.js/*", "*clarity.ms/*", "*cloudfront.com/*", "*cms.analytics.yahoo.com/*", "*e2elog.fetnet.net/*", "*fundingchoicesmessages.google.com/*", "*ghtinc.com/*", "*google-analytics.com/*", "*googletagmanager.com/*", "*googletagservices.com/*", "*img.uniicreative.com/*", "*lndata.com/*", "*match.adsrvr.org/*", "*onead.onevision.com.tw/*", "*play.google.com/log?*", "*popin.cc/*", "*rollbar.com/*", "*sb.scorecardresearch.com/*", "*tagtoo.co/*", "*ticketmaster.sg/js/adblock*", "*ticketmaster.sg/js/adblock.js*", "*tixcraft.com/js/analytics.js*", "*tixcraft.com/js/common.js*", "*tixcraft.com/js/custom.js*", "*treasuredata.com/*", "*www.youtube.com/youtubei/v1/player/heartbeat*"]} | {"homepage": "about:blank", "browser": "chrome", "language": "\u7e41\u9ad4\u4e2d\u6587", "ticket_number": 2, "refresh_datetime": "", "ocr_captcha": {"enable": true, "beta": true, "force_submit": true, "image_source": "canvas"}, "webdriver_type": "undetected_chromedriver", "date_auto_select": {"enable": true, "date_keyword": "", "mode": "random"}, "area_auto_select": {"enable": true, "mode": "random", "area_keyword": ""}, "keyword_exclude": "\"\u8f2a\u6905\",\"\u8eab\u969c\",\"\u8eab\u5fc3 \u969c\u7919\",\"Restricted View\",\"\u71c8\u67f1\u906e\u853d\",\"\u8996\u7dda\u4e0d\u5b8c\u6574\"", "kktix": {"auto_press_next_step_button": true, "auto_fill_ticket_number": true, "max_dwell_time": 60}, "cityline": {"cityline_queue_retry": true}, "tixcraft": {"pass_date_is_sold_out": true, "auto_reload_coming_soon_page": true}, "advanced": {"play_sound": {"ticket": true, "order": true, "filename": "ding-dong.wav"}, "tixcraft_sid": "", "ibonqware": "", "facebook_account": "", "kktix_account": "", "fami_account": "", "cityline_account": "", "urbtix_account": "", "hkticketing_account": "", "kham_account": "", "ticket_account": "", "udn_account": "", "ticketplus_account": "", "facebook_password": "", "kktix_password": "", "fami_password": "", "urbtix_password": "", "cityline_password": "", "hkticketing_password": "", "kham_password": "", "ticket_password": "", "udn_password": "", "ticketplus_password": "", "facebook_password_plaintext": "", "kktix_password_plaintext": "", "fami_password_plaintext": "", "urbtix_password_plaintext": "", "cityline_password_plaintext": "", "hkticketing_password_plaintext": "", "kham_password_plaintext": "", "ticket_password_plaintext": "", "udn_password_plaintext": "", "ticketplus_password_plaintext": "", "chrome_extension": true, "disable_adjacent_seat": false, "hide_some_image": false, "block_facebook_network": false, "headless": false, "verbose": false, "auto_guess_options": true, "user_guess_string": "", "remote_url": "\"http://127.0.0.1:16888/\"", "auto_reload_page_interval": 0.1, "auto_reload_overheat_count": 4, "auto_reload_overheat_cd": 1.0, "reset_browser_interval": 0, "proxy_server_port": "", "window_size": "480,1024,0", "idle_keyword": "", "resume_keyword": "", "idle_keyword_second": "", "resume_keyword_second": ""}, "domain_filter": ["*.doubleclick.net/*", "*.googlesyndication.com/*", "*.ssp.hinet.net/*", "*a.amnet.tw/*", "*adx.c.appier.net/*", "*cdn.cookielaw.org/*", "*cdnjs.cloudflare.com/ajax/libs/clipboard.js/*", "*clarity.ms/*", "*cloudfront.com/*", "*cms.analytics.yahoo.com/*", "*e2elog.fetnet.net/*", "*fundingchoicesmessages.google.com/*", "*ghtinc.com/*", "*google-analytics.com/*", "*googletagmanager.com/*", "*googletagservices.com/*", "*img.uniicreative.com/*", "*lndata.com/*", "*match.adsrvr.org/*", "*onead.onevision.com.tw/*", "*play.google.com/log?*", "*popin.cc/*", "*rollbar.com/*", "*sb.scorecardresearch.com/*", "*tagtoo.co/*", "*ticketmaster.sg/js/adblock*", "*ticketmaster.sg/js/adblock.js*", "*tixcraft.com/js/analytics.js*", "*tixcraft.com/js/common.js*", "*tixcraft.com/js/custom.js*", "*treasuredata.com/*", "*www.youtube.com/youtubei/v1/player/heartbeat*"]} | ||||||
|  | @ -1 +1 @@ | ||||||
| {"homepage": "about:blank", "browser": "chrome", "language": "English", "ticket_number": 2, "ocr_captcha": {"enable": true, "beta": true, "force_submit": true, "image_source": "canvas"}, "webdriver_type": "undetected_chromedriver", "date_auto_select": {"enable": true, "date_keyword": "", "mode": "random"}, "area_auto_select": {"enable": true, "mode": "random", "area_keyword": ""}, "keyword_exclude": "\"\u8f2a\u6905\",\"\u8eab\u969c\",\"\u8eab\u5fc3 \u969c\u7919\",\"Restricted View\",\"\u71c8\u67f1\u906e\u853d\",\"\u8996\u7dda\u4e0d\u5b8c\u6574\"", "kktix": {"auto_press_next_step_button": true, "auto_fill_ticket_number": true, "max_dwell_time": 60}, "cityline": {"cityline_queue_retry": true}, "tixcraft": {"pass_date_is_sold_out": true, "auto_reload_coming_soon_page": true}, "advanced": {"play_sound": {"ticket": true, "order": true, "filename": "ding-dong.wav"}, "tixcraft_sid": "", "ibonqware": "", "facebook_account": "", "kktix_account": "", "fami_account": "", "cityline_account": "", "urbtix_account": "", "hkticketing_account": "", "kham_account": "", "ticket_account": "", "udn_account": "", "ticketplus_account": "", "facebook_password": "", "kktix_password": "", "fami_password": "", "urbtix_password": "", "cityline_password": "", "hkticketing_password": "", "kham_password": "", "ticket_password": "", "udn_password": "", "ticketplus_password": "", "facebook_password_plaintext": "", "kktix_password_plaintext": "", "fami_password_plaintext": "", "urbtix_password_plaintext": "", "cityline_password_plaintext": "", "hkticketing_password_plaintext": "", "kham_password_plaintext": "", "ticket_password_plaintext": "", "udn_password_plaintext": "", "ticketplus_password_plaintext": "", "chrome_extension": true, "disable_adjacent_seat": false, "hide_some_image": false, "block_facebook_network": false, "headless": false, "verbose": false, "auto_guess_options": true, "user_guess_string": "", "remote_url": "\"http://127.0.0.1:16888/\"", "auto_reload_page_interval": 0.1, "auto_reload_overheat_count": 4, "auto_reload_overheat_cd": 1, "reset_browser_interval": 0, "proxy_server_port": "", "window_size": "480,1024,0", "idle_keyword": "", "resume_keyword": "", "idle_keyword_second": "", "resume_keyword_second": ""}} | {"homepage": "about:blank", "browser": "chrome", "language": "\u7e41\u9ad4\u4e2d\u6587", "ticket_number": 2, "refresh_datetime": "", "ocr_captcha": {"enable": true, "beta": true, "force_submit": true, "image_source": "canvas"}, "webdriver_type": "undetected_chromedriver", "date_auto_select": {"enable": true, "date_keyword": "", "mode": "random"}, "area_auto_select": {"enable": true, "mode": "random", "area_keyword": ""}, "keyword_exclude": "\"\u8f2a\u6905\",\"\u8eab\u969c\",\"\u8eab\u5fc3 \u969c\u7919\",\"Restricted View\",\"\u71c8\u67f1\u906e\u853d\",\"\u8996\u7dda\u4e0d\u5b8c\u6574\"", "kktix": {"auto_press_next_step_button": true, "auto_fill_ticket_number": true, "max_dwell_time": 60}, "cityline": {"cityline_queue_retry": true}, "tixcraft": {"pass_date_is_sold_out": true, "auto_reload_coming_soon_page": true}, "advanced": {"play_sound": {"ticket": true, "order": true, "filename": "ding-dong.wav"}, "tixcraft_sid": "", "ibonqware": "", "facebook_account": "", "kktix_account": "", "fami_account": "", "cityline_account": "", "urbtix_account": "", "hkticketing_account": "", "kham_account": "", "ticket_account": "", "udn_account": "", "ticketplus_account": "", "facebook_password": "", "kktix_password": "", "fami_password": "", "urbtix_password": "", "cityline_password": "", "hkticketing_password": "", "kham_password": "", "ticket_password": "", "udn_password": "", "ticketplus_password": "", "facebook_password_plaintext": "", "kktix_password_plaintext": "", "fami_password_plaintext": "", "urbtix_password_plaintext": "", "cityline_password_plaintext": "", "hkticketing_password_plaintext": "", "kham_password_plaintext": "", "ticket_password_plaintext": "", "udn_password_plaintext": "", "ticketplus_password_plaintext": "", "chrome_extension": true, "disable_adjacent_seat": false, "hide_some_image": false, "block_facebook_network": false, "headless": false, "verbose": false, "auto_guess_options": true, "user_guess_string": "", "remote_url": "\"http://127.0.0.1:16888/\"", "auto_reload_page_interval": 0.1, "auto_reload_overheat_count": 4, "auto_reload_overheat_cd": 1.0, "reset_browser_interval": 0, "proxy_server_port": "", "window_size": "480,1024,0", "idle_keyword": "", "resume_keyword": "", "idle_keyword_second": "", "resume_keyword_second": ""}} | ||||||
|  | @ -176,6 +176,19 @@ | ||||||
|             </select> |             </select> | ||||||
|           </div> |           </div> | ||||||
|         </div> |         </div> | ||||||
|  | 
 | ||||||
|  |         <div class="row mb-3"> | ||||||
|  |           <label for="refresh_datetime" class="col-sm-2 col-form-label">刷新在指定時間</label> | ||||||
|  |           <div class="col-sm-10"> | ||||||
|  |             <input class="form-control" id="refresh_datetime" value="" /> | ||||||
|  | 
 | ||||||
|  |             <div class="bd-callout bd-callout-info"> | ||||||
|  |               <strong>提示:</strong> | ||||||
|  |                 時間格式 <code>HH:MM:SS</code> (小時:分鐘:秒數)。在設定介面修改並存檔,並不會套用在「已經」開出的瀏覽器,只會套用在存檔之後按「搶票」所開出的瀏覽器。 | ||||||
|  |             </div> | ||||||
|  |           </div> | ||||||
|  |         </div> | ||||||
|  | 
 | ||||||
|         <div class="row mb-3"> |         <div class="row mb-3"> | ||||||
|           <label for="date_select_mode" class="col-sm-2 col-form-label">日期排序方式</label> |           <label for="date_select_mode" class="col-sm-2 col-form-label">日期排序方式</label> | ||||||
|           <div class="col-sm-10"> |           <div class="col-sm-10"> | ||||||
|  |  | ||||||
|  | @ -10,6 +10,7 @@ const resume_button = document.querySelector('#resume_btn'); | ||||||
| // preference
 | // preference
 | ||||||
| const homepage = document.querySelector('#homepage'); | const homepage = document.querySelector('#homepage'); | ||||||
| const ticket_number = document.querySelector('#ticket_number'); | const ticket_number = document.querySelector('#ticket_number'); | ||||||
|  | const refresh_datetime = document.querySelector('#refresh_datetime'); | ||||||
| const date_select_mode = document.querySelector('#date_select_mode'); | const date_select_mode = document.querySelector('#date_select_mode'); | ||||||
| const date_keyword = document.querySelector('#date_keyword'); | const date_keyword = document.querySelector('#date_keyword'); | ||||||
| const area_select_mode = document.querySelector('#area_select_mode'); | const area_select_mode = document.querySelector('#area_select_mode'); | ||||||
|  | @ -95,6 +96,7 @@ function load_settins_to_form(settings) | ||||||
|         // preference
 |         // preference
 | ||||||
|         homepage.value = settings.homepage; |         homepage.value = settings.homepage; | ||||||
|         ticket_number.value = settings.ticket_number; |         ticket_number.value = settings.ticket_number; | ||||||
|  |         refresh_datetime.value = settings.refresh_datetime; | ||||||
|         date_select_mode.value = settings.date_auto_select.mode; |         date_select_mode.value = settings.date_auto_select.mode; | ||||||
|         date_keyword.value = settings.date_auto_select.date_keyword; |         date_keyword.value = settings.date_auto_select.date_keyword; | ||||||
|         if(date_keyword.value=='""') { |         if(date_keyword.value=='""') { | ||||||
|  | @ -328,6 +330,7 @@ function save_changes_to_dict(silent_flag) | ||||||
|             // preference
 |             // preference
 | ||||||
|             settings.homepage = homepage.value; |             settings.homepage = homepage.value; | ||||||
|             settings.ticket_number = ticket_number_value; |             settings.ticket_number = ticket_number_value; | ||||||
|  |             settings.refresh_datetime = refresh_datetime.value; | ||||||
|             settings.date_auto_select.mode = date_select_mode.value; |             settings.date_auto_select.mode = date_select_mode.value; | ||||||
| 
 | 
 | ||||||
|             let date_keyword_string = date_keyword.value; |             let date_keyword_string = date_keyword.value; | ||||||
|  | @ -507,7 +510,7 @@ function maxbot_save() | ||||||
| function check_unsaved_fields() | function check_unsaved_fields() | ||||||
| { | { | ||||||
|     if(settings) { |     if(settings) { | ||||||
|         const field_list_basic = ["homepage","ticket_number","browser","webdriver_type"]; |         const field_list_basic = ["homepage","ticket_number","refresh_datetime","browser","webdriver_type"]; | ||||||
|         field_list_basic.forEach(f => { |         field_list_basic.forEach(f => { | ||||||
|             const field = document.querySelector('#'+f); |             const field = document.querySelector('#'+f); | ||||||
|             if(field.value != settings[f]) { |             if(field.value != settings[f]) { | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue