diff --git a/chrome_tixcraft.py b/chrome_tixcraft.py
index 8df754b..347a956 100644
--- a/chrome_tixcraft.py
+++ b/chrome_tixcraft.py
@@ -60,7 +60,7 @@ import webbrowser
import chromedriver_autoinstaller
-CONST_APP_VERSION = "MaxBot (2023.11.17)"
+CONST_APP_VERSION = "MaxBot (2023.11.18)"
CONST_MAXBOT_CONFIG_FILE = "settings.json"
CONST_MAXBOT_LAST_URL_FILE = "MAXBOT_LAST_URL.txt"
@@ -2072,7 +2072,7 @@ def get_matched_blocks_by_keyword_item_set(config_dict, auto_select_mode, keywor
if len(row_text) > 0:
if reset_row_text_if_match_keyword_exclude(config_dict, row_text):
row_text = ""
-
+
if len(row_text) > 0:
# start to compare, normalize all.
row_text = format_keyword_string(row_text)
@@ -2760,7 +2760,7 @@ def fill_common_verify_form(driver, config_dict, inferred_answer_string, fail_li
print("sent password by bot:", inferred_answer_string, " at #", len(fail_list))
except Exception as exc:
pass
-
+
return is_answer_sent, fail_list
def get_answer_list_from_user_guess_string(config_dict):
@@ -4475,7 +4475,7 @@ def kktix_reg_new_main(driver, config_dict, fail_list, captcha_sound_played, is_
for area_keyword_item in area_keyword_array:
is_ticket_number_assigned, is_need_refresh_tmp = kktix_assign_ticket_number(driver, config_dict, area_keyword_item)
-
+
# one of keywords not need to refresh, final is not refresh.
if not is_need_refresh_tmp:
is_need_refresh_final = False
@@ -5462,7 +5462,7 @@ def urbtix_area_auto_select(driver, config_dict, area_keyword_item):
if len(row_text) > 0:
if reset_row_text_if_match_keyword_exclude(config_dict, row_text):
row_text = ""
-
+
if len(row_text) > 0:
if ' disabled' in row_html:
row_text = ""
@@ -5473,7 +5473,7 @@ def urbtix_area_auto_select(driver, config_dict, area_keyword_item):
if '
a.btn')
return is_button_clicked
-def assign_text(driver, by, query, val, overwrite = False, submit=False):
+def assign_text(driver, by, query, val, overwrite = False, submit=False, overwrite_when = ""):
show_debug_message = True # debug.
show_debug_message = False # online
@@ -6711,15 +6711,29 @@ def assign_text(driver, by, query, val, overwrite = False, submit=False):
if inputed_text == val:
is_text_sent = True
else:
+ if len(overwrite_when) > 0:
+ if overwrite_when == inputed_text:
+ overwrite = True
if overwrite:
- el_text.clear()
is_do_keyin = True
if is_do_keyin:
- el_text.click()
- el_text.send_keys(val)
+ builder = ActionChains(driver)
+ builder.move_to_element(el_text)
+ builder.click(el_text)
+ if platform.system() == 'Darwin':
+ builder.key_down(Keys.COMMAND)
+ else:
+ builder.key_down(Keys.CONTROL)
+ builder.send_keys("a")
+ if platform.system() == 'Darwin':
+ builder.key_up(Keys.COMMAND)
+ else:
+ builder.key_up(Keys.CONTROL)
+ builder.send_keys(val)
if submit:
- el_text.send_keys(Keys.ENTER)
+ builder.send_keys(Keys.ENTER)
+ builder.perform()
is_text_sent = True
except Exception as exc:
if show_debug_message:
@@ -6991,6 +7005,40 @@ def ticket_login(driver, account, password):
return ret
+def udn_login(driver, account, password):
+ is_logined = False
+
+ el_login_li = None
+ try:
+ my_css_selector = '#LoginLI'
+ el_login_li = driver.find_element(By.CSS_SELECTOR, my_css_selector)
+ if not el_login_li is None:
+ li_html = el_login_li.get_attribute('outerHTML')
+ if 'display: none' in li_html:
+ is_logined = True
+ except Exception as exc:
+ pass
+
+ is_password_sent = False
+ if not is_logined:
+ if not el_login_li is None:
+ try:
+ el_login_li.click()
+ except Exception as exc:
+ print(exc)
+ try:
+ driver.set_script_timeout(1)
+ driver.execute_script("doLoginRWD();")
+ except Exception as exc2:
+ print(exc2)
+ pass
+
+ is_email_sent = assign_text(driver, By.CSS_SELECTOR, '#ID', account)
+ if is_email_sent:
+ is_password_sent = assign_text(driver, By.CSS_SELECTOR, '#password', password, submit=False)
+ return is_password_sent
+
+
def hkticketing_login(driver, account, password):
ret = False
el_email = None
@@ -7360,25 +7408,7 @@ def ticketmaster_captcha(driver, config_dict, ocr, Captcha_Browser, domain_name)
if current_url != last_url:
break
-def tixcraft_ad_footer(driver, config_dict):
- ad_div = None
- try:
- ad_div = driver.find_element(By.CSS_SELECTOR, '#ad-footer')
- if not ad_div is None:
- driver.execute_script("arguments[0].innerHTML='';", ad_div)
- except Exception as exc:
- #print(exc)
- pass
- try:
- ad_div = driver.find_element(By.CSS_SELECTOR, 'footer.footer')
- if not ad_div is None:
- driver.execute_script("arguments[0].innerHTML='';", ad_div)
- except Exception as exc:
- #print(exc)
- pass
-
def tixcraft_main(driver, url, config_dict, tixcraft_dict, ocr, Captcha_Browser):
- tixcraft_ad_footer(driver, config_dict)
tixcraft_home_close_window(driver, config_dict)
home_url_list = ['https://tixcraft.com/'
@@ -7464,14 +7494,14 @@ def tixcraft_main(driver, url, config_dict, tixcraft_dict, ocr, Captcha_Browser)
def kktix_paused_main(driver, url, config_dict, kktix_dict):
if '/registrations/new' in url:
-
+
# part 1: check recaptch div.
recaptcha_div = None
try:
recaptcha_div = driver.find_element(By.CSS_SELECTOR, '.event-captcha-info')
except Exception as exc:
pass
-
+
if not recaptcha_div is None:
select_query = '.ng-hide'
class_name = 'ng-hide'
@@ -7572,8 +7602,7 @@ def urbtix_performance_confirm_dialog_popup(driver):
is_visible = False
try:
if el_div.is_enabled():
- if el_div.is_displayed():
- is_visible = True
+ is_visible = True
except Exception as exc:
pass
@@ -8581,39 +8610,6 @@ def ibon_main(driver, url, config_dict, ibon_dict, ocr, Captcha_Browser):
return ibon_dict
-def hkticketing_home(driver):
- show_debug_message = True # debug.
- show_debug_message = False # online
-
- # OMG, I forgot why I wrote this code.
- '''
- body_iframe = None
- body_iframe_list = None
- try:
- body_iframe_list = driver.find_elements(By.CSS_SELECTOR, 'body > iframe')
- except Exception as exc:
- if show_debug_message:
- print("find body_iframe fail")
- pass
-
- hotshow_btn = None
- if not body_iframe_list is None:
- if show_debug_message:
- print("iframe count:", len(body_iframe_list))
- for each_iframe in body_iframe_list:
- try:
- driver.switch_to.frame(each_iframe)
- hotshow_btn = driver.find_element(By.CSS_SELECTOR, 'div.hotshow > a.btn')
- if not hotshow_btn is None:
- if hotshow_btn.is_enabled() and hotshow_btn.is_displayed():
- hotshow_btn.click()
- except Exception as exc:
- pass
- if show_debug_message:
- print("find hotshow btn fail:", exc)
- driver.switch_to.default_content()
- '''
-
def hkticketing_accept_cookie(driver):
show_debug_message = True # debug.
show_debug_message = False # online
@@ -9145,7 +9141,7 @@ def hkticketing_next_button_press(driver):
print(exc)
if not el_btn is None:
- print("bingo, found next button, start to press")
+ #print("bingo, found next button, start to press")
hkticketing_nav_to_footer(driver)
try:
if el_btn.is_enabled() and el_btn.is_displayed():
@@ -9168,7 +9164,7 @@ def hkticketing_go_to_payment(driver):
print(exc)
if not el_btn is None:
- print("bingo, found next button, start to press")
+ #print("bingo, found next button, start to press")
try:
if el_btn.is_enabled() and el_btn.is_displayed():
el_btn.click()
@@ -9515,19 +9511,6 @@ def hkticketing_travel_iframe(driver, config_dict):
return is_redirected
def softix_powerweb_main(driver, url, config_dict, hkticketing_dict):
- home_url_list = ['https://premier.hkticketing.com/'
- ,'https://hotshow.hkticketing.com/'
- ,'https://premier.hkticketing.com/default.aspx'
- ,'https://hotshow.hkticketing.com/default.aspx'
- ,'https://premier.hkticketing.com/Membership/Login.aspx'
- ,'https://hotshow.hkticketing.com/Membership/Login.aspx'
- ,'https://premier.hkticketing.com/Secure/ShowLogin.aspx'
- ]
- for each_url in home_url_list:
- if each_url == url:
- hkticketing_home(driver)
- break
-
hkticketing_accept_cookie(driver)
is_redirected = hkticketing_url_redirect(driver, url, config_dict)
@@ -9602,6 +9585,8 @@ def khan_go_buy_redirect(driver, domain_name):
is_button_clicked = force_press_button(driver, By.CSS_SELECTOR, 'p > a > button.red')
if 'ticket.com' in domain_name:
is_button_clicked = force_press_button(driver, By.CSS_SELECTOR, 'div.row > div > a.btn.btn-order.btn-block')
+ if 'udnfunlife.com' in domain_name:
+ is_button_clicked = force_press_button(driver, By.CSS_SELECTOR, '#buttonBuy')
return is_button_clicked
def hkam_date_auto_select(driver, domain_name, config_dict):
@@ -9627,6 +9612,8 @@ def hkam_date_auto_select(driver, domain_name, config_dict):
my_css_selector = "table.eventTABLE > tbody > tr"
if 'ticket.com' in domain_name:
my_css_selector = "div.description > table.table.table-striped.itable > tbody > tr"
+ if 'udnfunlife.com' in domain_name:
+ my_css_selector = "div.yd_session-block"
area_list = driver.find_elements(By.CSS_SELECTOR, my_css_selector)
except Exception as exc:
@@ -9667,35 +9654,45 @@ def hkam_date_auto_select(driver, domain_name, config_dict):
row_text = ""
if len(row_text) > 0:
- if "