2023-12-28,update for kktix
							parent
							
								
									d7417818aa
								
							
						
					
					
						commit
						01c776a1da
					
				|  | @ -54,7 +54,7 @@ import webbrowser | |||
| 
 | ||||
| import chromedriver_autoinstaller | ||||
| 
 | ||||
| CONST_APP_VERSION = "MaxBot (2023.12.27)" | ||||
| CONST_APP_VERSION = "MaxBot (2023.12.28)" | ||||
| 
 | ||||
| CONST_MAXBOT_CONFIG_FILE = "settings.json" | ||||
| CONST_MAXBOT_LAST_URL_FILE = "MAXBOT_LAST_URL.txt" | ||||
|  | @ -1856,8 +1856,8 @@ def tixcraft_date_auto_select(driver, url, config_dict, domain_name): | |||
|         show_debug_message = True | ||||
| 
 | ||||
|     # read config. | ||||
|     auto_select_mode = config_dict["tixcraft"]["date_auto_select"]["mode"] | ||||
|     date_keyword = config_dict["tixcraft"]["date_auto_select"]["date_keyword"].strip() | ||||
|     auto_select_mode = config_dict["date_auto_select"]["mode"] | ||||
|     date_keyword = config_dict["date_auto_select"]["date_keyword"].strip() | ||||
|     pass_date_is_sold_out_enable = config_dict["tixcraft"]["pass_date_is_sold_out"] | ||||
|     auto_reload_coming_soon_page_enable = config_dict["tixcraft"]["auto_reload_coming_soon_page"] | ||||
| 
 | ||||
|  | @ -2090,8 +2090,8 @@ def ticketmaster_date_auto_select(driver, url, config_dict, domain_name): | |||
|         show_debug_message = True | ||||
| 
 | ||||
|     # read config. | ||||
|     auto_select_mode = config_dict["tixcraft"]["date_auto_select"]["mode"] | ||||
|     date_keyword = config_dict["tixcraft"]["date_auto_select"]["date_keyword"].strip() | ||||
|     auto_select_mode = config_dict["date_auto_select"]["mode"] | ||||
|     date_keyword = config_dict["date_auto_select"]["date_keyword"].strip() | ||||
|     # TODO: implement this feature. | ||||
|     date_keyword_and = "" | ||||
|     pass_date_is_sold_out_enable = config_dict["tixcraft"]["pass_date_is_sold_out"] | ||||
|  | @ -3912,11 +3912,12 @@ def kktix_check_agree_checkbox(driver, config_dict): | |||
|     if config_dict["advanced"]["verbose"]: | ||||
|         show_debug_message = True | ||||
| 
 | ||||
|     is_need_refresh = False | ||||
|     is_finish_checkbox_click = False | ||||
| 
 | ||||
|     agree_label = None | ||||
|     agree_checkbox = None | ||||
|     try: | ||||
|         agree_label = driver.find_element(By.CSS_SELECTOR, 'label[for="person_agree_terms"]') | ||||
|         agree_checkbox = driver.find_element(By.CSS_SELECTOR, '#person_agree_terms') | ||||
|     except Exception as exc: | ||||
|         print("find person_agree_terms checkbox Exception") | ||||
|  | @ -3924,15 +3925,24 @@ def kktix_check_agree_checkbox(driver, config_dict): | |||
|             print(exc) | ||||
|         pass | ||||
| 
 | ||||
|     if not agree_checkbox is None: | ||||
|     is_dom_ready = False | ||||
|     is_need_refresh = False | ||||
|     if not agree_checkbox is None and not agree_label is None: | ||||
|         checkbox_html = "" | ||||
|         try: | ||||
|             checkbox_html = agree_label.get_attribute('innerHTML').strip() | ||||
|             #print("agree_checkbox html:", checkbox_html) | ||||
|             if len(checkbox_html) > 0: | ||||
|                 if not "{{'new.i_read_and_agree_to'" in checkbox_html: | ||||
|                     is_dom_ready = True | ||||
|         except Exception as e: | ||||
|             #print(e) | ||||
|             pass | ||||
| 
 | ||||
|         is_finish_checkbox_click = force_check_checkbox(driver, agree_checkbox) | ||||
|     else: | ||||
|         is_need_refresh = True | ||||
| 
 | ||||
|     if is_need_refresh: | ||||
|         print("find person_agree_terms checkbox fail, do refresh page.") | ||||
| 
 | ||||
|     return is_need_refresh, is_finish_checkbox_click | ||||
|     #print("status:", is_dom_ready, is_finish_checkbox_click) | ||||
|     return is_dom_ready, is_finish_checkbox_click | ||||
| 
 | ||||
