2023-01-29, support galaxy macau.

master
CHUN YU YAO 2023-01-30 02:14:55 +08:00
parent 65a6caa98f
commit d70bfc52ab
2 changed files with 113 additions and 59 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.26)" CONST_APP_VERSION = u"MaxBot (2023.01.29)"
CONST_HOMEPAGE_DEFAULT = "https://tixcraft.com" CONST_HOMEPAGE_DEFAULT = "https://tixcraft.com"
@ -5477,7 +5477,6 @@ def hkticketing_date_auto_select(driver, auto_select_mode, date_keyword, auto_re
date_keyword = format_keyword_string(date_keyword) date_keyword = format_keyword_string(date_keyword)
date_keyword_and = "" date_keyword_and = ""
form_select = None form_select = None
try: try:
form_select = driver.find_element(By.CSS_SELECTOR, '#p') form_select = driver.find_element(By.CSS_SELECTOR, '#p')
@ -5515,6 +5514,8 @@ def hkticketing_date_auto_select(driver, auto_select_mode, date_keyword, auto_re
if show_debug_message: if show_debug_message:
print("is_date_assigned:", is_date_assigned) print("is_date_assigned:", is_date_assigned)
#PS: some blocks are generate by ajax, not appear at first time.
formated_area_list = None
if not is_date_assigned: if not is_date_assigned:
area_list = None area_list = None
try: try:
@ -5524,8 +5525,6 @@ def hkticketing_date_auto_select(driver, auto_select_mode, date_keyword, auto_re
print("find #p options date list fail") print("find #p options date list fail")
print(exc) print(exc)
#PS: some blocks are generate by ajax, not appear at first time.
formated_area_list = None
if area_list is not None: if area_list is not None:
area_list_count = len(area_list) area_list_count = len(area_list)
if show_debug_message: if show_debug_message:
@ -5669,40 +5668,47 @@ def hkticketing_date_auto_select(driver, auto_select_mode, date_keyword, auto_re
pass pass
# alway, auto submit # alway, auto submit
if True: el_btn = None
el_btn = None try:
my_css_selector = "#buyButton > input"
el_btn = driver.find_element(By.CSS_SELECTOR, my_css_selector)
except Exception as exc:
pass
if el_btn is not None:
try: try:
my_css_selector = "#buyButton > input" if el_btn.is_enabled() and el_btn.is_displayed():
el_btn = driver.find_element(By.CSS_SELECTOR, my_css_selector) el_btn.click()
print("buy button pressed.")
ret = True
except Exception as exc: except Exception as exc:
pass # use plan B
if el_btn is not None:
try: try:
if el_btn.is_enabled() and el_btn.is_displayed(): print("force to click by js.")
el_btn.click() driver.execute_script("arguments[0].click();", el_btn)
print("buy button pressed.") ret = True
ret = True
except Exception as exc: except Exception as exc:
# use plan B pass
try: else:
print("force to click by js.")
driver.execute_script("arguments[0].click();", el_btn)
ret = True
except Exception as exc:
pass
'''
if auto_reload_coming_soon_page_enable: if auto_reload_coming_soon_page_enable:
# auto refresh for date list page. # auto refresh for date list page.
if not formated_area_list is None: is_need_refresh = True
if len(formated_area_list) == 0:
try: if is_date_assigned:
driver.refresh() # if select box assign.
time.sleep(0.4) is_need_refresh = False
except Exception as exc: else:
pass if not formated_area_list is None:
''' if len(formated_area_list) > 0:
# option waiting to assign at next loop.
is_need_refresh = False
if is_need_refresh:
try:
driver.refresh()
time.sleep(0.3)
except Exception as exc:
pass
return ret return ret
@ -5889,6 +5895,18 @@ def hkticketing_ticket_number_auto_select(driver, ticket_number):
by_method = By.CSS_SELECTOR by_method = By.CSS_SELECTOR
return assign_ticket_number_by_select(driver, ticket_number, by_method, selector_string) return assign_ticket_number_by_select(driver, ticket_number, by_method, selector_string)
def hkticketing_nav_to_footer(driver):
try:
el_nav = None
el_nav = driver.find_element(By.CSS_SELECTOR, '#wrapFooter')
if not el_nav is None:
builder = ActionChains(driver)
builder.move_to_element(el_nav)
builder.click(el_nav)
builder.perform()
except Exception as exc:
pass
def hkticketing_next_button_press(driver): def hkticketing_next_button_press(driver):
ret = False ret = False
@ -5901,15 +5919,8 @@ def hkticketing_next_button_press(driver):
if el_btn is not None: if el_btn is not None:
print("bingo, found next button, start to press") print("bingo, found next button, start to press")
hkticketing_nav_to_footer(driver)
try: try:
el_nav = None
el_nav = driver.find_element(By.CSS_SELECTOR, '#wrapFooter')
if not el_nav is None:
builder = ActionChains(driver)
builder.move_to_element(el_nav)
builder.click(el_nav)
builder.perform()
if el_btn.is_enabled() and el_btn.is_displayed(): if el_btn.is_enabled() and el_btn.is_displayed():
el_btn.click() el_btn.click()
ret = True ret = True
@ -5932,14 +5943,6 @@ def hkticketing_go_to_payment(driver):
if el_btn is not None: if el_btn is not None:
print("bingo, found next button, start to press") print("bingo, found next button, start to press")
try: try:
el_nav = None
el_nav = driver.find_element(By.CSS_SELECTOR, '#wrapFooter')
if not el_nav is None:
builder = ActionChains(driver)
builder.move_to_element(el_nav)
builder.click(el_nav)
builder.perform()
if el_btn.is_enabled() and el_btn.is_displayed(): if el_btn.is_enabled() and el_btn.is_displayed():
el_btn.click() el_btn.click()
ret = True ret = True
@ -5986,7 +5989,13 @@ def hkticketing_ticket_delivery_option(driver):
print("delivery_option fail") print("delivery_option fail")
print(exc) print(exc)
# clean block content.
return is_delivery_option_assigned
def hkticketing_hide_tickets_blocks(driver):
show_debug_message = True # debug.
show_debug_message = False # online
actionBlock_divs = None actionBlock_divs = None
try: try:
selector_string = 'div.actionBlock.note' selector_string = 'div.actionBlock.note'
@ -5999,9 +6008,26 @@ def hkticketing_ticket_delivery_option(driver):
print(exc) print(exc)
pass pass
return is_delivery_option_assigned detailModuleCopy_divs = None
try:
selector_string = 'div.detailModuleCopy'
detailModuleCopy_divs = driver.find_elements(By.CSS_SELECTOR, selector_string)
if not detailModuleCopy_divs is None:
driver.execute_script("arguments[0].innerHTML='';", detailModuleCopy_divs);
except Exception as exc:
pass
def hkticketing_performance(driver, config_dict): mapWrapper_divs = None
try:
selector_string = 'div.mapWrapper'
mapWrapper_divs = driver.find_elements(By.CSS_SELECTOR, selector_string)
if not mapWrapper_divs is None:
driver.execute_script("arguments[0].innerHTML='';", mapWrapper_divs);
except Exception as exc:
pass
def hkticketing_performance(driver, config_dict, domain_name):
show_debug_message = True # debug. show_debug_message = True # debug.
show_debug_message = False # online show_debug_message = False # online
@ -6052,6 +6078,12 @@ def hkticketing_performance(driver, config_dict):
except Exception as exc: except Exception as exc:
pass pass
# hide blocks.
hkticketing_hide_tickets_blocks(driver)
# goto bottom.
hkticketing_nav_to_footer(driver)
# choose ticket. # choose ticket.
ticket_number = str(config_dict["ticket_number"]) ticket_number = str(config_dict["ticket_number"])
is_ticket_number_assigned = hkticketing_ticket_number_auto_select(driver, ticket_number) is_ticket_number_assigned = hkticketing_ticket_number_auto_select(driver, ticket_number)
@ -6060,11 +6092,14 @@ def hkticketing_performance(driver, config_dict):
print("is_ticket_number_assigned:", is_ticket_number_assigned) print("is_ticket_number_assigned:", is_ticket_number_assigned)
# Select a delivery option # Select a delivery option
is_delivery_option_assigned = False is_delivery_option_assigned = True
if is_ticket_number_assigned: if not 'galaxymacau.com' in domain_name:
is_delivery_option_assigned = hkticketing_ticket_delivery_option(driver) # hkticketing
if show_debug_message: is_delivery_option_assigned = False
print("is_delivery_option_assigned:", is_delivery_option_assigned) if is_ticket_number_assigned:
is_delivery_option_assigned = hkticketing_ticket_delivery_option(driver)
if show_debug_message:
print("is_delivery_option_assigned:", is_delivery_option_assigned)
if is_delivery_option_assigned: if is_delivery_option_assigned:
auto_press_next_step_button = True auto_press_next_step_button = True
@ -6079,6 +6114,8 @@ def hkticketing_performance(driver, config_dict):
return is_price_assign_by_bot return is_price_assign_by_bot
def hkticketing_main(driver, url, config_dict): def hkticketing_main(driver, url, config_dict):
home_url_list = ['https://premier.hkticketing.com/' home_url_list = ['https://premier.hkticketing.com/'
,'https://hotshow.hkticketing.com/' ,'https://hotshow.hkticketing.com/'
@ -6111,10 +6148,14 @@ def hkticketing_main(driver, url, config_dict):
# https://premier.hkticketing.com/events/XXX/venues/KSH/performances/XXX/tickets # https://premier.hkticketing.com/events/XXX/venues/KSH/performances/XXX/tickets
if '/events/' in url and '/performances/' in url: if '/events/' in url and '/performances/' in url:
if '/tickets' in url: if '/tickets' in url:
domain_name = url.split('/')[2]
area_auto_select_enable = config_dict["tixcraft"]["area_auto_select"]["enable"] area_auto_select_enable = config_dict["tixcraft"]["area_auto_select"]["enable"]
if area_auto_select_enable: if area_auto_select_enable:
hkticketing_performance(driver, config_dict) hkticketing_performance(driver, config_dict, domain_name)
if '/seatmap' in url: if '/seatmap' in url:
# goto bottom.
hkticketing_nav_to_footer(driver)
hkticketing_go_to_payment(driver) hkticketing_go_to_payment(driver)
def khan_go_buy_redirect(driver): def khan_go_buy_redirect(driver):
@ -7139,6 +7180,8 @@ def main():
if 'hkticketing.com' in url: if 'hkticketing.com' in url:
hkticketing_main(driver, url, config_dict) hkticketing_main(driver, url, config_dict)
if 'galaxymacau.com' in url:
hkticketing_main(driver, url, config_dict)
# for facebook # for facebook
facebook_login_url = 'https://www.facebook.com/login.php?' facebook_login_url = 'https://www.facebook.com/login.php?'

View File

@ -19,7 +19,7 @@ import json
import webbrowser import webbrowser
import pyperclip import pyperclip
CONST_APP_VERSION = u"MaxBot (2023.01.26)" CONST_APP_VERSION = u"MaxBot (2023.01.29)"
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"
@ -1087,7 +1087,18 @@ def PreferenctTab(root, config_dict, language_code, UI_PADDING_X):
global combo_homepage global combo_homepage
combo_homepage = ttk.Combobox(frame_group_header, state="readonly") combo_homepage = ttk.Combobox(frame_group_header, state="readonly")
combo_homepage['values']= ("https://kktix.com","https://tixcraft.com (拓元)","https://teamear.tixcraft.com/ (添翼)","https://www.indievox.com/ (獨立音樂)","https://www.famiticket.com.tw (全網)","https://ticket.ibon.com.tw/","https://kham.com.tw/ (寬宏)","http://www.urbtix.hk/ (城市)","https://www.cityline.com/ (買飛)","https://premier.hkticketing.com/ (快達票)") combo_homepage['values']= ["https://kktix.com"
,"https://tixcraft.com (拓元)"
,"https://teamear.tixcraft.com/ (添翼)"
,"https://www.indievox.com/ (獨立音樂)"
,"https://www.famiticket.com.tw (全網)"
,"https://ticket.ibon.com.tw/"
,"https://kham.com.tw/ (寬宏)"
,"http://www.urbtix.hk/ (城市)"
,"https://www.cityline.com/ (買飛)"
,"https://premier.hkticketing.com/ (快達票)"
,"https://ticketing.galaxymacau.com/ (澳門銀河)"
]
combo_homepage.set(homepage) combo_homepage.set(homepage)
combo_homepage.bind("<<ComboboxSelected>>", callbackHomepageOnChange) combo_homepage.bind("<<ComboboxSelected>>", callbackHomepageOnChange)
combo_homepage.grid(column=1, row=group_row_count, sticky = W) combo_homepage.grid(column=1, row=group_row_count, sticky = W)