2022-11-13, fix a crash issue.

master
CHUN YU YAO 2022-11-13 12:50:53 +08:00
parent 9cd1af0f2b
commit d29df0ad64
2 changed files with 105 additions and 87 deletions

View File

@ -67,7 +67,7 @@ ssl._create_default_https_context = ssl._create_unverified_context
#附註1沒有寫的很好很多地方應該可以模組化。 #附註1沒有寫的很好很多地方應該可以模組化。
#附註2 #附註2
CONST_APP_VERSION = u"MaxBot (2022.11.12)" CONST_APP_VERSION = u"MaxBot (2022.11.13)"
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"
@ -1085,6 +1085,9 @@ def date_auto_select(driver, url, date_auto_select_mode, date_keyword, pass_date
# should use continue or break? # should use continue or break?
break break
if row_text is None
row_text = ""
if len(row_text) > 0: if len(row_text) > 0:
if len(date_keyword) == 0: if len(date_keyword) == 0:
# no keyword, match all. # no keyword, match all.
@ -1226,6 +1229,9 @@ def get_tixcraft_target_area(el, area_keyword, area_auto_select_mode, pass_1_sea
print("get text fail") print("get text fail")
break break
if row_text is None:
row_text = ""
if len(row_text) > 0: if len(row_text) > 0:
# clean stop word. # clean stop word.
row_text = format_keyword_string(row_text) row_text = format_keyword_string(row_text)
@ -1256,6 +1262,8 @@ def get_tixcraft_target_area(el, area_keyword, area_auto_select_mode, pass_1_sea
area_item_font_el = row.find_element(By.TAG_NAME, 'font') area_item_font_el = row.find_element(By.TAG_NAME, 'font')
if not area_item_font_el is None: if not area_item_font_el is None:
font_el_text = area_item_font_el.text font_el_text = area_item_font_el.text
if font_el_text is None:
font_el_text = ""
font_el_text = "@%s@" % (font_el_text) font_el_text = "@%s@" % (font_el_text)
if debugMode: if debugMode:
print('font tag text:', font_el_text) print('font tag text:', font_el_text)
@ -1370,7 +1378,7 @@ def area_auto_select(driver, url, area_keyword_1, area_keyword_2, area_keyword_3
if area_target is not None: if area_target is not None:
try: try:
print("area text:", area_target.text) #print("area text:", area_target.text)
area_target.click() area_target.click()
except Exception as exc: except Exception as exc:
print("click area a link fail, start to retry...") print("click area a link fail, start to retry...")
@ -1524,17 +1532,23 @@ def tixcraft_verify(driver, url):
captcha_password_string = None captcha_password_string = None
form_select = None form_select = None
question_text = ""
try: try:
form_select = driver.find_element(By.CSS_SELECTOR, '.zone-verify') form_select = driver.find_element(By.CSS_SELECTOR, '.zone-verify')
except Exception as exc:
print("find verify fail")
pass
question_text = None
if form_select is not None: if form_select is not None:
html_text = ""
try: try:
question_text = form_select.text question_text = form_select.text
html_text = question_text except Exception as exc:
print("get text fail")
html_text = ""
if question_text is not None:
if len(question_text) > 0:
html_text = question_text
html_text = html_text.replace(u'',u'') html_text = html_text.replace(u'',u'')
html_text = html_text.replace(u'',u'') html_text = html_text.replace(u'',u'')
html_text = html_text.replace(u'',u'') html_text = html_text.replace(u'',u'')
@ -1549,28 +1563,11 @@ def tixcraft_verify(driver, url):
#print("html_text:", html_text) #print("html_text:", html_text)
if u'' in html_text and u'' in html_text: if u'' in html_text and u'' in html_text:
# PS: 這個太容易沖突,因為問題類型太多,不能直接使用。
#captcha_password_string = find_between(html_text, u"【", u"】") #captcha_password_string = find_between(html_text, u"【", u"】")
pass pass
except Exception as exc:
print("get text fail")
except Exception as exc:
print("find verify fail")
pass
is_options_in_question = False is_options_in_question = False
html_text = question_text
html_text = html_text.replace(u'',u'(')
html_text = html_text.replace(u'',u'(')
html_text = html_text.replace(u'',u'(')
html_text = html_text.replace(u'',u'(')
html_text = html_text.replace(u'[',u'(')
html_text = html_text.replace(u'',u')')
html_text = html_text.replace(u'',u')')
html_text = html_text.replace(u'',u')')
html_text = html_text.replace(u'',u')')
html_text = html_text.replace(u']',u')')
#print("html_text", html_text)
answer_list, my_answer_delimitor = get_answer_list_by_question(html_text) answer_list, my_answer_delimitor = get_answer_list_by_question(html_text)
if u'請輸入"YES",代表您已詳閱且瞭解並同意' in html_text and u'實名制規則' in html_text: if u'請輸入"YES",代表您已詳閱且瞭解並同意' in html_text and u'實名制規則' in html_text:
@ -1673,6 +1670,9 @@ def tixcraft_ticket_main(driver, url, is_verifyCode_editing):
try: try:
#form_select = driver.find_element(By.TAG_NAME, 'select') #form_select = driver.find_element(By.TAG_NAME, 'select')
form_select = driver.find_element(By.CSS_SELECTOR, '.mobile-select') form_select = driver.find_element(By.CSS_SELECTOR, '.mobile-select')
except Exception as exc:
print("find select fail")
pass
if form_select is not None: if form_select is not None:
try: try:
@ -1702,10 +1702,6 @@ def tixcraft_ticket_main(driver, url, is_verifyCode_editing):
# do nothing here. # do nothing here.
pass pass
except Exception as exc:
print("find select fail")
pass
return is_verifyCode_editing return is_verifyCode_editing
# PS: There are two "Next" button in kktix. # PS: There are two "Next" button in kktix.
@ -1898,6 +1894,9 @@ def kktix_travel_price_list(driver, kktix_area_keyword, kktix_date_keyword):
is_travel_interrupted = True is_travel_interrupted = True
print("get text fail.") print("get text fail.")
if row_text is None:
row_text = ""
if len(row_text) > 0: if len(row_text) > 0:
# clean stop word. # clean stop word.
row_text = format_keyword_string(row_text) row_text = format_keyword_string(row_text)
@ -2008,8 +2007,8 @@ def kktix_assign_ticket_number(driver, ticket_number, kktix_area_keyword, kktix_
if target_area is not None: if target_area is not None:
if show_debug_message: if show_debug_message:
print('try to get input box element.') print('try to get input box element.')
#print("target_area text", target_area.text)
try: try:
#print("target_area text", target_area.text)
ticket_price_input = target_area.find_element(By.CSS_SELECTOR, "input[type='text']") ticket_price_input = target_area.find_element(By.CSS_SELECTOR, "input[type='text']")
except Exception as exc: except Exception as exc:
pass pass
@ -2074,11 +2073,19 @@ def kktix_get_web_datetime(url, registrationsNewApp_div):
if el_web_datetime_list_count > 0: if el_web_datetime_list_count > 0:
el_web_datetime = None el_web_datetime = None
for el_web_datetime in el_web_datetime_list: for el_web_datetime in el_web_datetime_list:
el_web_datetime_text = None
try: try:
el_web_datetime_text = el_web_datetime.text el_web_datetime_text = el_web_datetime.text
if show_debug_message: if show_debug_message:
print("el_web_datetime_text:", el_web_datetime_text) print("el_web_datetime_text:", el_web_datetime_text)
except Exception as exc:
if show_debug_message:
print('parse web datetime fail:')
print(exc)
pass
if el_web_datetime_text is not None:
if len(el_web_datetime_text) > 0:
now = datetime.now() now = datetime.now()
#print("now:", now) #print("now:", now)
for guess_year in range(now.year,now.year+3): for guess_year in range(now.year,now.year+3):
@ -2088,14 +2095,8 @@ def kktix_get_web_datetime(url, registrationsNewApp_div):
web_datetime = el_web_datetime_text web_datetime = el_web_datetime_text
is_found_web_datetime = True is_found_web_datetime = True
break break
if is_found_web_datetime: if is_found_web_datetime:
break break
except Exception as exc:
if show_debug_message:
print('parse web datetime fail:')
print(exc)
pass
else: else:
print("find td.ng-binding fail") print("find td.ng-binding fail")
@ -2239,6 +2240,9 @@ def kktix_reg_new_main(url, answer_index, registrationsNewApp_div, is_finish_che
except Exception as exc: except Exception as exc:
pass pass
if captcha_text_div_text is None:
captcha_text_div_text = ""
if show_debug_message: if show_debug_message:
print("captcha_text_div_text:", captcha_text_div_text) print("captcha_text_div_text:", captcha_text_div_text)
@ -2819,7 +2823,6 @@ def get_fami_target_area(date_keyword, area_keyword_1, area_keyword_2, area_keyw
if area_auto_select_mode == CONST_FROM_TOP_TO_BOTTOM: if area_auto_select_mode == CONST_FROM_TOP_TO_BOTTOM:
print("only need first item, break area list loop.") print("only need first item, break area list loop.")
break break
else: else:
# match keyword. # match keyword.
row_index = 0 row_index = 0
@ -2863,6 +2866,9 @@ def get_fami_target_area(date_keyword, area_keyword_1, area_keyword_2, area_keyw
print("get row text fail") print("get row text fail")
break break
if row_text is None:
row_text = ""
if len(row_text) > 0: if len(row_text) > 0:
# check date. # check date.
is_match_date = False is_match_date = False
@ -3171,6 +3177,9 @@ def urbtix_area_auto_select(driver, url, kktix_area_keyword, kktix_date_keyword)
print("get text fail") print("get text fail")
break break
if row_text is None:
row_text = ""
if len(row_text) > 0: if len(row_text) > 0:
#print("area row_text:", row_index, row_text) #print("area row_text:", row_index, row_text)
if kktix_area_keyword in row_text: if kktix_area_keyword in row_text:
@ -3305,6 +3314,9 @@ def cityline_area_auto_select(url, kktix_area_keyword):
print("get text fail") print("get text fail")
break break
if row_text is None:
row_text = ""
if len(row_text) > 0: if len(row_text) > 0:
# for debug. # for debug.
#print("area row_text:", row_index, row_text) #print("area row_text:", row_index, row_text)
@ -3390,6 +3402,9 @@ def cityline_area_selected_text(url):
print("get text fail") print("get text fail")
break break
if row_text is None:
row_text = ""
if len(row_text) > 0: if len(row_text) > 0:
el = None el = None
try: try:
@ -3424,6 +3439,9 @@ def cityline_ticket_number_auto_select(url):
selected_value = el.text selected_value = el.text
#print("selected_value:", selected_value) #print("selected_value:", selected_value)
if selected_value is None:
selected_value = ""
if selected_value == "0": if selected_value == "0":
el.click() el.click()
time.sleep(0.3) time.sleep(0.3)

View File

@ -19,7 +19,7 @@ import sys
import platform import platform
import json import json
CONST_APP_VERSION = u"MaxBot (2022.11.12)" CONST_APP_VERSION = u"MaxBot (2022.11.13)"
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"
@ -1283,7 +1283,7 @@ def main():
GUI_SIZE_HEIGHT = 522 GUI_SIZE_HEIGHT = 522
GUI_SIZE_MACOS = str(GUI_SIZE_WIDTH) + 'x' + str(GUI_SIZE_HEIGHT) GUI_SIZE_MACOS = str(GUI_SIZE_WIDTH) + 'x' + str(GUI_SIZE_HEIGHT)
GUI_SIZE_WINDOWS=str(GUI_SIZE_WIDTH-60) + 'x' + str(GUI_SIZE_HEIGHT-40) GUI_SIZE_WINDOWS=str(GUI_SIZE_WIDTH-30) + 'x' + str(GUI_SIZE_HEIGHT-40)
GUI_SIZE =GUI_SIZE_MACOS GUI_SIZE =GUI_SIZE_MACOS
import platform import platform