| def check_checkbox(driver, by, query): | ||||
|     show_debug_message = True       # debug. | ||||
|  | @ -4669,6 +4679,7 @@ let reload=false; | |||
| console.log(data.inventory.registerStatus); | ||||
| if(data.inventory.registerStatus=='OUT_OF_STOCK') {reload=true;} | ||||
| if(data.inventory.registerStatus=='COMING_SOON') {reload=true;} | ||||
| if(data.inventory.registerStatus=='SOLD_OUT') {reload=true;} | ||||
| console.log(reload); | ||||
| if(reload) {location.reload();} | ||||
| } | ||||
|  | @ -4695,45 +4706,18 @@ if (typeof $.kkUser.checked_status_register_code === 'undefined') { | |||
| 
 | ||||
|     registerStatus = None | ||||
|     if is_match_event_code: | ||||
|         registerStatus = kktix_get_registerStatus(driver, event_code) | ||||
|         kktix_get_registerStatus(driver, event_code) | ||||
|     return registerStatus | ||||
| 
 | ||||
| def kktix_reg_auto_reload(driver, url, config_dict, kktix_register_status_last): | ||||
|     registerStatus = kktix_register_status_last | ||||
| 
 | ||||
| def kktix_reg_auto_reload(driver, url, config_dict): | ||||
|     # auto reload javascrit code at chrome extension. | ||||
|     is_need_refresh = False | ||||
|     if config_dict["browser"] in ["firefox", "edge", "safari"]: | ||||
|         if not is_need_refresh: | ||||
|             if registerStatus is None: | ||||
|                 # current version, change refresh event from selenium to javascript. | ||||
|                 registerStatus = kktix_check_register_status(driver, url) | ||||
|                 # for request solution, refresh on selenium. | ||||
|                 if not registerStatus is None: | ||||
|                     print("registerStatus:", registerStatus) | ||||
|                     # OUT_OF_STOCK | ||||
|                     if registerStatus != 'IN_STOCK': | ||||
|                         is_need_refresh = True | ||||
|         kktix_check_register_status(driver, url) | ||||
| 
 | ||||
|     is_finish_checkbox_click = False | ||||
|     if not is_need_refresh: | ||||
|         is_need_refresh, is_finish_checkbox_click = kktix_check_agree_checkbox(driver, config_dict) | ||||
|     if not is_finish_checkbox_click: | ||||
|         # retry again. | ||||
|         is_need_refresh, is_finish_checkbox_click = kktix_check_agree_checkbox(driver, config_dict) | ||||
|     is_dom_ready, is_finish_checkbox_click = kktix_check_agree_checkbox(driver, config_dict) | ||||
| 
 | ||||
|     if is_need_refresh: | ||||
|         try: | ||||
|             print("try to refresh page...") | ||||
|             driver.refresh() | ||||
|         except Exception as exc: | ||||
|             #print("refresh fail") | ||||
|             pass | ||||
| 
 | ||||
|         if config_dict["advanced"]["auto_reload_random_delay"]: | ||||
|             time.sleep(random.randint(0,CONST_AUTO_RELOAD_RANDOM_DELAY_MAX_SECOND)) | ||||
| 
 | ||||
|     return is_need_refresh, is_finish_checkbox_click | ||||
|     return is_dom_ready, is_finish_checkbox_click | ||||
| 
 | ||||
| 
 | ||||
| # PURPOSE: get target area list. | ||||
|  | @ -4745,7 +4729,7 @@ def get_fami_target_area(driver, config_dict, area_keyword_item): | |||
|     if config_dict["advanced"]["verbose"]: | ||||
|         show_debug_message = True | ||||
| 
 | ||||
|     date_keyword = config_dict["tixcraft"]["date_auto_select"]["date_keyword"].strip() | ||||
|     date_keyword = config_dict["date_auto_select"]["date_keyword"].strip() | ||||
|     date_keyword = format_keyword_string(date_keyword) | ||||
| 
 | ||||
|     auto_select_mode = config_dict["area_auto_select"]["mode"] | ||||
|  | @ -4962,8 +4946,8 @@ def fami_date_auto_select(driver, config_dict, last_activity_url): | |||
|     if config_dict["advanced"]["verbose"]: | ||||
|         show_debug_message = True | ||||
| 
 | ||||
|     auto_select_mode = config_dict["tixcraft"]["date_auto_select"]["mode"] | ||||
|     date_keyword = config_dict["tixcraft"]["date_auto_select"]["date_keyword"].strip() | ||||
|     auto_select_mode = config_dict["date_auto_select"]["mode"] | ||||
|     date_keyword = config_dict["date_auto_select"]["date_keyword"].strip() | ||||
|     auto_reload_coming_soon_page_enable = config_dict["tixcraft"]["auto_reload_coming_soon_page"] | ||||
| 
 | ||||
|     if show_debug_message: | ||||
|  | @ -5583,8 +5567,8 @@ def urbtix_purchase_ticket(driver, config_dict): | |||
|     show_debug_message = True       # debug. | ||||
|     show_debug_message = False      # online | ||||
| 
 | ||||
|     date_auto_select_mode = config_dict["tixcraft"]["date_auto_select"]["mode"] | ||||
|     date_keyword = config_dict["tixcraft"]["date_auto_select"]["date_keyword"].strip() | ||||
|     date_auto_select_mode = config_dict["date_auto_select"]["mode"] | ||||
|     date_keyword = config_dict["date_auto_select"]["date_keyword"].strip() | ||||
|     auto_reload_coming_soon_page_enable = config_dict["tixcraft"]["auto_reload_coming_soon_page"] | ||||
| 
 | ||||
|     if show_debug_message: | ||||
|  | @ -6336,8 +6320,8 @@ def cityline_purchase_button_press(driver, config_dict): | |||
|         show_debug_message = True | ||||
| 
 | ||||
| 
 | ||||
|     date_auto_select_mode = config_dict["tixcraft"]["date_auto_select"]["mode"] | ||||
|     date_keyword = config_dict["tixcraft"]["date_auto_select"]["date_keyword"].strip() | ||||
|     date_auto_select_mode = config_dict["date_auto_select"]["mode"] | ||||
|     date_keyword = config_dict["date_auto_select"]["date_keyword"].strip() | ||||
|     auto_reload_coming_soon_page_enable = config_dict["tixcraft"]["auto_reload_coming_soon_page"] | ||||
| 
 | ||||
|     if show_debug_message: | ||||
|  | @ -6462,8 +6446,8 @@ def ibon_date_auto_select(driver, config_dict): | |||
|     if config_dict["advanced"]["verbose"]: | ||||
|         show_debug_message = True | ||||
| 
 | ||||
|     auto_select_mode = config_dict["tixcraft"]["date_auto_select"]["mode"] | ||||
|     date_keyword = config_dict["tixcraft"]["date_auto_select"]["date_keyword"].strip() | ||||
|     auto_select_mode = config_dict["date_auto_select"]["mode"] | ||||
|     date_keyword = config_dict["date_auto_select"]["date_keyword"].strip() | ||||
|     auto_reload_coming_soon_page_enable = config_dict["tixcraft"]["auto_reload_coming_soon_page"] | ||||
| 
 | ||||
|     if show_debug_message: | ||||
|  | @ -7631,14 +7615,14 @@ def tixcraft_main(driver, url, config_dict, tixcraft_dict, ocr, Captcha_Browser) | |||
|     is_date_selected = False | ||||
|     if "/activity/game/" in url: | ||||
|         tixcraft_dict["start_time"] = time.time() | ||||
|         if config_dict["tixcraft"]["date_auto_select"]["enable"]: | ||||
|         if config_dict["date_auto_select"]["enable"]: | ||||
|             domain_name = url.split('/')[2] | ||||
|             is_date_selected = tixcraft_date_auto_select(driver, url, config_dict, domain_name) | ||||
| 
 | ||||
|     if '/artist/' in url and 'ticketmaster.com' in url: | ||||
|         tixcraft_dict["start_time"] = time.time() | ||||
|         if len(url.split('/'))==6: | ||||
|             if config_dict["tixcraft"]["date_auto_select"]["enable"]: | ||||
|             if config_dict["date_auto_select"]["enable"]: | ||||
|                 domain_name = url.split('/')[2] | ||||
|                 is_date_selected = ticketmaster_date_auto_select(driver, url, config_dict, domain_name) | ||||
| 
 | ||||
|  | @ -7747,20 +7731,21 @@ def kktix_main(driver, url, config_dict, kktix_dict): | |||
|     if not is_url_contain_sign_in: | ||||
|         if '/registrations/new' in url: | ||||
|             kktix_dict["start_time"] = time.time() | ||||
|             is_need_refresh = False | ||||
|             is_finish_checkbox_click = False | ||||
|             is_need_refresh, is_finish_checkbox_click = kktix_reg_auto_reload(driver, url, config_dict, kktix_dict["kktix_register_status_last"]) | ||||
| 
 | ||||
|             if is_need_refresh: | ||||
|             is_dom_ready = False | ||||
|             is_finish_checkbox_click = False | ||||
|             is_dom_ready, is_finish_checkbox_click = kktix_reg_auto_reload(driver, url, config_dict) | ||||
| 
 | ||||
|             if not is_dom_ready: | ||||
|                 # reset answer fail list. | ||||
|                 kktix_dict["fail_list"] = [] | ||||
|                 kktix_dict["captcha_sound_played"] = False | ||||
|                 kktix_dict["kktix_register_status_last"] = None | ||||
|             else: | ||||
|                 # check is able to buy. | ||||
|                 if config_dict["kktix"]["auto_fill_ticket_number"]: | ||||
|                     kktix_dict["fail_list"], kktix_dict["captcha_sound_played"] = kktix_reg_new_main(driver, config_dict, kktix_dict["fail_list"], kktix_dict["captcha_sound_played"], is_finish_checkbox_click) | ||||
|                     kktix_dict["done_time"] = time.time() | ||||
| 
 | ||||
|         else: | ||||
|             is_event_page = False | ||||
|             if '/events/' in url: | ||||
|  | @ -7777,15 +7762,15 @@ def kktix_main(driver, url, config_dict, kktix_dict): | |||
|             # reset answer fail list. | ||||
|             kktix_dict["fail_list"] = [] | ||||
|             kktix_dict["captcha_sound_played"] = False | ||||
|             kktix_dict["kktix_register_status_last"] = None | ||||
| 
 | ||||
|     if '/events/' in url and '/registrations/' in url and "-" in url: | ||||
|         if not kktix_dict["start_time"] is None: | ||||
|             if not kktix_dict["done_time"] is None: | ||||
|                 bot_elapsed_time = kktix_dict["done_time"] - kktix_dict["start_time"] | ||||
|                 if kktix_dict["elapsed_time"] != bot_elapsed_time: | ||||
|                     print("bot elapsed time:", "{:.3f}".format(bot_elapsed_time)) | ||||
|                 kktix_dict["elapsed_time"] = bot_elapsed_time | ||||
|         if not '/registrations/new' in url: | ||||
|             if not kktix_dict["start_time"] is None: | ||||
|                 if not kktix_dict["done_time"] is None: | ||||
|                     bot_elapsed_time = kktix_dict["done_time"] - kktix_dict["start_time"] | ||||
|                     if kktix_dict["elapsed_time"] != bot_elapsed_time: | ||||
|                         print("bot elapsed time:", "{:.3f}".format(bot_elapsed_time)) | ||||
|                     kktix_dict["elapsed_time"] = bot_elapsed_time | ||||
| 
 | ||||
|         if config_dict["advanced"]["headless"]: | ||||
|             if not kktix_dict["is_popup_checkout"]: | ||||
|  | @ -7828,7 +7813,7 @@ def famiticket_main(driver, url, config_dict, fami_dict): | |||
|         fami_dict["fail_list"] = [] | ||||
| 
 | ||||
|     if '/Sales/Home/Index/' in url: | ||||
|         if config_dict["tixcraft"]["date_auto_select"]["enable"]: | ||||
|         if config_dict["date_auto_select"]["enable"]: | ||||
|             is_date_assign_by_bot = fami_home_auto_select(driver, config_dict, fami_dict["last_activity"]) | ||||
| 
 | ||||
|     return fami_dict | ||||
|  | @ -8184,7 +8169,7 @@ def urbtix_main(driver, url, config_dict): | |||
| 
 | ||||
|     # https://www.urbtix.hk/event-detail/00000/ | ||||
|     if '/event-detail/' in url: | ||||
|         if config_dict["tixcraft"]["date_auto_select"]["enable"]: | ||||
|         if config_dict["date_auto_select"]["enable"]: | ||||
|             is_event_page = False | ||||
|             if len(url.split('/'))<=6: | ||||
|                 is_event_page = True | ||||
|  | @ -8349,7 +8334,7 @@ def cityline_main(driver, url, config_dict): | |||
|         if is_modal_dialog_popup: | ||||
|             print("is_modal_dialog_popup! skip...") | ||||
|         else: | ||||
|             if config_dict["tixcraft"]["date_auto_select"]["enable"]: | ||||
|             if config_dict["date_auto_select"]["enable"]: | ||||
|                 cityline_purchase_button_press(driver, config_dict) | ||||
| 
 | ||||
|     if '/performance?' in url: | ||||
|  | @ -8705,7 +8690,7 @@ def ibon_main(driver, url, config_dict, ibon_dict, ocr, Captcha_Browser): | |||
|                 is_event_page = True | ||||
| 
 | ||||
|             if is_event_page: | ||||
|                 if config_dict["tixcraft"]["date_auto_select"]["enable"]: | ||||
|                 if config_dict["date_auto_select"]["enable"]: | ||||
|                     is_match_target_feature = True | ||||
|                     is_date_assign_by_bot = ibon_date_auto_select(driver, config_dict) | ||||
| 
 | ||||
|  | @ -8936,8 +8921,8 @@ def hkticketing_date_assign(driver, config_dict): | |||
|     if config_dict["advanced"]["verbose"]: | ||||
|         show_debug_message = True | ||||
| 
 | ||||
|     auto_select_mode = config_dict["tixcraft"]["date_auto_select"]["mode"] | ||||
|     date_keyword = config_dict["tixcraft"]["date_auto_select"]["date_keyword"].strip() | ||||
|     auto_select_mode = config_dict["date_auto_select"]["mode"] | ||||
|     date_keyword = config_dict["date_auto_select"]["date_keyword"].strip() | ||||
| 
 | ||||
|     if show_debug_message: | ||||
|         print("date_keyword:", date_keyword) | ||||
|  | @ -9791,7 +9776,7 @@ def softix_powerweb_main(driver, url, config_dict, hkticketing_dict): | |||
|                 is_event_page = True | ||||
| 
 | ||||
|             if is_event_page: | ||||
|                 if config_dict["tixcraft"]["date_auto_select"]["enable"]: | ||||
|                 if config_dict["date_auto_select"]["enable"]: | ||||
|                     if not hkticketing_dict["is_date_submiting"]: | ||||
|                         hkticketing_dict["is_date_submiting"], hkticketing_dict["fail_list"] = hkticketing_date_auto_select(driver, config_dict, hkticketing_dict["fail_list"]) | ||||
|                         pass | ||||
|  | @ -9844,8 +9829,8 @@ def hkam_date_auto_select(driver, domain_name, config_dict): | |||
|     if config_dict["advanced"]["verbose"]: | ||||
|         show_debug_message = True | ||||
| 
 | ||||
|     auto_select_mode = config_dict["tixcraft"]["date_auto_select"]["mode"] | ||||
|     date_keyword = config_dict["tixcraft"]["date_auto_select"]["date_keyword"].strip() | ||||
|     auto_select_mode = config_dict["date_auto_select"]["mode"] | ||||
|     date_keyword = config_dict["date_auto_select"]["date_keyword"].strip() | ||||
|     auto_reload_coming_soon_page_enable = config_dict["tixcraft"]["auto_reload_coming_soon_page"] | ||||
| 
 | ||||
|     if show_debug_message: | ||||
|  | @ -10703,11 +10688,11 @@ def kham_main(driver, url, config_dict, ocr, Captcha_Browser): | |||
|             is_event_page = True | ||||
| 
 | ||||
|         if is_event_page: | ||||
|             if config_dict["tixcraft"]["date_auto_select"]["enable"]: | ||||
|             if config_dict["date_auto_select"]["enable"]: | ||||
|                 kham_product(driver, domain_name, config_dict) | ||||
| 
 | ||||
|     if '/application/utk01/utk0101_.aspx' in url.lower(): | ||||
|         date_auto_select_enable = config_dict["tixcraft"]["date_auto_select"]["enable"] | ||||
|         date_auto_select_enable = config_dict["date_auto_select"]["enable"] | ||||
|         if date_auto_select_enable: | ||||
|             kham_product(driver, domain_name, config_dict) | ||||
| 
 | ||||
|  | @ -10748,7 +10733,7 @@ def kham_main(driver, url, config_dict, ocr, Captcha_Browser): | |||
|                     is_button_clicked = force_press_button(driver, By.CSS_SELECTOR,'#buttonNext') | ||||
|             else: | ||||
|                 # layout format #2 | ||||
|                 date_auto_select_enable = config_dict["tixcraft"]["date_auto_select"]["enable"] | ||||
|                 date_auto_select_enable = config_dict["date_auto_select"]["enable"] | ||||
|                 if date_auto_select_enable: | ||||
|                     kham_product(driver, domain_name, config_dict) | ||||
| 
 | ||||
|  | @ -10910,8 +10895,8 @@ def ticketplus_date_auto_select(driver, config_dict): | |||
|         show_debug_message = True | ||||
| 
 | ||||
|     # read config. | ||||
|     auto_select_mode = config_dict["tixcraft"]["date_auto_select"]["mode"] | ||||
|     date_keyword = config_dict["tixcraft"]["date_auto_select"]["date_keyword"].strip() | ||||
|     auto_select_mode = config_dict["date_auto_select"]["mode"] | ||||
|     date_keyword = config_dict["date_auto_select"]["date_keyword"].strip() | ||||
|     # TODO: implement this feature. | ||||
|     date_keyword_and = "" | ||||
|     pass_date_is_sold_out_enable = config_dict["tixcraft"]["pass_date_is_sold_out"] | ||||
|  | @ -12098,7 +12083,7 @@ def ticketplus_main(driver, url, config_dict, ocr, Captcha_Browser, ticketplus_d | |||
|             is_button_pressed = ticketplus_accept_other_activity(driver) | ||||
|             #print("is accept button pressed:", is_button_pressed) | ||||
| 
 | ||||
|             if config_dict["tixcraft"]["date_auto_select"]["enable"]: | ||||
|             if config_dict["date_auto_select"]["enable"]: | ||||
|                 ticketplus_date_auto_select(driver, config_dict) | ||||
| 
 | ||||
|     #https://ticketplus.com.tw/order/XXX/OOO | ||||
|  | @ -12262,7 +12247,6 @@ def main(args): | |||
|     kktix_dict = {} | ||||
|     kktix_dict["fail_list"]=[] | ||||
|     kktix_dict["captcha_sound_played"] = False | ||||
|     kktix_dict["kktix_register_status_last"] = None | ||||
|     kktix_dict["start_time"]=None | ||||
|     kktix_dict["done_time"]=None | ||||
|     kktix_dict["elapsed_time"]=None | ||||
|  |  | |||
|  | @ -22,7 +22,7 @@ import sys | |||
| import threading | ||||
| import webbrowser | ||||
| 
 | ||||
| CONST_APP_VERSION = "MaxBot (2023.12.27)" | ||||
| CONST_APP_VERSION = "MaxBot (2023.12.28)" | ||||
| 
 | ||||
| CONST_MAXBOT_LAUNCHER_FILE = "config_launcher.json" | ||||
| CONST_MAXBOT_CONFIG_FILE = "settings.json" | ||||
|  |  | |||
|  | @ -1 +1 @@ | |||
| {"homepage": "https://tixcraft.com", "browser": "chrome", "language": "\u7e41\u9ad4\u4e2d\u6587", "ticket_number": 2, "ocr_captcha": {"enable": true, "beta": true, "force_submit": true, "image_source": "canvas"}, "webdriver_type": "undetected_chromedriver", "kktix": {"auto_press_next_step_button": true, "auto_fill_ticket_number": true}, "tixcraft": {"date_auto_select": {"enable": true, "date_keyword": "", "mode": "random"}, "pass_date_is_sold_out": true, "auto_reload_coming_soon_page": true}, "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\"", "advanced": {"play_captcha_sound": {"enable": 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": "", "adblock_plus_enable": false, "disable_adjacent_seat": false, "hide_some_image": true, "block_facebook_network": false, "headless": false, "verbose": false, "auto_guess_options": true, "user_guess_string": "", "online_dictionary_url": "", "auto_reload_page_interval": 1.0, "auto_reload_random_delay": false, "proxy_server_port": ""}} | ||||
| {"homepage": "https://kktix.com", "browser": "chrome", "language": "\u7e41\u9ad4\u4e2d\u6587", "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}, "tixcraft": {"pass_date_is_sold_out": true, "auto_reload_coming_soon_page": true}, "advanced": {"play_captcha_sound": {"enable": true, "filename": "ding-dong.wav"}, "tixcraft_sid": "", "ibonqware": "", "facebook_account": "", "kktix_account": "weng.32002@gmail.com", "fami_account": "", "cityline_account": "", "urbtix_account": "", "hkticketing_account": "", "kham_account": "", "ticket_account": "", "udn_account": "", "ticketplus_account": "", "facebook_password": "", "kktix_password": "eXlme2omX3Nq", "fami_password": "", "urbtix_password": "", "cityline_password": "", "hkticketing_password": "", "kham_password": "", "ticket_password": "", "udn_password": "", "ticketplus_password": "", "adblock_plus_enable": false, "disable_adjacent_seat": false, "hide_some_image": true, "block_facebook_network": false, "headless": false, "verbose": false, "auto_guess_options": true, "user_guess_string": "", "online_dictionary_url": "", "auto_reload_page_interval": 1.0, "auto_reload_random_delay": false, "proxy_server_port": ""}} | ||||
							
								
								
									
										32
									
								
								settings.py
								
								
								
								
							
							
						
						
									
										32
									
								
								settings.py
								
								
								
								
							|  | @ -34,7 +34,7 @@ import ssl | |||
| 
 | ||||
| ssl._create_default_https_context = ssl._create_unverified_context | ||||
| 
 | ||||
| CONST_APP_VERSION = "MaxBot (2023.12.27)" | ||||
| CONST_APP_VERSION = "MaxBot (2023.12.28)" | ||||
| 
 | ||||
| CONST_MAXBOT_CONFIG_FILE = "settings.json" | ||||
| CONST_MAXBOT_LAST_URL_FILE = "MAXBOT_LAST_URL.txt" | ||||
|  | @ -636,15 +636,10 @@ def get_default_config(): | |||
|         config_dict["ocr_captcha"]["enable"] = False | ||||
|         config_dict["ocr_captcha"]["force_submit"] = False | ||||
| 
 | ||||
|     config_dict['kktix']={} | ||||
|     config_dict["kktix"]["auto_press_next_step_button"] = True | ||||
|     config_dict["kktix"]["auto_fill_ticket_number"] = True | ||||
| 
 | ||||
|     config_dict['tixcraft']={} | ||||
|     config_dict["tixcraft"]["date_auto_select"] = {} | ||||
|     config_dict["tixcraft"]["date_auto_select"]["enable"] = True | ||||
|     config_dict["tixcraft"]["date_auto_select"]["date_keyword"] = "" | ||||
|     config_dict["tixcraft"]["date_auto_select"]["mode"] = CONST_SELECT_ORDER_DEFAULT | ||||
|     config_dict["date_auto_select"] = {} | ||||
|     config_dict["date_auto_select"]["enable"] = True | ||||
|     config_dict["date_auto_select"]["date_keyword"] = "" | ||||
|     config_dict["date_auto_select"]["mode"] = CONST_SELECT_ORDER_DEFAULT | ||||
| 
 | ||||
|     config_dict["area_auto_select"] = {} | ||||
|     config_dict["area_auto_select"]["enable"] = True | ||||
|  | @ -652,6 +647,11 @@ def get_default_config(): | |||
|     config_dict["area_auto_select"]["area_keyword"] = "" | ||||
|     config_dict["keyword_exclude"] = CONST_EXCLUDE_DEFAULT | ||||
| 
 | ||||
|     config_dict['kktix']={} | ||||
|     config_dict["kktix"]["auto_press_next_step_button"] = True | ||||
|     config_dict["kktix"]["auto_fill_ticket_number"] = True | ||||
| 
 | ||||
|     config_dict['tixcraft']={} | ||||
|     config_dict["tixcraft"]["pass_date_is_sold_out"] = True | ||||
|     config_dict["tixcraft"]["auto_reload_coming_soon_page"] = True | ||||
| 
 | ||||
|  | @ -869,12 +869,12 @@ def btn_save_act(language_code, slience_mode=False): | |||
|         config_dict["kktix"]["auto_press_next_step_button"] = bool(chk_state_auto_press_next_step_button.get()) | ||||
|         config_dict["kktix"]["auto_fill_ticket_number"] = bool(chk_state_auto_fill_ticket_number.get()) | ||||
| 
 | ||||
|         config_dict["tixcraft"]["date_auto_select"]["enable"] = bool(chk_state_date_auto_select.get()) | ||||
|         config_dict["tixcraft"]["date_auto_select"]["mode"] = combo_date_auto_select_mode.get().strip() | ||||
|         config_dict["date_auto_select"]["enable"] = bool(chk_state_date_auto_select.get()) | ||||
|         config_dict["date_auto_select"]["mode"] = combo_date_auto_select_mode.get().strip() | ||||
|          | ||||
|         date_keyword = txt_date_keyword.get("1.0",END).strip() | ||||
|         date_keyword = format_config_keyword_for_json(date_keyword) | ||||
|         config_dict["tixcraft"]["date_auto_select"]["date_keyword"] = date_keyword | ||||
|         config_dict["date_auto_select"]["date_keyword"] = date_keyword | ||||
| 
 | ||||
|         config_dict["tixcraft"]["pass_date_is_sold_out"] = bool(chk_state_pass_date_is_sold_out.get()) | ||||
|         config_dict["tixcraft"]["auto_reload_coming_soon_page"] = bool(chk_state_auto_reload_coming_soon_page.get()) | ||||
|  | @ -1731,7 +1731,7 @@ def PreferenctTab(root, config_dict, language_code, UI_PADDING_X): | |||
| 
 | ||||
|     global chk_state_date_auto_select | ||||
|     chk_state_date_auto_select = BooleanVar() | ||||
|     chk_state_date_auto_select.set(config_dict["tixcraft"]["date_auto_select"]["enable"]) | ||||
|     chk_state_date_auto_select.set(config_dict["date_auto_select"]["enable"]) | ||||
| 
 | ||||
|     global chk_date_auto_select | ||||
|     chk_date_auto_select = Checkbutton(frame_group_tixcraft, text=translate[language_code]['enable'], variable=chk_state_date_auto_select, command=callbackDateAutoOnChange) | ||||
|  | @ -1749,7 +1749,7 @@ def PreferenctTab(root, config_dict, language_code, UI_PADDING_X): | |||
|     global combo_date_auto_select_mode | ||||
|     combo_date_auto_select_mode = ttk.Combobox(frame_group_tixcraft, state="readonly", width=30) | ||||
|     combo_date_auto_select_mode['values']= CONST_SELECT_OPTIONS_DEFAULT | ||||
|     combo_date_auto_select_mode.set(config_dict["tixcraft"]["date_auto_select"]["mode"]) | ||||
|     combo_date_auto_select_mode.set(config_dict["date_auto_select"]["mode"]) | ||||
|     combo_date_auto_select_mode.grid(column=1, row=date_auto_select_mode_index, sticky = W) | ||||
| 
 | ||||
|     group_row_count+=1 | ||||
|  | @ -1764,7 +1764,7 @@ def PreferenctTab(root, config_dict, language_code, UI_PADDING_X): | |||
|     global txt_date_keyword | ||||
|     txt_date_keyword = Text(frame_group_tixcraft, width=30, height=4) | ||||
|     txt_date_keyword.grid(column=1, row=group_row_count, sticky = W) | ||||
|     txt_date_keyword.insert("1.0", config_dict["tixcraft"]["date_auto_select"]["date_keyword"].strip()) | ||||
|     txt_date_keyword.insert("1.0", config_dict["date_auto_select"]["date_keyword"].strip()) | ||||
| 
 | ||||
|     group_row_count+=1 | ||||
| 
 | ||||
|  |  | |||
|  | @ -27,7 +27,7 @@ import pyperclip | |||
| import tornado | ||||
| from tornado.web import Application | ||||
| 
 | ||||
| CONST_APP_VERSION = "MaxBot (2023.12.27)" | ||||
| CONST_APP_VERSION = "MaxBot (2023.12.28)" | ||||
| 
 | ||||
| CONST_MAXBOT_QUESTION_FILE = "MAXBOT_QUESTION.txt" | ||||
| 
 | ||||
|  |  | |||
|  | @ -1 +1 @@ | |||
| {"homepage": "https://tixcraft.com", "browser": "chrome", "language": "\u7e41\u9ad4\u4e2d\u6587", "ticket_number": 2, "ocr_captcha": {"enable": true, "beta": true, "force_submit": true, "image_source": "canvas"}, "webdriver_type": "undetected_chromedriver", "kktix": {"auto_press_next_step_button": true, "auto_fill_ticket_number": true}, "tixcraft": {"date_auto_select": {"enable": true, "date_keyword": "", "mode": "random"}, "pass_date_is_sold_out": true, "auto_reload_coming_soon_page": true}, "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\"", "advanced": {"play_captcha_sound": {"enable": 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": "", "adblock_plus_enable": false, "disable_adjacent_seat": false, "hide_some_image": true, "block_facebook_network": false, "headless": false, "verbose": false, "auto_guess_options": true, "user_guess_string": "", "online_dictionary_url": "", "auto_reload_page_interval": 1.0, "auto_reload_random_delay": false, "proxy_server_port": ""}} | ||||
| {"homepage": "https://kktix.com", "browser": "chrome", "language": "\u7e41\u9ad4\u4e2d\u6587", "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}, "tixcraft": {"pass_date_is_sold_out": true, "auto_reload_coming_soon_page": true}, "advanced": {"play_captcha_sound": {"enable": true, "filename": "ding-dong.wav"}, "tixcraft_sid": "", "ibonqware": "", "facebook_account": "", "kktix_account": "weng.32002@gmail.com", "fami_account": "", "cityline_account": "", "urbtix_account": "", "hkticketing_account": "", "kham_account": "", "ticket_account": "", "udn_account": "", "ticketplus_account": "", "facebook_password": "", "kktix_password": "eXlme2omX3Nq", "fami_password": "", "urbtix_password": "", "cityline_password": "", "hkticketing_password": "", "kham_password": "", "ticket_password": "", "udn_password": "", "ticketplus_password": "", "adblock_plus_enable": false, "disable_adjacent_seat": false, "hide_some_image": true, "block_facebook_network": false, "headless": false, "verbose": false, "auto_guess_options": true, "user_guess_string": "", "online_dictionary_url": "", "auto_reload_page_interval": 1.0, "auto_reload_random_delay": false, "proxy_server_port": ""}} | ||||
|  | @ -19,13 +19,13 @@ function get_target_date_with_order(settings, matched_block) | |||
|     //console.log(settings);
 | ||||
|     let target_area = []; | ||||
| 
 | ||||
|    if(settings.tixcraft.date_auto_select.mode=="from top to bottom") | ||||
|    if(settings.date_auto_select.mode=="from top to bottom") | ||||
|        target_date = matched_block.first(); | ||||
|    if(settings.tixcraft.date_auto_select.mode=="from bottom to top") | ||||
|    if(settings.date_auto_select.mode=="from bottom to top") | ||||
|        target_date = matched_block.last(); | ||||
|    if(settings.tixcraft.date_auto_select.mode=="center") | ||||
|    if(settings.date_auto_select.mode=="center") | ||||
|        target_date = matched_block.first(); | ||||
|    if(settings.tixcraft.date_auto_select.mode=="random") | ||||
|    if(settings.date_auto_select.mode=="random") | ||||
|        target_date = matched_block.first(); | ||||
| 
 | ||||
|     return target_area; | ||||
|  |  | |||
|  | @ -32,7 +32,6 @@ | |||
|   <div class="col-12"> | ||||
|     <label for="date_select_mode" class="form-label">Date Select Order</label> | ||||
|     <select id="date_select_mode" class="form-select" aria-label="Default select"> | ||||
|       <option selected>Select Mode</option> | ||||
|       <option value="from top to bottom">from top to bottom</option> | ||||
|       <option value="from bottom to top">from bottom to top</option> | ||||
|       <option value="center">center</option> | ||||
|  | @ -47,7 +46,6 @@ | |||
|   <div class="col-12"> | ||||
|     <label for="area_select_mode" class="form-label">Area Select Order</label> | ||||
|     <select id="area_select_mode" class="form-select" aria-label="Default select"> | ||||
|       <option selected>Select Mode</option> | ||||
|       <option value="from top to bottom">from top to bottom</option> | ||||
|       <option value="from bottom to top">from bottom to top</option> | ||||
|       <option value="center">center</option> | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue