2023-12-18
parent
f9de28d2c5
commit
ee7da6a121
|
@ -54,7 +54,7 @@ import webbrowser
|
||||||
|
|
||||||
import chromedriver_autoinstaller
|
import chromedriver_autoinstaller
|
||||||
|
|
||||||
CONST_APP_VERSION = "MaxBot (2023.12.17)"
|
CONST_APP_VERSION = "MaxBot (2023.12.18)"
|
||||||
|
|
||||||
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"
|
||||||
|
@ -376,8 +376,7 @@ def is_all_alpha_or_numeric(text):
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
def get_favoriate_extension_path(webdriver_path, config_dict):
|
def get_favoriate_extension_path(webdriver_path, config_dict):
|
||||||
print("webdriver_path:", webdriver_path)
|
#print("webdriver_path:", webdriver_path)
|
||||||
|
|
||||||
extension_list = []
|
extension_list = []
|
||||||
if config_dict["advanced"]["adblock_plus_enable"]:
|
if config_dict["advanced"]["adblock_plus_enable"]:
|
||||||
extension_list.append(os.path.join(webdriver_path,"Adblock_3.21.1.0.crx"))
|
extension_list.append(os.path.join(webdriver_path,"Adblock_3.21.1.0.crx"))
|
||||||
|
@ -605,7 +604,7 @@ def get_uc_options(uc, config_dict, webdriver_path):
|
||||||
load_extension_path += ("," + os.path.abspath(ext))
|
load_extension_path += ("," + os.path.abspath(ext))
|
||||||
|
|
||||||
if len(load_extension_path) > 0:
|
if len(load_extension_path) > 0:
|
||||||
print('load-extension:', load_extension_path[1:])
|
#print('load-extension:', load_extension_path[1:])
|
||||||
options.add_argument('--load-extension=' + load_extension_path[1:])
|
options.add_argument('--load-extension=' + load_extension_path[1:])
|
||||||
|
|
||||||
if config_dict["advanced"]["headless"]:
|
if config_dict["advanced"]["headless"]:
|
||||||
|
@ -654,6 +653,9 @@ def load_chromdriver_uc(config_dict):
|
||||||
print("ChromeDriver not exist, try to download to:", webdriver_path)
|
print("ChromeDriver not exist, try to download to:", webdriver_path)
|
||||||
try:
|
try:
|
||||||
chromedriver_autoinstaller.install(path=webdriver_path, make_version_dir=False)
|
chromedriver_autoinstaller.install(path=webdriver_path, make_version_dir=False)
|
||||||
|
if not os.path.exists(chromedriver_path):
|
||||||
|
print("check installed chrome version fail, download last known good version.")
|
||||||
|
chromedriver_autoinstaller.install(path=webdriver_path, make_version_dir=False, detect_installed_version=False)
|
||||||
except Exception as exc:
|
except Exception as exc:
|
||||||
print(exc)
|
print(exc)
|
||||||
else:
|
else:
|
||||||
|
@ -699,7 +701,7 @@ def load_chromdriver_uc(config_dict):
|
||||||
print("WebDriver not found at path:", chromedriver_path)
|
print("WebDriver not found at path:", chromedriver_path)
|
||||||
|
|
||||||
if driver is None:
|
if driver is None:
|
||||||
print('WebDriver object is None..., try again..')
|
print('WebDriver object is still None..., try download by uc.')
|
||||||
try:
|
try:
|
||||||
options = get_uc_options(uc, config_dict, webdriver_path)
|
options = get_uc_options(uc, config_dict, webdriver_path)
|
||||||
driver = uc.Chrome(options=options)
|
driver = uc.Chrome(options=options)
|
||||||
|
@ -3980,94 +3982,6 @@ def force_check_checkbox(driver, agree_checkbox):
|
||||||
is_finish_checkbox_click = True
|
is_finish_checkbox_click = True
|
||||||
return is_finish_checkbox_click
|
return is_finish_checkbox_click
|
||||||
|
|
||||||
|
|
||||||
def kktix_check_register_status(driver, url):
|
|
||||||
#ex: https://xxx.kktix.cc/events/xxx
|
|
||||||
prefix_list = ['.com/events/','.cc/events/']
|
|
||||||
postfix = '/registrations/new'
|
|
||||||
|
|
||||||
is_match_event_code = False
|
|
||||||
event_code = ""
|
|
||||||
for prefix in prefix_list:
|
|
||||||
event_code = find_between(url,prefix,postfix)
|
|
||||||
if len(event_code) > 0:
|
|
||||||
is_match_event_code = True
|
|
||||||
#print('event_code:',event_code)
|
|
||||||
break
|
|
||||||
|
|
||||||
if is_match_event_code:
|
|
||||||
js = '''
|
|
||||||
function load_kktix_register_code(){
|
|
||||||
let api_url = "https://kktix.com/g/events/%s/register_info";
|
|
||||||
fetch(api_url).then(function (response)
|
|
||||||
{
|
|
||||||
return response.json();
|
|
||||||
}
|
|
||||||
).then(function (data)
|
|
||||||
{
|
|
||||||
let reload=false;
|
|
||||||
console.log(data.inventory.registerStatus);
|
|
||||||
if(data.inventory.registerStatus=='OUT_OF_STOCK') {reload=true;}
|
|
||||||
if(data.inventory.registerStatus=='COMING_SOON') {reload=true;}
|
|
||||||
console.log(reload);
|
|
||||||
if(reload) {location.reload();}
|
|
||||||
}
|
|
||||||
).catch(function (err)
|
|
||||||
{
|
|
||||||
console.log(err);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if (!$.kkUser) {
|
|
||||||
$.kkUser = {};
|
|
||||||
}
|
|
||||||
if (typeof $.kkUser.checked_status_register_code === 'undefined') {
|
|
||||||
$.kkUser.checked_status_register_code = true;
|
|
||||||
load_kktix_register_code();
|
|
||||||
}
|
|
||||||
''' % (event_code)
|
|
||||||
try:
|
|
||||||
driver.execute_script(js)
|
|
||||||
except Exception as exc:
|
|
||||||
pass
|
|
||||||
|
|
||||||
# use javascritp version only.
|
|
||||||
is_match_event_code = False
|
|
||||||
|
|
||||||
html_result = None
|
|
||||||
if is_match_event_code:
|
|
||||||
url = "https://kktix.com/g/events/%s/register_info" % (event_code)
|
|
||||||
#print('event_code:',event_code)
|
|
||||||
#print("url:", url)
|
|
||||||
|
|
||||||
user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36'
|
|
||||||
headers = {"Accept-Language": "zh-TW,zh;q=0.5", 'User-Agent': user_agent}
|
|
||||||
try:
|
|
||||||
html_result = requests.get(url , headers=headers, timeout=0.7, allow_redirects=False)
|
|
||||||
except Exception as exc:
|
|
||||||
html_result = None
|
|
||||||
print("send reg_info request fail:")
|
|
||||||
print(exc)
|
|
||||||
|
|
||||||
registerStatus = None
|
|
||||||
if not html_result is None:
|
|
||||||
status_code = html_result.status_code
|
|
||||||
#print("status_code:",status_code)
|
|
||||||
if status_code == 200:
|
|
||||||
html_text = html_result.text
|
|
||||||
#print("html_text:", html_text)
|
|
||||||
try:
|
|
||||||
jsLoads = json.loads(html_text)
|
|
||||||
if 'inventory' in jsLoads:
|
|
||||||
if 'registerStatus' in jsLoads['inventory']:
|
|
||||||
registerStatus = jsLoads['inventory']['registerStatus']
|
|
||||||
except Exception as exc:
|
|
||||||
print("load reg_info json fail:")
|
|
||||||
print(exc)
|
|
||||||
pass
|
|
||||||
|
|
||||||
#print("registerStatus:", registerStatus)
|
|
||||||
return registerStatus
|
|
||||||
|
|
||||||
def get_answer_string_from_web_date(CONST_EXAMPLE_SYMBOL, CONST_INPUT_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
|
||||||
|
@ -4687,20 +4601,9 @@ def kktix_reg_new_main(driver, config_dict, fail_list, captcha_sound_played, is_
|
||||||
def kktix_reg_auto_reload(driver, url, config_dict, kktix_register_status_last):
|
def kktix_reg_auto_reload(driver, url, config_dict, kktix_register_status_last):
|
||||||
registerStatus = kktix_register_status_last
|
registerStatus = kktix_register_status_last
|
||||||
|
|
||||||
# auto refresh for area list page.
|
# auto reload javascrit code at extension.
|
||||||
is_need_refresh = False
|
is_need_refresh = False
|
||||||
|
|
||||||
if not is_need_refresh:
|
|
||||||
if registerStatus is None:
|
|
||||||
# current version, change refresh event from selenium to javascript.
|
|
||||||
registerStatus = kktix_check_register_status(driver, url)
|
|
||||||
# for request solution, refresh on selenium.
|
|
||||||
if not registerStatus is None:
|
|
||||||
print("registerStatus:", registerStatus)
|
|
||||||
# OUT_OF_STOCK
|
|
||||||
if registerStatus != 'IN_STOCK':
|
|
||||||
is_need_refresh = True
|
|
||||||
|
|
||||||
is_finish_checkbox_click = False
|
is_finish_checkbox_click = False
|
||||||
if not is_need_refresh:
|
if not is_need_refresh:
|
||||||
is_need_refresh, is_finish_checkbox_click = kktix_check_agree_checkbox(driver, config_dict)
|
is_need_refresh, is_finish_checkbox_click = kktix_check_agree_checkbox(driver, config_dict)
|
||||||
|
|
|
@ -22,7 +22,7 @@ import sys
|
||||||
import threading
|
import threading
|
||||||
import webbrowser
|
import webbrowser
|
||||||
|
|
||||||
CONST_APP_VERSION = "MaxBot (2023.12.17)"
|
CONST_APP_VERSION = "MaxBot (2023.12.18)"
|
||||||
|
|
||||||
CONST_MAXBOT_LAUNCHER_FILE = "config_launcher.json"
|
CONST_MAXBOT_LAUNCHER_FILE = "config_launcher.json"
|
||||||
CONST_MAXBOT_CONFIG_FILE = "settings.json"
|
CONST_MAXBOT_CONFIG_FILE = "settings.json"
|
||||||
|
|
|
@ -34,7 +34,7 @@ import ssl
|
||||||
|
|
||||||
ssl._create_default_https_context = ssl._create_unverified_context
|
ssl._create_default_https_context = ssl._create_unverified_context
|
||||||
|
|
||||||
CONST_APP_VERSION = "MaxBot (2023.12.17)"
|
CONST_APP_VERSION = "MaxBot (2023.12.18)"
|
||||||
|
|
||||||
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"
|
||||||
|
|
|
@ -27,7 +27,7 @@ import pyperclip
|
||||||
import tornado
|
import tornado
|
||||||
from tornado.web import Application
|
from tornado.web import Application
|
||||||
|
|
||||||
CONST_APP_VERSION = "MaxBot (2023.12.17)"
|
CONST_APP_VERSION = "MaxBot (2023.12.18)"
|
||||||
|
|
||||||
CONST_MAXBOT_QUESTION_FILE = "MAXBOT_QUESTION.txt"
|
CONST_MAXBOT_QUESTION_FILE = "MAXBOT_QUESTION.txt"
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
// price row.
|
||||||
|
$("table > tbody > tr.disabled").remove();
|
||||||
|
$("table > tbody > tr.sold-out").remove();
|
||||||
|
$("div.map > div > img").remove();
|
||||||
|
$("footer").remove();
|
|
@ -0,0 +1,3 @@
|
||||||
|
// price row.
|
||||||
|
$("#salesTable > tbody > tr.Soldout").remove();
|
||||||
|
$("div.footer").remove();
|
|
@ -1,6 +1,36 @@
|
||||||
$("footer").hide();
|
$("footer").remove();
|
||||||
function hideBannerAndImage() {
|
setTimeout(function () {
|
||||||
$("div.banner-wrapper").hide();
|
$("div.banner-wrapper").remove();
|
||||||
$("div.ticket-img-wrapper").hide();
|
$("div.ticket-img-wrapper").remove();
|
||||||
|
}, 300);
|
||||||
|
|
||||||
|
|
||||||
|
(function () {
|
||||||
|
const currentUrl = window.location.href;
|
||||||
|
const event_code = currentUrl.split('/')[4];
|
||||||
|
//console.log(currentUrl);
|
||||||
|
//console.log(event_code);
|
||||||
|
if(event_code){
|
||||||
|
let api_url = "https://kktix.com/g/events/"+ event_code +"/register_info";
|
||||||
|
$.get( api_url, function() {
|
||||||
|
//alert( "success" );
|
||||||
|
})
|
||||||
|
.done(function(data) {
|
||||||
|
//alert( "second success" );
|
||||||
|
let reload=false;
|
||||||
|
console.log(data.inventory.registerStatus);
|
||||||
|
// IN_STOCK
|
||||||
|
if(data.inventory.registerStatus=='OUT_OF_STOCK') {reload=true;}
|
||||||
|
if(data.inventory.registerStatus=='COMING_SOON') {reload=true;}
|
||||||
|
if(data.inventory.registerStatus=='SOLD_OUT') {reload=true;}
|
||||||
|
//console.log(reload);
|
||||||
|
//if(reload) {location.reload();}
|
||||||
|
})
|
||||||
|
.fail(function() {
|
||||||
|
//alert( "error" );
|
||||||
|
})
|
||||||
|
.always(function() {
|
||||||
|
//alert( "finished" );
|
||||||
|
});
|
||||||
}
|
}
|
||||||
setTimeout(hideBannerAndImage, 300);
|
})();
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
// price row.
|
||||||
|
$("ul.area-list > span > li:not(:has(a))").remove();
|
||||||
|
// description row.
|
||||||
|
$("ul.area-list > li:not(:has(a))").remove();
|
||||||
|
$("footer").remove();
|
|
@ -1,3 +1,3 @@
|
||||||
$("ul.area-list > li:not(:has(a))").hide();
|
$("ul.area-list > li:not(:has(a))").remove();
|
||||||
$("#selectseat div div img").hide();
|
$("#selectseat div div img").remove();
|
||||||
$("footer").hide();
|
$("footer").remove();
|
|
@ -1 +1 @@
|
||||||
$("footer").hide();
|
$("footer").remove();
|
|
@ -1,2 +1,2 @@
|
||||||
$("#newsHome").hide();
|
$("#newsHome").remove();
|
||||||
$("footer").hide();
|
$("footer").remove();
|
||||||
|
|
|
@ -3,8 +3,8 @@ $('input[type=checkbox]').each(function ()
|
||||||
$(this).prop('checked', true);
|
$(this).prop('checked', true);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
$("img[style='width: 100%; padding: 0;']").hide();
|
$("img[style='width: 100%; padding: 0;']").remove();
|
||||||
$("footer").hide();
|
$("footer").remove();
|
||||||
|
|
||||||
function assign_ticket_number(ticket_number)
|
function assign_ticket_number(ticket_number)
|
||||||
{
|
{
|
||||||
|
|
|
@ -16,10 +16,8 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"minimum_chrome_version": "77.0",
|
"minimum_chrome_version": "77.0",
|
||||||
"minimum_opera_version": "64.0",
|
|
||||||
"permissions": [
|
"permissions": [
|
||||||
"<all_urls>",
|
"<all_urls>",
|
||||||
"contextMenus",
|
|
||||||
"notifications",
|
"notifications",
|
||||||
"storage",
|
"storage",
|
||||||
"tabs",
|
"tabs",
|
||||||
|
@ -28,9 +26,6 @@
|
||||||
"webRequest",
|
"webRequest",
|
||||||
"webRequestBlocking"
|
"webRequestBlocking"
|
||||||
],
|
],
|
||||||
"host_permissions": [
|
|
||||||
"*://*/*"
|
|
||||||
],
|
|
||||||
"web_accessible_resources": [
|
"web_accessible_resources": [
|
||||||
"data/settings.json"
|
"data/settings.json"
|
||||||
],
|
],
|
||||||
|
@ -55,6 +50,21 @@
|
||||||
"run_at": "document_end",
|
"run_at": "document_end",
|
||||||
"js" : [ "jquery.min.js", "js/tixcraft_home.js" ]
|
"js" : [ "jquery.min.js", "js/tixcraft_home.js" ]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"matches" : [ "https://ticket.com.tw/application/UTK02/UTK0204_.aspx?*" ],
|
||||||
|
"run_at": "document_end",
|
||||||
|
"js" : [ "jquery.min.js", "js/ticket_area.js" ]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"matches" : [ "https://kham.com.tw/application/UTK02/UTK0204_.aspx?*" ],
|
||||||
|
"run_at": "document_end",
|
||||||
|
"js" : [ "jquery.min.js", "js/kham_area.js" ]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"matches" : [ "https://orders.ibon.com.tw/application/UTK02/UTK0201_000.aspx?*" ],
|
||||||
|
"run_at": "document_end",
|
||||||
|
"js" : [ "jquery.min.js", "js/ibon_area.js" ]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"matches" : [
|
"matches" : [
|
||||||
"https://kktix.com/events/*/registrations/new"
|
"https://kktix.com/events/*/registrations/new"
|
||||||
|
|
Loading…
Reference in New Issue