2023-01-14 ver.6, fix kktix guess question feature.
parent
01daa174c2
commit
26e9119fb6
|
@ -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:
|
||||||
ans = date_time.strftime(my_datetime_foramted)
|
if not date_time is None:
|
||||||
|
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:
|
||||||
|
|
|
@ -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}
|
|
@ -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']={}
|
||||||
|
|
Loading…
Reference in New Issue