允許多位線上槍手的答案支援
parent
74f27ed86a
commit
2bc1a67333
|
@ -53,12 +53,13 @@ import webbrowser
|
||||||
import argparse
|
import argparse
|
||||||
import itertools
|
import itertools
|
||||||
|
|
||||||
CONST_APP_VERSION = "MaxBot (2023.6.15)"
|
CONST_APP_VERSION = "MaxBot (2023.6.16)"
|
||||||
|
|
||||||
CONST_MAXBOT_CONFIG_FILE = "settings.json"
|
CONST_MAXBOT_CONFIG_FILE = "settings.json"
|
||||||
CONST_MAXBOT_LAST_URL_FILE = "MAXBOT_LAST_URL.txt"
|
CONST_MAXBOT_LAST_URL_FILE = "MAXBOT_LAST_URL.txt"
|
||||||
CONST_MAXBOT_INT28_FILE = "MAXBOT_INT28_IDLE.txt"
|
CONST_MAXBOT_INT28_FILE = "MAXBOT_INT28_IDLE.txt"
|
||||||
CONST_MAXBOT_ANSWER_ONLINE_FILE = "MAXBOT_ONLINE_ANSWER.txt"
|
CONST_MAXBOT_ANSWER_ONLINE_FILE = "MAXBOT_ONLINE_ANSWER.txt"
|
||||||
|
CONST_MAXBOT_QUESTION_FILE = "MAXBOT_QUESTION.txt"
|
||||||
|
|
||||||
CONST_HOMEPAGE_DEFAULT = "https://tixcraft.com"
|
CONST_HOMEPAGE_DEFAULT = "https://tixcraft.com"
|
||||||
URL_CHROME_DRIVER = 'https://chromedriver.chromium.org/'
|
URL_CHROME_DRIVER = 'https://chromedriver.chromium.org/'
|
||||||
|
@ -195,6 +196,11 @@ def get_config_dict(args):
|
||||||
config_dict["ocr_captcha"]["force_submit"] = True
|
config_dict["ocr_captcha"]["force_submit"] = True
|
||||||
return config_dict
|
return config_dict
|
||||||
|
|
||||||
|
def write_question_to_file(question_text):
|
||||||
|
print("write_question_to_file:", question_text)
|
||||||
|
with open(CONST_MAXBOT_QUESTION_FILE, "w") as text_file:
|
||||||
|
text_file.write("%s" % question_text)
|
||||||
|
|
||||||
def write_last_url_to_file(url):
|
def write_last_url_to_file(url):
|
||||||
with open(CONST_MAXBOT_LAST_URL_FILE, "w") as text_file:
|
with open(CONST_MAXBOT_LAST_URL_FILE, "w") as text_file:
|
||||||
text_file.write("%s" % url)
|
text_file.write("%s" % url)
|
||||||
|
@ -1915,7 +1921,11 @@ def reset_row_text_if_match_area_keyword_exclude(config_dict, row_text):
|
||||||
|
|
||||||
area_keyword_exclude = config_dict["area_auto_select"]["area_keyword_exclude"]
|
area_keyword_exclude = config_dict["area_auto_select"]["area_keyword_exclude"]
|
||||||
if len(area_keyword_exclude) > 0:
|
if len(area_keyword_exclude) > 0:
|
||||||
area_keyword_exclude_array = json.loads("["+ area_keyword_exclude +"]")
|
area_keyword_exclude_array = []
|
||||||
|
try:
|
||||||
|
area_keyword_exclude_array = json.loads("["+ area_keyword_exclude +"]")
|
||||||
|
except Exception as exc:
|
||||||
|
area_keyword_exclude_array = []
|
||||||
for exclude_item_list in area_keyword_exclude_array:
|
for exclude_item_list in area_keyword_exclude_array:
|
||||||
if len(row_text) > 0:
|
if len(row_text) > 0:
|
||||||
if ' ' in exclude_item_list:
|
if ' ' in exclude_item_list:
|
||||||
|
@ -2093,13 +2103,17 @@ def tixcraft_area_auto_select(driver, url, config_dict):
|
||||||
areas = None
|
areas = None
|
||||||
|
|
||||||
if len(area_keyword) > 0:
|
if len(area_keyword) > 0:
|
||||||
|
area_keyword_array = []
|
||||||
|
try:
|
||||||
area_keyword_array = json.loads("["+ area_keyword +"]")
|
area_keyword_array = json.loads("["+ area_keyword +"]")
|
||||||
for area_keyword_item in area_keyword_array:
|
except Exception as exc:
|
||||||
is_need_refresh, areas = get_tixcraft_target_area(el, config_dict, area_keyword_item)
|
area_keyword_array = []
|
||||||
if not is_need_refresh:
|
for area_keyword_item in area_keyword_array:
|
||||||
break
|
is_need_refresh, areas = get_tixcraft_target_area(el, config_dict, area_keyword_item)
|
||||||
else:
|
if not is_need_refresh:
|
||||||
print("is_need_refresh for keyword:", area_keyword_item)
|
break
|
||||||
|
else:
|
||||||
|
print("is_need_refresh for keyword:", area_keyword_item)
|
||||||
else:
|
else:
|
||||||
# empty keyword, match all.
|
# empty keyword, match all.
|
||||||
is_need_refresh, areas = get_tixcraft_target_area(el, config_dict, "")
|
is_need_refresh, areas = get_tixcraft_target_area(el, config_dict, "")
|
||||||
|
@ -2279,6 +2293,7 @@ def guess_tixcraft_question(driver):
|
||||||
formated_html_text = ""
|
formated_html_text = ""
|
||||||
if question_text is not None:
|
if question_text is not None:
|
||||||
if len(question_text) > 0:
|
if len(question_text) > 0:
|
||||||
|
write_question_to_file(question_text)
|
||||||
# format question text.
|
# format question text.
|
||||||
formated_html_text = question_text
|
formated_html_text = question_text
|
||||||
formated_html_text = formated_html_text.replace(u'「',u'【')
|
formated_html_text = formated_html_text.replace(u'「',u'【')
|
||||||
|
@ -2346,7 +2361,11 @@ def tixcraft_verify(driver, config_dict, answer_index):
|
||||||
|
|
||||||
if len(presale_code) > 0:
|
if len(presale_code) > 0:
|
||||||
presale_code = format_config_keyword_for_json(presale_code)
|
presale_code = format_config_keyword_for_json(presale_code)
|
||||||
answer_list = json.loads("["+ presale_code +"]")
|
answer_list = []
|
||||||
|
try:
|
||||||
|
answer_list = json.loads("["+ presale_code +"]")
|
||||||
|
except Exception as exc:
|
||||||
|
answer_list = []
|
||||||
if len(answer_list) > 0:
|
if len(answer_list) > 0:
|
||||||
if answer_index < len(answer_list)-1:
|
if answer_index < len(answer_list)-1:
|
||||||
inferred_answer_string = answer_list[answer_index+1]
|
inferred_answer_string = answer_list[answer_index+1]
|
||||||
|
@ -2834,9 +2853,8 @@ def kktix_press_next_button(driver):
|
||||||
pass
|
pass
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
def kktix_captcha_text_value(captcha_inner_div):
|
def kktix_captcha_inputed_text(captcha_inner_div):
|
||||||
ret = ""
|
ret = ""
|
||||||
|
|
||||||
if captcha_inner_div is not None:
|
if captcha_inner_div is not None:
|
||||||
try:
|
try:
|
||||||
captcha_password_text = captcha_inner_div.find_element(By.TAG_NAME, "input")
|
captcha_password_text = captcha_inner_div.find_element(By.TAG_NAME, "input")
|
||||||
|
@ -2864,7 +2882,6 @@ def kktix_input_captcha_text(captcha_password_input_element, inferred_answer_str
|
||||||
captcha_password_input_element.send_keys(inferred_answer_string)
|
captcha_password_input_element.send_keys(inferred_answer_string)
|
||||||
print("send captcha keys:" + inferred_answer_string)
|
print("send captcha keys:" + inferred_answer_string)
|
||||||
is_cpatcha_sent = True
|
is_cpatcha_sent = True
|
||||||
inputed_captcha_text = inferred_answer_string
|
|
||||||
except Exception as exc:
|
except Exception as exc:
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
|
@ -2884,6 +2901,9 @@ def kktix_input_captcha_text(captcha_password_input_element, inferred_answer_str
|
||||||
is_cpatcha_sent = True
|
is_cpatcha_sent = True
|
||||||
except Exception as exc:
|
except Exception as exc:
|
||||||
pass
|
pass
|
||||||
|
else:
|
||||||
|
if inputed_captcha_text == inferred_answer_string:
|
||||||
|
is_cpatcha_sent = True
|
||||||
|
|
||||||
return is_cpatcha_sent
|
return is_cpatcha_sent
|
||||||
|
|
||||||
|
@ -3728,10 +3748,7 @@ def get_answer_list_from_question_string(registrationsNewApp_div, captcha_text_d
|
||||||
|
|
||||||
return inferred_answer_string, answer_list
|
return inferred_answer_string, answer_list
|
||||||
|
|
||||||
def kktix_reg_new_captcha(registrationsNewApp_div, captcha_inner_div):
|
def kktix_reg_captcha_question_text(captcha_inner_div):
|
||||||
show_debug_message = True # debug.
|
|
||||||
show_debug_message = False # online
|
|
||||||
|
|
||||||
captcha_text_div = None
|
captcha_text_div = None
|
||||||
try:
|
try:
|
||||||
captcha_text_div = captcha_inner_div.find_element(By.TAG_NAME, "p")
|
captcha_text_div = captcha_inner_div.find_element(By.TAG_NAME, "p")
|
||||||
|
@ -3740,21 +3757,29 @@ def kktix_reg_new_captcha(registrationsNewApp_div, captcha_inner_div):
|
||||||
print("find p tag(captcha_text_div) fail")
|
print("find p tag(captcha_text_div) fail")
|
||||||
print(exc)
|
print(exc)
|
||||||
|
|
||||||
captcha_text_div_text = None
|
question_text = None
|
||||||
if captcha_text_div is not None:
|
if captcha_text_div is not None:
|
||||||
try:
|
try:
|
||||||
captcha_text_div_text = captcha_text_div.text
|
question_text = captcha_text_div.text
|
||||||
except Exception as exc:
|
except Exception as exc:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
# try to auto answer options.
|
if question_text is None:
|
||||||
|
question_text = ""
|
||||||
|
|
||||||
|
return question_text
|
||||||
|
|
||||||
|
def kktix_reg_new_captcha(registrationsNewApp_div, question_text):
|
||||||
|
show_debug_message = True # debug.
|
||||||
|
show_debug_message = False # online
|
||||||
|
|
||||||
answer_list = None
|
answer_list = None
|
||||||
inferred_answer_string = None
|
inferred_answer_string = None
|
||||||
|
|
||||||
if not captcha_text_div_text is None:
|
if len(question_text) > 0:
|
||||||
if show_debug_message:
|
if show_debug_message:
|
||||||
print("captcha_text_div_text:", captcha_text_div_text)
|
print("question_text:", question_text)
|
||||||
inferred_answer_string, answer_list = get_answer_list_from_question_string(registrationsNewApp_div, captcha_text_div_text)
|
inferred_answer_string, answer_list = get_answer_list_from_question_string(registrationsNewApp_div, question_text)
|
||||||
|
|
||||||
return inferred_answer_string, answer_list
|
return inferred_answer_string, answer_list
|
||||||
|
|
||||||
|
@ -3813,6 +3838,7 @@ def kktix_reg_captcha(driver, config_dict, answer_index, is_finish_checkbox_clic
|
||||||
pass
|
pass
|
||||||
|
|
||||||
captcha_password_input_element = None
|
captcha_password_input_element = None
|
||||||
|
question_text = ""
|
||||||
if not captcha_inner_div is None:
|
if not captcha_inner_div is None:
|
||||||
try:
|
try:
|
||||||
captcha_password_input_element = captcha_inner_div.find_element(By.TAG_NAME, "input")
|
captcha_password_input_element = captcha_inner_div.find_element(By.TAG_NAME, "input")
|
||||||
|
@ -3821,6 +3847,9 @@ def kktix_reg_captcha(driver, config_dict, answer_index, is_finish_checkbox_clic
|
||||||
except Exception as exc:
|
except Exception as exc:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
question_text = kktix_reg_captcha_question_text(captcha_inner_div)
|
||||||
|
write_question_to_file(question_text)
|
||||||
|
|
||||||
if not captcha_password_input_element is None:
|
if not captcha_password_input_element is None:
|
||||||
inferred_answer_string = ""
|
inferred_answer_string = ""
|
||||||
if captcha_inner_div is not None:
|
if captcha_inner_div is not None:
|
||||||
|
@ -3841,13 +3870,19 @@ def kktix_reg_captcha(driver, config_dict, answer_index, is_finish_checkbox_clic
|
||||||
|
|
||||||
if len(user_guess_string) > 0:
|
if len(user_guess_string) > 0:
|
||||||
user_guess_string = format_config_keyword_for_json(user_guess_string)
|
user_guess_string = format_config_keyword_for_json(user_guess_string)
|
||||||
answer_list = json.loads("["+ user_guess_string +"]")
|
|
||||||
|
answer_list = []
|
||||||
|
try:
|
||||||
|
answer_list = json.loads("["+ user_guess_string +"]")
|
||||||
|
except Exception as exc:
|
||||||
|
answer_list = []
|
||||||
|
|
||||||
if len(answer_list) == 1:
|
if len(answer_list) == 1:
|
||||||
inferred_answer_string = answer_list[0]
|
inferred_answer_string = answer_list[0]
|
||||||
|
|
||||||
if len(user_guess_string) == 0:
|
if len(user_guess_string) == 0:
|
||||||
if config_dict["advanced"]["auto_guess_options"]:
|
if config_dict["advanced"]["auto_guess_options"]:
|
||||||
inferred_answer_string, answer_list = kktix_reg_new_captcha(registrationsNewApp_div, captcha_inner_div)
|
inferred_answer_string, answer_list = kktix_reg_new_captcha(registrationsNewApp_div, question_text)
|
||||||
if inferred_answer_string is None:
|
if inferred_answer_string is None:
|
||||||
inferred_answer_string = ""
|
inferred_answer_string = ""
|
||||||
|
|
||||||
|
@ -3928,7 +3963,7 @@ def kktix_reg_captcha(driver, config_dict, answer_index, is_finish_checkbox_clic
|
||||||
# for popular event
|
# for popular event
|
||||||
if len(answer_list) > 0:
|
if len(answer_list) > 0:
|
||||||
if answer_index < len(answer_list)-1:
|
if answer_index < len(answer_list)-1:
|
||||||
if kktix_captcha_text_value(captcha_inner_div) == "":
|
if kktix_captcha_inputed_text(captcha_inner_div) == "":
|
||||||
answer_index += 1
|
answer_index += 1
|
||||||
answer_string = answer_list[answer_index]
|
answer_string = answer_list[answer_index]
|
||||||
|
|
||||||
|
@ -3971,7 +4006,12 @@ def kktix_reg_new_main(driver, config_dict, answer_index, is_finish_checkbox_cli
|
||||||
|
|
||||||
if len(area_keyword) > 0:
|
if len(area_keyword) > 0:
|
||||||
for retry_index in range(2):
|
for retry_index in range(2):
|
||||||
area_keyword_array = json.loads("["+ area_keyword +"]")
|
area_keyword_array = []
|
||||||
|
try:
|
||||||
|
area_keyword_array = json.loads("["+ area_keyword +"]")
|
||||||
|
except Exception as exc:
|
||||||
|
area_keyword_array = []
|
||||||
|
|
||||||
for area_keyword_item in area_keyword_array:
|
for area_keyword_item in area_keyword_array:
|
||||||
is_ticket_number_assigned, is_need_refresh = kktix_assign_ticket_number(driver, config_dict, area_keyword_item)
|
is_ticket_number_assigned, is_need_refresh = kktix_assign_ticket_number(driver, config_dict, area_keyword_item)
|
||||||
if is_ticket_number_assigned:
|
if is_ticket_number_assigned:
|
||||||
|
@ -4333,7 +4373,12 @@ def fami_home(driver, url, config_dict):
|
||||||
area_keyword = config_dict["area_auto_select"]["area_keyword"].strip()
|
area_keyword = config_dict["area_auto_select"]["area_keyword"].strip()
|
||||||
|
|
||||||
if len(area_keyword) > 0:
|
if len(area_keyword) > 0:
|
||||||
area_keyword_array = json.loads("["+ area_keyword +"]")
|
area_keyword_array = []
|
||||||
|
try:
|
||||||
|
area_keyword_array = json.loads("["+ area_keyword +"]")
|
||||||
|
except Exception as exc:
|
||||||
|
area_keyword_array = []
|
||||||
|
|
||||||
for area_keyword_item in area_keyword_array:
|
for area_keyword_item in area_keyword_array:
|
||||||
areas = get_fami_target_area(driver, config_dict, area_keyword_item)
|
areas = get_fami_target_area(driver, config_dict, area_keyword_item)
|
||||||
if not areas is None:
|
if not areas is None:
|
||||||
|
@ -4956,7 +5001,12 @@ def urbtix_performance(driver, config_dict):
|
||||||
print("area_keyword:", area_keyword)
|
print("area_keyword:", area_keyword)
|
||||||
|
|
||||||
if len(area_keyword) > 0:
|
if len(area_keyword) > 0:
|
||||||
area_keyword_array = json.loads("["+ area_keyword +"]")
|
area_keyword_array = []
|
||||||
|
try:
|
||||||
|
area_keyword_array = json.loads("["+ area_keyword +"]")
|
||||||
|
except Exception as exc:
|
||||||
|
area_keyword_array = []
|
||||||
|
|
||||||
for area_keyword_item in area_keyword_array:
|
for area_keyword_item in area_keyword_array:
|
||||||
print("area_keyword_item for keyword:", area_keyword_item)
|
print("area_keyword_item for keyword:", area_keyword_item)
|
||||||
is_need_refresh, is_price_assign_by_bot = urbtix_area_auto_select(driver, config_dict, area_keyword_item)
|
is_need_refresh, is_price_assign_by_bot = urbtix_area_auto_select(driver, config_dict, area_keyword_item)
|
||||||
|
@ -5499,7 +5549,12 @@ def cityline_performance(driver, config_dict):
|
||||||
print("area_keyword:", area_keyword)
|
print("area_keyword:", area_keyword)
|
||||||
|
|
||||||
if len(area_keyword) > 0:
|
if len(area_keyword) > 0:
|
||||||
area_keyword_array = json.loads("["+ area_keyword +"]")
|
area_keyword_array = []
|
||||||
|
try:
|
||||||
|
area_keyword_array = json.loads("["+ area_keyword +"]")
|
||||||
|
except Exception as exc:
|
||||||
|
area_keyword_array = []
|
||||||
|
|
||||||
for area_keyword_item in area_keyword_array:
|
for area_keyword_item in area_keyword_array:
|
||||||
is_need_refresh, is_price_assign_by_bot = cityline_area_auto_select(driver, config_dict, area_keyword_item)
|
is_need_refresh, is_price_assign_by_bot = cityline_area_auto_select(driver, config_dict, area_keyword_item)
|
||||||
if not is_need_refresh:
|
if not is_need_refresh:
|
||||||
|
@ -6004,7 +6059,12 @@ def ibon_performance(driver, config_dict):
|
||||||
is_need_refresh = False
|
is_need_refresh = False
|
||||||
|
|
||||||
if len(area_keyword) > 0:
|
if len(area_keyword) > 0:
|
||||||
area_keyword_array = json.loads("["+ area_keyword +"]")
|
area_keyword_array = []
|
||||||
|
try:
|
||||||
|
area_keyword_array = json.loads("["+ area_keyword +"]")
|
||||||
|
except Exception as exc:
|
||||||
|
area_keyword_array = []
|
||||||
|
|
||||||
for area_keyword_item in area_keyword_array:
|
for area_keyword_item in area_keyword_array:
|
||||||
is_need_refresh, is_price_assign_by_bot = ibon_area_auto_select(driver, config_dict, area_keyword_item)
|
is_need_refresh, is_price_assign_by_bot = ibon_area_auto_select(driver, config_dict, area_keyword_item)
|
||||||
if not is_need_refresh:
|
if not is_need_refresh:
|
||||||
|
@ -6418,7 +6478,7 @@ def play_mp3(sound_filename):
|
||||||
playsound(sound_filename)
|
playsound(sound_filename)
|
||||||
except Exception as exc:
|
except Exception as exc:
|
||||||
msg=str(exc)
|
msg=str(exc)
|
||||||
print("play sound exeption:", msg)
|
#print("play sound exeption:", msg)
|
||||||
if platform.system() == 'Windows':
|
if platform.system() == 'Windows':
|
||||||
import winsound
|
import winsound
|
||||||
try:
|
try:
|
||||||
|
@ -8447,7 +8507,12 @@ def hkticketing_performance(driver, config_dict, domain_name):
|
||||||
print("area_keyword:", area_keyword)
|
print("area_keyword:", area_keyword)
|
||||||
|
|
||||||
if len(area_keyword) > 0:
|
if len(area_keyword) > 0:
|
||||||
area_keyword_array = json.loads("["+ area_keyword +"]")
|
area_keyword_array = []
|
||||||
|
try:
|
||||||
|
area_keyword_array = json.loads("["+ area_keyword +"]")
|
||||||
|
except Exception as exc:
|
||||||
|
area_keyword_array = []
|
||||||
|
|
||||||
for area_keyword_item in area_keyword_array:
|
for area_keyword_item in area_keyword_array:
|
||||||
is_need_refresh, is_price_assign_by_bot = hkticketing_area_auto_select(driver, config_dict, area_keyword_item)
|
is_need_refresh, is_price_assign_by_bot = hkticketing_area_auto_select(driver, config_dict, area_keyword_item)
|
||||||
if not is_need_refresh:
|
if not is_need_refresh:
|
||||||
|
@ -9283,7 +9348,12 @@ def kham_performance(driver, config_dict, ocr, Captcha_Browser, domain_name, mod
|
||||||
is_need_refresh = False
|
is_need_refresh = False
|
||||||
|
|
||||||
if len(area_keyword) > 0:
|
if len(area_keyword) > 0:
|
||||||
area_keyword_array = json.loads("["+ area_keyword +"]")
|
area_keyword_array = []
|
||||||
|
try:
|
||||||
|
area_keyword_array = json.loads("["+ area_keyword +"]")
|
||||||
|
except Exception as exc:
|
||||||
|
area_keyword_array = []
|
||||||
|
|
||||||
for area_keyword_item in area_keyword_array:
|
for area_keyword_item in area_keyword_array:
|
||||||
is_need_refresh, is_price_assign_by_bot = kham_area_auto_select(driver, domain_name, config_dict, area_keyword_item)
|
is_need_refresh, is_price_assign_by_bot = kham_area_auto_select(driver, domain_name, config_dict, area_keyword_item)
|
||||||
if not is_need_refresh:
|
if not is_need_refresh:
|
||||||
|
@ -10089,7 +10159,12 @@ def ticketplus_order_expansion_panel(driver, config_dict):
|
||||||
is_need_refresh = False
|
is_need_refresh = False
|
||||||
|
|
||||||
if len(area_keyword) > 0:
|
if len(area_keyword) > 0:
|
||||||
area_keyword_array = json.loads("["+ area_keyword +"]")
|
area_keyword_array = []
|
||||||
|
try:
|
||||||
|
area_keyword_array = json.loads("["+ area_keyword +"]")
|
||||||
|
except Exception as exc:
|
||||||
|
area_keyword_array = []
|
||||||
|
|
||||||
for area_keyword_item in area_keyword_array:
|
for area_keyword_item in area_keyword_array:
|
||||||
is_need_refresh, is_price_assign_by_bot = ticketplus_order_expansion_auto_select(driver, config_dict, area_keyword_item)
|
is_need_refresh, is_price_assign_by_bot = ticketplus_order_expansion_auto_select(driver, config_dict, area_keyword_item)
|
||||||
if not is_need_refresh:
|
if not is_need_refresh:
|
||||||
|
|
Loading…
Reference in New Issue