2023-01-14 ver.6, fix kktix guess question feature.

master
Max 2023-01-14 16:05:00 +08:00
parent 01daa174c2
commit 26e9119fb6
3 changed files with 41 additions and 29 deletions

View File

@ -51,7 +51,7 @@ except Exception as exc:
import ssl import ssl
ssl._create_default_https_context = ssl._create_unverified_context ssl._create_default_https_context = ssl._create_unverified_context
CONST_APP_VERSION = u"MaxBot (2023.01.14)" CONST_APP_VERSION = u"MaxBot (2023.01.14) ver.6"
CONST_HOMEPAGE_DEFAULT = "https://tixcraft.com" CONST_HOMEPAGE_DEFAULT = "https://tixcraft.com"
@ -606,15 +606,13 @@ def get_offical_hint_string_from_symbol(symbol, tmp_text):
offical_hint_string = tmp_text offical_hint_string = tmp_text
return offical_hint_string return offical_hint_string
def guess_answer_list_from_hint(CONST_EXAMPLE_SYMBOL, captcha_text_div_text): def guess_answer_list_from_hint(CONST_EXAMPLE_SYMBOL, CONST_INPUT_SYMBOL, captcha_text_div_text):
show_debug_message = True # debug. show_debug_message = True # debug.
show_debug_message = False # online show_debug_message = False # online
CONST_INPUT_SYMBOL = '輸入'
return_list = None return_list = None
tmp_text = format_question_string(CONST_EXAMPLE_SYMBOL, captcha_text_div_text) tmp_text = format_question_string(CONST_EXAMPLE_SYMBOL, CONST_INPUT_SYMBOL, captcha_text_div_text)
my_question = "" my_question = ""
my_options = "" my_options = ""
@ -800,8 +798,7 @@ def guess_answer_list_from_hint(CONST_EXAMPLE_SYMBOL, captcha_text_div_text):
return return_list return return_list
def format_question_string(CONST_EXAMPLE_SYMBOL, captcha_text_div_text): def format_question_string(CONST_EXAMPLE_SYMBOL, CONST_INPUT_SYMBOL, captcha_text_div_text):
CONST_INPUT_SYMBOL = '輸入'
tmp_text = captcha_text_div_text tmp_text = captcha_text_div_text
tmp_text = tmp_text.replace(u' ',u' ') tmp_text = tmp_text.replace(u' ',u' ')
@ -812,6 +809,8 @@ def format_question_string(CONST_EXAMPLE_SYMBOL, captcha_text_div_text):
# replace ex. # replace ex.
tmp_text = tmp_text.replace(u'例如', CONST_EXAMPLE_SYMBOL) tmp_text = tmp_text.replace(u'例如', CONST_EXAMPLE_SYMBOL)
tmp_text = tmp_text.replace(u'如:', CONST_EXAMPLE_SYMBOL) tmp_text = tmp_text.replace(u'如:', CONST_EXAMPLE_SYMBOL)
tmp_text = tmp_text.replace(u'如為', CONST_EXAMPLE_SYMBOL+'')
tmp_text = tmp_text.replace(u'舉例', CONST_EXAMPLE_SYMBOL) tmp_text = tmp_text.replace(u'舉例', CONST_EXAMPLE_SYMBOL)
if not CONST_EXAMPLE_SYMBOL in tmp_text: if not CONST_EXAMPLE_SYMBOL in tmp_text:
tmp_text = tmp_text.replace(u'', CONST_EXAMPLE_SYMBOL) tmp_text = tmp_text.replace(u'', CONST_EXAMPLE_SYMBOL)
@ -840,10 +839,10 @@ def format_question_string(CONST_EXAMPLE_SYMBOL, captcha_text_div_text):
return tmp_text return tmp_text
def get_answer_list_by_question(CONST_EXAMPLE_SYMBOL, captcha_text_div_text): def get_answer_list_by_question(CONST_EXAMPLE_SYMBOL, CONST_INPUT_SYMBOL, captcha_text_div_text):
return_list = None return_list = None
tmp_text = format_question_string(CONST_EXAMPLE_SYMBOL, captcha_text_div_text) tmp_text = format_question_string(CONST_EXAMPLE_SYMBOL, CONST_INPUT_SYMBOL, captcha_text_div_text)
# guess answer list from multi-options: 【】() [] # guess answer list from multi-options: 【】() []
if return_list is None: if return_list is None:
@ -851,7 +850,7 @@ def get_answer_list_by_question(CONST_EXAMPLE_SYMBOL, captcha_text_div_text):
pass pass
if return_list is None: if return_list is None:
return_list = guess_answer_list_from_hint(CONST_EXAMPLE_SYMBOL, captcha_text_div_text) return_list = guess_answer_list_from_hint(CONST_EXAMPLE_SYMBOL, CONST_INPUT_SYMBOL, captcha_text_div_text)
# try rule8: # try rule8:
if return_list is None: if return_list is None:
@ -2293,6 +2292,10 @@ def kktix_get_web_datetime(registrationsNewApp_div):
else: else:
print("find td.ng-binding fail") print("find td.ng-binding fail")
if show_debug_message:
print('is_found_web_datetime:', is_found_web_datetime)
print('web_datetime:', web_datetime)
return web_datetime return web_datetime
def kktix_check_agree_checkbox(driver): def kktix_check_agree_checkbox(driver):
@ -2394,7 +2397,7 @@ def kktix_check_register_status(url):
#print("registerStatus:", registerStatus) #print("registerStatus:", registerStatus)
return registerStatus return registerStatus
def get_answer_string_from_web_date(CONST_EXAMPLE_SYMBOL, registrationsNewApp_div, captcha_text_div_text): def get_answer_string_from_web_date(CONST_EXAMPLE_SYMBOL, CONST_INPUT_SYMBOL, registrationsNewApp_div, captcha_text_div_text):
show_debug_message = True # debug. show_debug_message = True # debug.
show_debug_message = False # online show_debug_message = False # online
@ -2429,7 +2432,7 @@ def get_answer_string_from_web_date(CONST_EXAMPLE_SYMBOL, registrationsNewApp_di
if show_debug_message: if show_debug_message:
print("web_datetime:", web_datetime) print("web_datetime:", web_datetime)
captcha_text_formatted = format_question_string(CONST_EXAMPLE_SYMBOL, captcha_text_div_text) captcha_text_formatted = format_question_string(CONST_EXAMPLE_SYMBOL, CONST_INPUT_SYMBOL, captcha_text_div_text)
if show_debug_message: if show_debug_message:
print("captcha_text_formatted", captcha_text_formatted) print("captcha_text_formatted", captcha_text_formatted)
@ -2442,8 +2445,12 @@ def get_answer_string_from_web_date(CONST_EXAMPLE_SYMBOL, registrationsNewApp_di
# for "如為2月30日請輸入0230" # for "如為2月30日請輸入0230"
if my_datetime_foramted is None: if my_datetime_foramted is None:
right_part = ""
if CONST_EXAMPLE_SYMBOL in captcha_text_formatted: if CONST_EXAMPLE_SYMBOL in captcha_text_formatted:
right_part = captcha_text_formatted.split(CONST_EXAMPLE_SYMBOL)[1] right_part = captcha_text_formatted.split(CONST_EXAMPLE_SYMBOL)[1]
if CONST_INPUT_SYMBOL in right_part:
right_part = right_part.split(CONST_INPUT_SYMBOL)[1]
number_text = find_continuous_number(right_part) number_text = find_continuous_number(right_part)
my_anwser_formated = convert_string_to_pattern(number_text, dynamic_length=False) my_anwser_formated = convert_string_to_pattern(number_text, dynamic_length=False)
@ -2453,6 +2460,9 @@ def get_answer_string_from_web_date(CONST_EXAMPLE_SYMBOL, registrationsNewApp_di
my_datetime_foramted = "%m%d" my_datetime_foramted = "%m%d"
#print("my_datetime_foramted:", my_datetime_foramted) #print("my_datetime_foramted:", my_datetime_foramted)
if show_debug_message:
print("my_datetime_foramted", my_datetime_foramted)
if my_datetime_foramted is None: if my_datetime_foramted is None:
now = datetime.now() now = datetime.now()
for guess_year in range(now.year-4,now.year+2): for guess_year in range(now.year-4,now.year+2):
@ -2500,26 +2510,27 @@ def get_answer_string_from_web_date(CONST_EXAMPLE_SYMBOL, registrationsNewApp_di
break break
if not my_datetime_foramted is None: if not my_datetime_foramted is None:
my_delimitor_symbol = u' ' my_delimitor_symbol = ' '
if my_delimitor_symbol in web_datetime: if my_delimitor_symbol in web_datetime:
web_datetime = web_datetime[:web_datetime.find(my_delimitor_symbol)] web_datetime = web_datetime[:web_datetime.find(my_delimitor_symbol)]
date_time = datetime.strptime(web_datetime,u"%Y/%m/%d") date_time = datetime.strptime(web_datetime,u"%Y/%m/%d")
if show_debug_message: if show_debug_message:
print("date_time:", date_time) print("our web date_time:", date_time)
ans = None ans = None
try: try:
if not date_time is None:
ans = date_time.strftime(my_datetime_foramted) ans = date_time.strftime(my_datetime_foramted)
except Exception as exc: except Exception as exc:
pass pass
inferred_answer_string = ans inferred_answer_string = ans
if show_debug_message: if show_debug_message:
print("my_anwser:", ans) print("web date_time anwser:", ans)
return inferred_answer_string return inferred_answer_string
def get_answer_string_from_web_time(CONST_EXAMPLE_SYMBOL, registrationsNewApp_div, captcha_text_div_text): def get_answer_string_from_web_time(CONST_EXAMPLE_SYMBOL, CONST_INPUT_SYMBOL, registrationsNewApp_div, captcha_text_div_text):
show_debug_message = True # debug. show_debug_message = True # debug.
#show_debug_message = False # online show_debug_message = False # online
inferred_answer_string = None inferred_answer_string = None
@ -2547,7 +2558,7 @@ def get_answer_string_from_web_time(CONST_EXAMPLE_SYMBOL, registrationsNewApp_di
if not registrationsNewApp_div is None: if not registrationsNewApp_div is None:
web_datetime = kktix_get_web_datetime(registrationsNewApp_div) web_datetime = kktix_get_web_datetime(registrationsNewApp_div)
if not web_datetime is None: if not web_datetime is None:
tmp_text = format_question_string(CONST_EXAMPLE_SYMBOL, captcha_text_div_text) tmp_text = format_question_string(CONST_EXAMPLE_SYMBOL, CONST_INPUT_SYMBOL, captcha_text_div_text)
my_datetime_foramted = None my_datetime_foramted = None
@ -2639,14 +2650,15 @@ def get_answer_list_from_question_string(registrationsNewApp_div, captcha_text_d
is_need_keep_symbol = check_answer_keep_symbol(captcha_text_div_text) is_need_keep_symbol = check_answer_keep_symbol(captcha_text_div_text)
CONST_EXAMPLE_SYMBOL = "範例" CONST_EXAMPLE_SYMBOL = "範例"
CONST_INPUT_SYMBOL = "輸入"
# 請在下方空白處輸入引號內文字: # 請在下方空白處輸入引號內文字:
if inferred_answer_string is None: if inferred_answer_string is None:
is_use_quota_message = False is_use_quota_message = False
if u"" in captcha_text_div_text and u"" in captcha_text_div_text: if u"" in captcha_text_div_text and u"" in captcha_text_div_text:
if u'' in captcha_text_div_text and u'' in captcha_text_div_text and u'輸入' in captcha_text_div_text and u'引號' in captcha_text_div_text and u'' in captcha_text_div_text: if u'' in captcha_text_div_text and u'' in captcha_text_div_text and CONST_INPUT_SYMBOL in captcha_text_div_text and u'引號' in captcha_text_div_text and u'' in captcha_text_div_text:
is_use_quota_message = True is_use_quota_message = True
if u'半形' in captcha_text_div_text and u'輸入' in captcha_text_div_text and u'引號' in captcha_text_div_text and u'' in captcha_text_div_text: if u'半形' in captcha_text_div_text and CONST_INPUT_SYMBOL in captcha_text_div_text and u'引號' in captcha_text_div_text and u'' in captcha_text_div_text:
is_use_quota_message = True is_use_quota_message = True
#print("is_use_quota_message:" , is_use_quota_message) #print("is_use_quota_message:" , is_use_quota_message)
if is_use_quota_message: if is_use_quota_message:
@ -2656,9 +2668,9 @@ def get_answer_list_from_question_string(registrationsNewApp_div, captcha_text_d
if inferred_answer_string is None: if inferred_answer_string is None:
is_use_quota_message = False is_use_quota_message = False
if u"" in captcha_text_div_text and u"" in captcha_text_div_text: if u"" in captcha_text_div_text and u"" in captcha_text_div_text:
if u'' in captcha_text_div_text and u'' in captcha_text_div_text and u'輸入' in captcha_text_div_text and u'引號' in captcha_text_div_text and u'' in captcha_text_div_text: if u'' in captcha_text_div_text and u'' in captcha_text_div_text and CONST_INPUT_SYMBOL in captcha_text_div_text and u'引號' in captcha_text_div_text and u'' in captcha_text_div_text:
is_use_quota_message = True is_use_quota_message = True
if u'半形' in captcha_text_div_text and u'輸入' in captcha_text_div_text and u'引號' in captcha_text_div_text and u'' in captcha_text_div_text: if u'半形' in captcha_text_div_text and CONST_INPUT_SYMBOL in captcha_text_div_text and u'引號' in captcha_text_div_text and u'' in captcha_text_div_text:
is_use_quota_message = True is_use_quota_message = True
#print("is_use_quota_message:" , is_use_quota_message) #print("is_use_quota_message:" , is_use_quota_message)
if is_use_quota_message: if is_use_quota_message:
@ -2667,11 +2679,11 @@ def get_answer_list_from_question_string(registrationsNewApp_div, captcha_text_d
# parse '演出日期' # parse '演出日期'
if inferred_answer_string is None: if inferred_answer_string is None:
inferred_answer_string = get_answer_string_from_web_date(CONST_EXAMPLE_SYMBOL, registrationsNewApp_div, captcha_text_div_text) inferred_answer_string = get_answer_string_from_web_date(CONST_EXAMPLE_SYMBOL, CONST_INPUT_SYMBOL, registrationsNewApp_div, captcha_text_div_text)
# parse '演出時間' # parse '演出時間'
if inferred_answer_string is None: if inferred_answer_string is None:
inferred_answer_string = get_answer_string_from_web_time(CONST_EXAMPLE_SYMBOL, registrationsNewApp_div, captcha_text_div_text) inferred_answer_string = get_answer_string_from_web_time(CONST_EXAMPLE_SYMBOL, CONST_INPUT_SYMBOL, registrationsNewApp_div, captcha_text_div_text)
# name of event. # name of event.
if inferred_answer_string is None: if inferred_answer_string is None:
@ -2713,7 +2725,7 @@ def get_answer_list_from_question_string(registrationsNewApp_div, captcha_text_d
# still no answer. # still no answer.
if inferred_answer_string is None: if inferred_answer_string is None:
if not is_combine_two_question: if not is_combine_two_question:
answer_list = get_answer_list_by_question(CONST_EXAMPLE_SYMBOL, captcha_text_div_text) answer_list = get_answer_list_by_question(CONST_EXAMPLE_SYMBOL, CONST_INPUT_SYMBOL, captcha_text_div_text)
if show_debug_message: if show_debug_message:
print("guess answer list:", answer_list) print("guess answer list:", answer_list)
else: else:

View File

@ -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"}, "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": "", "auto_guess_options": false, "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": "", "mode": "from top to bottom"}, "pass_date_is_sold_out": true, "auto_reload_coming_soon_page": true, "presale_code": ""}, "advanced": {"play_captcha_sound": {"enable": true, "filename": "ding-dong.wav"}, "facebook_account": "", "kktix_account": "", "adblock_plus_enable": false}, "debug": false} {"homepage": "https://kktix.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"}, "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": "", "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": "", "mode": "from top to bottom"}, "pass_date_is_sold_out": true, "auto_reload_coming_soon_page": true, "presale_code": ""}, "advanced": {"play_captcha_sound": {"enable": true, "filename": "ding-dong.wav"}, "facebook_account": "", "kktix_account": "", "adblock_plus_enable": false}, "debug": false}

View File

@ -19,7 +19,7 @@ import json
import webbrowser import webbrowser
import pyperclip import pyperclip
CONST_APP_VERSION = u"MaxBot (2023.01.14)" CONST_APP_VERSION = u"MaxBot (2023.01.14) ver.6"
CONST_FROM_TOP_TO_BOTTOM = u"from top to bottom" CONST_FROM_TOP_TO_BOTTOM = u"from top to bottom"
CONST_FROM_BOTTOM_TO_TOP = u"from bottom to top" CONST_FROM_BOTTOM_TO_TOP = u"from bottom to top"
@ -317,7 +317,7 @@ def get_default_config():
config_dict["kktix"]["area_keyword_1_and"] = "" config_dict["kktix"]["area_keyword_1_and"] = ""
config_dict["kktix"]["area_keyword_2"] = "" config_dict["kktix"]["area_keyword_2"] = ""
config_dict["kktix"]["area_keyword_2_and"] = "" config_dict["kktix"]["area_keyword_2_and"] = ""
config_dict["kktix"]["auto_guess_options"] = False config_dict["kktix"]["auto_guess_options"] = True
config_dict["kktix"]["user_guess_string"] = "" config_dict["kktix"]["user_guess_string"] = ""
config_dict['tixcraft']={} config_dict['tixcraft']={}