From 7abe47b0c44266b9a97eee6350b36e28548fc355 Mon Sep 17 00:00:00 2001 From: CHUN YU YAO Date: Tue, 7 Mar 2023 22:30:30 +0800 Subject: [PATCH] 2023-03-07 add verbose mode to display debug message on your environment. --- chrome_tixcraft.py | 34 ++++++++++++++++++++++++---------- config_launcher.py | 2 +- settings.json | 2 +- settings.py | 30 +++++++++++++++++++++++++++--- 4 files changed, 53 insertions(+), 15 deletions(-) diff --git a/chrome_tixcraft.py b/chrome_tixcraft.py index a8b9df8..8a63ced 100644 --- a/chrome_tixcraft.py +++ b/chrome_tixcraft.py @@ -53,7 +53,7 @@ import argparse import ssl ssl._create_default_https_context = ssl._create_unverified_context -CONST_APP_VERSION = u"MaxBot (2023.03.06)" +CONST_APP_VERSION = u"MaxBot (2023.03.07)" CONST_HOMEPAGE_DEFAULT = "https://tixcraft.com" URL_GOOGLE_OAUTH = 'https://accounts.google.com/o/oauth2/v2/auth/oauthchooseaccount?redirect_uri=https%3A%2F%2Fdevelopers.google.com%2Foauthplayground&prompt=consent&response_type=code&client_id=407408718192.apps.googleusercontent.com&scope=email&access_type=offline&flowName=GeneralOAuthFlow' @@ -1299,6 +1299,9 @@ def tixcraft_date_auto_select(driver, url, config_dict, domain_name): show_debug_message = True # debug. show_debug_message = False # online + if config_dict["advanced"]["verbose"]: + 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() @@ -1394,6 +1397,8 @@ def tixcraft_date_auto_select(driver, url, config_dict, domain_name): is_match_all_coming_soon_condiction = False break if is_match_all_coming_soon_condiction: + if show_debug_message: + print("match coming soon condiction at row:", row_text) is_coming_soon = True break @@ -1486,23 +1491,26 @@ def tixcraft_date_auto_select(driver, url, config_dict, domain_name): target_area = matched_blocks[target_row_index] - is_date_selected = False + is_date_clicked = False if target_area is not None: target_button = None try: target_button = target_area.find_element(By.CSS_SELECTOR, 'button') - if target_button.is_enabled(): + if not target_button is None: + if target_button.is_enabled(): + if show_debug_message: + print("start to press button...") + target_button.click() + is_date_clicked = True + else: if show_debug_message: - print("pressing button...") - target_button.click() - is_date_selected = True + print("target_button in target row is None.") except Exception as exc: if show_debug_message: - print("find or press button fail") + print("find or press button fail:", exc) if not target_button is None: print("try to click button fail, force click by js.") - #print(exc) try: driver.execute_script("arguments[0].click();", target_button) except Exception as exc: @@ -1520,7 +1528,7 @@ def tixcraft_date_auto_select(driver, url, config_dict, domain_name): except Exception as exc: pass else: - if not is_date_selected: + if not is_date_clicked: if not formated_area_list is None: if len(formated_area_list) == 0: try: @@ -1529,7 +1537,7 @@ def tixcraft_date_auto_select(driver, url, config_dict, domain_name): except Exception as exc: pass - return is_date_selected + return is_date_clicked # PURPOSE: get target area list. # RETURN: @@ -1655,6 +1663,9 @@ def tixcraft_area_auto_select(driver, url, config_dict): show_debug_message = True # debug. show_debug_message = False # online + if config_dict["advanced"]["verbose"]: + show_debug_message = True + # read config. area_keyword_1 = config_dict["tixcraft"]["area_auto_select"]["area_keyword_1"].strip() area_keyword_2 = config_dict["tixcraft"]["area_auto_select"]["area_keyword_2"].strip() @@ -3303,6 +3314,9 @@ def kktix_reg_new_main(driver, answer_index, is_finish_checkbox_click, config_di show_debug_message = True # debug. show_debug_message = False # online + if config_dict["advanced"]["verbose"]: + show_debug_message = True + # part 1: check div. registrationsNewApp_div = None try: diff --git a/config_launcher.py b/config_launcher.py index d036b03..b261590 100644 --- a/config_launcher.py +++ b/config_launcher.py @@ -20,7 +20,7 @@ import json import webbrowser import base64 -CONST_APP_VERSION = u"MaxBot (2023.03.06)" +CONST_APP_VERSION = u"MaxBot (2023.03.07)" CONST_LAUNCHER_CONFIG_FILENAME = "config_launcher.json" diff --git a/settings.json b/settings.json index f694369..cbae03f 100644 --- a/settings.json +++ b/settings.json @@ -1 +1 @@ -{"homepage": "https://tixcraft.com", "browser": "chrome", "language": "\u7e41\u9ad4\u4e2d\u6587", "ticket_number": 2, "pass_1_seat_remaining": true, "auto_check_agree": true, "ocr_captcha": {"enable": true, "force_submit": false, "image_source": "canvas"}, "webdriver_type": "undetected_chromedriver", "kktix": {"auto_press_next_step_button": true, "auto_fill_ticket_number": true, "area_mode": "from top to bottom", "area_keyword_1": "", "area_keyword_1_and": "", "area_keyword_2": "", "area_keyword_2_and": "", "area_keyword_2_enable": true, "auto_guess_options": true, "user_guess_string": ""}, "tixcraft": {"date_auto_select": {"enable": true, "date_keyword": "", "mode": "from top to bottom"}, "area_auto_select": {"enable": true, "area_keyword_1": "", "area_keyword_2": "", "area_keyword_3": "", "area_keyword_4": "", "area_keyword_2_enable": true, "area_keyword_3_enable": true, "area_keyword_4_enable": true, "mode": "from top to bottom"}, "pass_date_is_sold_out": true, "auto_reload_coming_soon_page": true, "presale_code": "", "presale_code_delimiter": ""}, "advanced": {"play_captcha_sound": {"enable": true, "filename": "ding-dong.wav"}, "tixcraft_sid": "", "ibonqware": "", "facebook_account": "", "kktix_account": "", "cityline_account": "", "urbtix_account": "", "hkticketing_account": "", "kham_account": "", "facebook_password": "", "kktix_password": "", "cityline_password": "", "urbtix_password": "", "hkticketing_password": "", "kham_password": "", "adblock_plus_enable": false, "open_google_oauth_url": false, "headless": false}, "debug": false} \ No newline at end of file +{"homepage": "https://tixcraft.com", "browser": "chrome", "language": "\u7e41\u9ad4\u4e2d\u6587", "ticket_number": 2, "pass_1_seat_remaining": true, "auto_check_agree": true, "ocr_captcha": {"enable": true, "force_submit": false, "image_source": "canvas"}, "webdriver_type": "undetected_chromedriver", "kktix": {"auto_press_next_step_button": true, "auto_fill_ticket_number": true, "area_mode": "from top to bottom", "area_keyword_1": "", "area_keyword_1_and": "", "area_keyword_2": "", "area_keyword_2_and": "", "area_keyword_2_enable": true, "auto_guess_options": true, "user_guess_string": ""}, "tixcraft": {"date_auto_select": {"enable": true, "date_keyword": "", "mode": "from top to bottom"}, "area_auto_select": {"enable": true, "area_keyword_1": "", "area_keyword_2": "", "area_keyword_3": "", "area_keyword_4": "", "area_keyword_2_enable": true, "area_keyword_3_enable": true, "area_keyword_4_enable": true, "mode": "from top to bottom"}, "pass_date_is_sold_out": true, "auto_reload_coming_soon_page": true, "presale_code": "", "presale_code_delimiter": ""}, "advanced": {"play_captcha_sound": {"enable": true, "filename": "ding-dong.wav"}, "tixcraft_sid": "", "ibonqware": "", "facebook_account": "", "kktix_account": "", "cityline_account": "", "urbtix_account": "", "hkticketing_account": "", "kham_account": "", "facebook_password": "", "kktix_password": "", "cityline_password": "", "urbtix_password": "", "hkticketing_password": "", "kham_password": "", "adblock_plus_enable": false, "open_google_oauth_url": false, "headless": false, "verbose": false}} \ No newline at end of file diff --git a/settings.py b/settings.py index a3535b3..49422bf 100644 --- a/settings.py +++ b/settings.py @@ -21,7 +21,7 @@ import webbrowser import pyperclip import base64 -CONST_APP_VERSION = u"MaxBot (2023.03.06)" +CONST_APP_VERSION = u"MaxBot (2023.03.07)" CONST_SETTINGS_CONFIG_FILENAME = "settings.json" @@ -96,6 +96,8 @@ def load_translate(): en_us["ocr_captcha_image_source"] = 'OCR image source' en_us["webdriver_type"] = 'WebDriver type' en_us["headless"] = 'Headless mode' + # Make the operation more talkative + en_us["verbose"] = 'Verbose mode' en_us["preference"] = 'Preference' en_us["advanced"] = 'Advanced' @@ -175,6 +177,7 @@ def load_translate(): zh_tw["ocr_captcha_image_source"] = 'OCR圖片取得方式' zh_tw["webdriver_type"] = 'WebDriver類別' zh_tw["headless"] = '無圖形界面模式' + zh_tw["verbose"] = '輸出詳細除錯訊息' zh_tw["preference"] = '偏好設定' zh_tw["advanced"] = '進階設定' @@ -254,6 +257,7 @@ def load_translate(): zh_cn["ocr_captcha_image_source"] = 'OCR图像源' zh_cn["webdriver_type"] = 'WebDriver类别' zh_cn["headless"] = '无图形界面模式' + zh_cn["verbose"] = '输出详细除错讯息' zh_cn["preference"] = '偏好设定' zh_cn["advanced"] = '進階設定' @@ -334,6 +338,7 @@ def load_translate(): ja_jp["ocr_captcha_image_source"] = 'OCR 画像ソース' ja_jp["webdriver_type"] = 'WebDriverタイプ' ja_jp["headless"] = 'ヘッドレスモード' + ja_jp["verbose"] = '詳細モード' ja_jp["preference"] = '設定' ja_jp["advanced"] = '高度な設定' @@ -484,8 +489,7 @@ def get_default_config(): config_dict["advanced"]["adblock_plus_enable"] = False config_dict["advanced"]["open_google_oauth_url"] = False config_dict["advanced"]["headless"] = False - - config_dict['debug']=False + config_dict["advanced"]["verbose"] = False return config_dict @@ -633,6 +637,7 @@ def btn_save_act(language_code, slience_mode=False): global chk_state_ocr_captcha_force_submit global chk_state_google_oauth global chk_state_headless + global chk_state_verbose global combo_ocr_captcha_image_source global combo_webdriver_type @@ -746,6 +751,7 @@ def btn_save_act(language_code, slience_mode=False): config_dict["ocr_captcha"]["image_source"] = combo_ocr_captcha_image_source.get().strip() config_dict["webdriver_type"] = combo_webdriver_type.get().strip() config_dict["advanced"]["headless"] = bool(chk_state_headless.get()) + config_dict["advanced"]["verbose"] = bool(chk_state_verbose.get()) # save config. if is_all_data_correct: @@ -921,6 +927,7 @@ def applyNewLanguage(): global lbl_ocr_captcha_image_source global lbl_webdriver_type global lbl_headless + global lbl_verbose # for checkbox global chk_pass_1_seat_remaining @@ -939,6 +946,7 @@ def applyNewLanguage(): global chk_ocr_captcha_force_submit global chk_google_oauth global chk_headless + global chk_verbose global chk_kktix_area_keyword_2_enable global chk_area_keyword_2_enable @@ -993,6 +1001,7 @@ def applyNewLanguage(): lbl_webdriver_type.config(text=translate[language_code]["webdriver_type"]) lbl_google_oauth.config(text=translate[language_code]["open_google_oauth_url"]) lbl_headless.config(text=translate[language_code]["headless"]) + lbl_verbose.config(text=translate[language_code]["verbose"]) chk_pass_1_seat_remaining.config(text=translate[language_code]["enable"]) chk_auto_check_agree.config(text=translate[language_code]["enable"]) @@ -1009,6 +1018,7 @@ def applyNewLanguage(): chk_ocr_captcha_force_submit.config(text=translate[language_code]["enable"]) chk_google_oauth.config(text=translate[language_code]["enable"]) chk_headless.config(text=translate[language_code]["enable"]) + chk_verbose.config(text=translate[language_code]["enable"]) chk_kktix_area_keyword_2_enable.config(text=translate[language_code]["enable"]) chk_area_keyword_2_enable.config(text=translate[language_code]["enable"]) @@ -2029,6 +2039,20 @@ def AdvancedTab(root, config_dict, language_code, UI_PADDING_X): chk_headless = Checkbutton(frame_group_header, text=translate[language_code]['enable'], variable=chk_state_headless) chk_headless.grid(column=1, row=group_row_count, sticky = W) + group_row_count+=1 + + global lbl_verbose + lbl_verbose = Label(frame_group_header, text=translate[language_code]['verbose']) + lbl_verbose.grid(column=0, row=group_row_count, sticky = E) + + global chk_state_verbose + chk_state_verbose = BooleanVar() + chk_state_verbose.set(config_dict['advanced']["verbose"]) + + global chk_verbose + chk_verbose = Checkbutton(frame_group_header, text=translate[language_code]['enable'], variable=chk_state_verbose) + chk_verbose.grid(column=1, row=group_row_count, sticky = W) + frame_group_header.grid(column=0, row=row_count, padx=UI_PADDING_X) def AutofillTab(root, config_dict, language_code, UI_PADDING_X):