2024-01-17, fix for ibon verification, maxbot plus extension add new tab to access local dictionary.
parent
f16e5f62d9
commit
d79bd8dfa3
|
@ -41,7 +41,7 @@ try:
|
||||||
except Exception as exc:
|
except Exception as exc:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
CONST_APP_VERSION = "MaxBot (2024.01.16)"
|
CONST_APP_VERSION = "MaxBot (2024.01.17)"
|
||||||
|
|
||||||
CONST_MAXBOT_ANSWER_ONLINE_FILE = "MAXBOT_ONLINE_ANSWER.txt"
|
CONST_MAXBOT_ANSWER_ONLINE_FILE = "MAXBOT_ONLINE_ANSWER.txt"
|
||||||
CONST_MAXBOT_CONFIG_FILE = "settings.json"
|
CONST_MAXBOT_CONFIG_FILE = "settings.json"
|
||||||
|
@ -2951,23 +2951,28 @@ def fill_common_verify_form(driver, config_dict, inferred_answer_string, fail_li
|
||||||
# PS: sometime may send key twice...
|
# PS: sometime may send key twice...
|
||||||
form_input_1.clear()
|
form_input_1.clear()
|
||||||
form_input_1.send_keys(inferred_answer_string)
|
form_input_1.send_keys(inferred_answer_string)
|
||||||
|
except Exception as exc:
|
||||||
|
if show_debug_message:
|
||||||
|
print(exc)
|
||||||
|
pass
|
||||||
|
|
||||||
is_button_clicked = False
|
is_button_clicked = False
|
||||||
|
try:
|
||||||
if is_do_press_next_button:
|
if is_do_press_next_button:
|
||||||
if submit_by_enter:
|
if submit_by_enter:
|
||||||
form_input_1.send_keys(Keys.ENTER)
|
form_input_1.send_keys(Keys.ENTER)
|
||||||
is_button_clicked = True
|
is_button_clicked = True
|
||||||
if len(next_step_button_css) > 0:
|
if len(next_step_button_css) > 0:
|
||||||
is_button_clicked = force_press_button(driver, By.CSS_SELECTOR, next_step_button_css)
|
is_button_clicked = force_press_button(driver, By.CSS_SELECTOR, next_step_button_css)
|
||||||
|
except Exception as exc:
|
||||||
|
if show_debug_message:
|
||||||
|
print(exc)
|
||||||
|
pass
|
||||||
if is_button_clicked:
|
if is_button_clicked:
|
||||||
is_answer_sent = True
|
is_answer_sent = True
|
||||||
fail_list.append(inferred_answer_string)
|
fail_list.append(inferred_answer_string)
|
||||||
if show_debug_message:
|
if show_debug_message:
|
||||||
print("sent password by bot:", inferred_answer_string, " at #", len(fail_list))
|
print("sent password by bot:", inferred_answer_string, " at #", len(fail_list))
|
||||||
except Exception as exc:
|
|
||||||
if show_debug_message:
|
|
||||||
print(exc)
|
|
||||||
pass
|
|
||||||
|
|
||||||
if is_answer_sent:
|
if is_answer_sent:
|
||||||
for i in range(3):
|
for i in range(3):
|
||||||
|
@ -8475,17 +8480,18 @@ def cityline_main(driver, url, config_dict):
|
||||||
cityline_shows_goto_cta(driver)
|
cityline_shows_goto_cta(driver)
|
||||||
|
|
||||||
def get_ibon_question_text(driver):
|
def get_ibon_question_text(driver):
|
||||||
form_select = None
|
question_div = None
|
||||||
try:
|
try:
|
||||||
form_select = driver.find_element(By.CSS_SELECTOR, 'div.editor-box > div > div.form-group > label')
|
content_div = driver.find_element(By.CSS_SELECTOR, '#content')
|
||||||
|
question_div = content_div.find_element(By.CSS_SELECTOR, 'label')
|
||||||
except Exception as exc:
|
except Exception as exc:
|
||||||
print("find verify textbox fail")
|
print("find verify textbox fail")
|
||||||
pass
|
pass
|
||||||
|
|
||||||
question_text = ""
|
question_text = ""
|
||||||
if not form_select is None:
|
if not question_div is None:
|
||||||
try:
|
try:
|
||||||
question_text = form_select.text
|
question_text = question_div.text
|
||||||
except Exception as exc:
|
except Exception as exc:
|
||||||
print("get text fail")
|
print("get text fail")
|
||||||
|
|
||||||
|
|
|
@ -22,7 +22,7 @@ import sys
|
||||||
import threading
|
import threading
|
||||||
import webbrowser
|
import webbrowser
|
||||||
|
|
||||||
CONST_APP_VERSION = "MaxBot (2024.01.16)"
|
CONST_APP_VERSION = "MaxBot (2024.01.17)"
|
||||||
|
|
||||||
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"
|
||||||
|
|
|
@ -40,7 +40,7 @@ try:
|
||||||
except Exception as exc:
|
except Exception as exc:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
CONST_APP_VERSION = "MaxBot (2024.01.16)"
|
CONST_APP_VERSION = "MaxBot (2024.01.17)"
|
||||||
|
|
||||||
CONST_MAXBOT_ANSWER_ONLINE_FILE = "MAXBOT_ONLINE_ANSWER.txt"
|
CONST_MAXBOT_ANSWER_ONLINE_FILE = "MAXBOT_ONLINE_ANSWER.txt"
|
||||||
CONST_MAXBOT_CONFIG_FILE = "settings.json"
|
CONST_MAXBOT_CONFIG_FILE = "settings.json"
|
||||||
|
|
|
@ -1,84 +1,6 @@
|
||||||
var myInterval = null;
|
var myInterval = null;
|
||||||
//console.log("assign appear");
|
//console.log("assign appear");
|
||||||
|
|
||||||
function kktix_area_keyword(settings, register_info)
|
|
||||||
{
|
|
||||||
let area_keyword_array = [];
|
|
||||||
if(settings.area_auto_select.area_keyword.length > 0) {
|
|
||||||
area_keyword_array = JSON.parse('[' + settings.area_auto_select.area_keyword +']');
|
|
||||||
}
|
|
||||||
// console.log(area_keyword_array);
|
|
||||||
let target_area = [];
|
|
||||||
if(area_keyword_array.length) {
|
|
||||||
for (let i = 0; i < area_keyword_array.length; i++) {
|
|
||||||
let matched_block=[];
|
|
||||||
|
|
||||||
$("div.ticket-unit").each(function ()
|
|
||||||
{
|
|
||||||
let html_text=$(this).text();
|
|
||||||
if(html_text.indexOf(area_keyword_array[i])>-1) {
|
|
||||||
matched_block.push($(this));
|
|
||||||
}
|
|
||||||
target_area = get_target_area_with_order(settings, matched_block);
|
|
||||||
});
|
|
||||||
|
|
||||||
if (matched_block.length) {
|
|
||||||
console.log("match keyword:" + area_keyword_array[i]);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
let query_string = "div.ticket-unit";
|
|
||||||
let matched_block=$(query_string);
|
|
||||||
target_area = get_target_area_with_order(settings, matched_block);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (target_area.length) {
|
|
||||||
let first_node = target_area.find(":first-child");
|
|
||||||
let link_id = first_node.attr("id");
|
|
||||||
//console.log("link_id: " + link_id);
|
|
||||||
if(link_id) {
|
|
||||||
$('input[type=checkbox]').each(function() {
|
|
||||||
//$(this).prop('checked', true);
|
|
||||||
if(!$(this).is(':checked')) {
|
|
||||||
$(this).click();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
let seat_inventory_key=link_id.split("_")[1];
|
|
||||||
let seat_inventory_number=register_info.inventory.seatInventory[seat_inventory_key];
|
|
||||||
let ticket_number = settings.ticket_number;
|
|
||||||
if(seat_inventory_number<ticket_number) {
|
|
||||||
ticket_number=seat_inventory_number;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(ticket_number>0) {
|
|
||||||
/*
|
|
||||||
let target_input = target_area.find("input");
|
|
||||||
target_input.click();
|
|
||||||
target_input.prop("value", ticket_number);
|
|
||||||
let down = $.Event('keydown');
|
|
||||||
down.key=""+ticket_number;
|
|
||||||
target_input.trigger(down);
|
|
||||||
|
|
||||||
let up = $.Event('keyup');
|
|
||||||
up.key=""+ticket_number;
|
|
||||||
target_input.trigger(up);
|
|
||||||
*/
|
|
||||||
let add_button = target_area.find('button[ng-click="quantityBtnClick(1)"]');
|
|
||||||
for(let i=0; i<ticket_number; i++) {
|
|
||||||
add_button.click();
|
|
||||||
}
|
|
||||||
|
|
||||||
let $next_btn = $('div.register-new-next-button-area > button');
|
|
||||||
$next_btn.click();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
console.log("not target_area found.")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function begin()
|
function begin()
|
||||||
{
|
{
|
||||||
console.log("begin to next");
|
console.log("begin to next");
|
||||||
|
|
|
@ -0,0 +1,48 @@
|
||||||
|
const storage = chrome.storage.local;
|
||||||
|
var settings = null;
|
||||||
|
|
||||||
|
function ibon_verification_main() {
|
||||||
|
let user_guess_string_array = [];
|
||||||
|
if(settings) {
|
||||||
|
if(settings.advanced.user_guess_string.length > 0) {
|
||||||
|
if(settings.advanced.user_guess_string!='""') {
|
||||||
|
user_guess_string_array = JSON.parse('[' + settings.advanced.user_guess_string +']');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let target_row=null;
|
||||||
|
let all_row = $("div.editor-box > div > div.form-group > input[type='text']");
|
||||||
|
if (all_row.length > 0 && user_guess_string_array.length > 0)
|
||||||
|
{
|
||||||
|
//console.log("input count:" + all_row.length);
|
||||||
|
let travel_index=0;
|
||||||
|
all_row.each(function ()
|
||||||
|
{
|
||||||
|
let current_index = all_row.index(this);
|
||||||
|
//console.log("current_index:" + current_index);
|
||||||
|
if(current_index+1 <= user_guess_string_array.length) {
|
||||||
|
//console.log("input data:" + user_guess_string_array[current_index]);
|
||||||
|
$(this).val(user_guess_string_array[current_index]);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
storage.get('settings', function (items)
|
||||||
|
{
|
||||||
|
if (items.settings)
|
||||||
|
{
|
||||||
|
settings = items.settings;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
storage.get('status', function (items)
|
||||||
|
{
|
||||||
|
if (items.status && items.status=='ON')
|
||||||
|
{
|
||||||
|
ibon_verification_main();
|
||||||
|
} else {
|
||||||
|
console.log('no status found');
|
||||||
|
}
|
||||||
|
});
|
|
@ -262,6 +262,17 @@
|
||||||
"js/ibon_ticket_next.js"
|
"js/ibon_ticket_next.js"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"matches": [
|
||||||
|
"https://orders.ibon.com.tw/application/UTK02/UTK0201_0.aspx?*PERFORMANCE_ID=*PRODUCT_ID=*",
|
||||||
|
"https://orders.ibon.com.tw/application/UTK02/UTK0201_0.aspx?*PRODUCT_ID=*PERFORMANCE_ID=*"
|
||||||
|
],
|
||||||
|
"run_at": "document_end",
|
||||||
|
"js": [
|
||||||
|
"jquery.min.js",
|
||||||
|
"js/ibon_verification.js"
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"matches": [
|
"matches": [
|
||||||
"https://queue.hkticketing.com/hotshow.html",
|
"https://queue.hkticketing.com/hotshow.html",
|
||||||
|
@ -380,5 +391,5 @@
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"version": "1.0.8"
|
"version": "1.0.9"
|
||||||
}
|
}
|
|
@ -12,10 +12,18 @@
|
||||||
<h2>MaxBot Settings</h2>
|
<h2>MaxBot Settings</h2>
|
||||||
<div class="row g-3">
|
<div class="row g-3">
|
||||||
<ul class="nav nav-tabs" id="myTab" role="tablist">
|
<ul class="nav nav-tabs" id="myTab" role="tablist">
|
||||||
<li class="nav-item" role="presentation"><button class="nav-link active" id="home-tab" data-bs-toggle="tab" data-bs-target="#home-tab-pane" type="button" role="tab" aria-controls="home-tab-pane" aria-selected="true">Perference</button></li>
|
<li class="nav-item" role="presentation">
|
||||||
<li class="nav-item" role="presentation"><button class="nav-link" id="advanced-tab" data-bs-toggle="tab" data-bs-target="#advanced-tab-pane" type="button" role="tab" aria-controls="advanced-tab-pane" aria-selected="false">Advanced</button></li>
|
<button class="nav-link active" id="home-tab" data-bs-toggle="tab" data-bs-target="#home-tab-pane" type="button" role="tab" aria-controls="home-tab-pane" aria-selected="true">Perference</button>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item" role="presentation">
|
||||||
|
<button class="nav-link" id="advanced-tab" data-bs-toggle="tab" data-bs-target="#advanced-tab-pane" type="button" role="tab" aria-controls="advanced-tab-pane" aria-selected="false">Advanced</button>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item" role="presentation">
|
||||||
|
<button class="nav-link" id="verification-tab" data-bs-toggle="tab" data-bs-target="#verification-tab-pane" type="button" role="tab" aria-controls="verification-tab-pane" aria-selected="false">Verification</button>
|
||||||
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<div class="tab-content" id="myTabContent">
|
<div class="tab-content" id="myTabContent">
|
||||||
|
<!-- tab 1 -->
|
||||||
<div class="tab-pane fade show active" id="home-tab-pane" role="tabpanel" aria-labelledby="home-tab" tabindex="0">
|
<div class="tab-pane fade show active" id="home-tab-pane" role="tabpanel" aria-labelledby="home-tab" tabindex="0">
|
||||||
<div class="row mb-3">
|
<div class="row mb-3">
|
||||||
<label for="ticket_number" class="col-sm-2 col-form-label">Ticket Number</label>
|
<label for="ticket_number" class="col-sm-2 col-form-label">Ticket Number</label>
|
||||||
|
@ -114,7 +122,8 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="tab-pane fade" id="advanced-tab-pane" role="tabpanel" aria-labelledby="advanced-tab" tabindex="0">
|
<!-- tab 2 -->
|
||||||
|
<div class="tab-pane fade" id="advanced-tab-pane" role="tabpanel" aria-labelledby="advanced-tab" tabindex="1">
|
||||||
<div class="row mb-3">
|
<div class="row mb-3">
|
||||||
<label for="auto_reload_page_interval" class="col-sm-2 col-form-label">Reload page interval(sec.)</label>
|
<label for="auto_reload_page_interval" class="col-sm-2 col-form-label">Reload page interval(sec.)</label>
|
||||||
<div class="col-sm-10">
|
<div class="col-sm-10">
|
||||||
|
@ -146,6 +155,15 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<!-- tab 3 -->
|
||||||
|
<div class="tab-pane fade" id="verification-tab-pane" role="tabpanel" aria-labelledby="verification-tab" tabindex="2">
|
||||||
|
<div class="row mb-3">
|
||||||
|
<label for="user_guess_string" class="col-sm-2 col-form-label">Local Dictionary</label>
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<textarea class="form-control" id="user_guess_string" rows="3"></textarea>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-12">
|
<div class="col-12">
|
||||||
<button class="btn btn-primary" id="save_btn">Save</button>
|
<button class="btn btn-primary" id="save_btn">Save</button>
|
||||||
|
|
|
@ -12,6 +12,7 @@ const disable_adjacent_seat = document.querySelector('#disable_adjacent_seat');
|
||||||
const ocr_captcha_enable = document.querySelector('#ocr_captcha_enable');
|
const ocr_captcha_enable = document.querySelector('#ocr_captcha_enable');
|
||||||
const ocr_captcha_use_public_server = document.querySelector('#ocr_captcha_use_public_server');
|
const ocr_captcha_use_public_server = document.querySelector('#ocr_captcha_use_public_server');
|
||||||
const remote_url = document.querySelector('#remote_url');
|
const remote_url = document.querySelector('#remote_url');
|
||||||
|
const user_guess_string = document.querySelector('#user_guess_string');
|
||||||
|
|
||||||
const PUBLIC_SERVER_URL = "http://maxbot.dropboxlike.com:16888/";
|
const PUBLIC_SERVER_URL = "http://maxbot.dropboxlike.com:16888/";
|
||||||
|
|
||||||
|
@ -25,7 +26,7 @@ ocr_captcha_use_public_server.addEventListener('change', checkUsePublicServer);
|
||||||
async function saveChanges()
|
async function saveChanges()
|
||||||
{
|
{
|
||||||
const ticket_number_value = ticket_number.value;
|
const ticket_number_value = ticket_number.value;
|
||||||
console.log(ticket_number_value);
|
//console.log(ticket_number_value);
|
||||||
if (!ticket_number_value)
|
if (!ticket_number_value)
|
||||||
{
|
{
|
||||||
message('Error: No ticket_number specified');
|
message('Error: No ticket_number specified');
|
||||||
|
@ -48,6 +49,12 @@ async function saveChanges()
|
||||||
}
|
}
|
||||||
settings.area_auto_select.area_keyword = area_keyword_string;
|
settings.area_auto_select.area_keyword = area_keyword_string;
|
||||||
|
|
||||||
|
let user_guess_string_string = user_guess_string.value;
|
||||||
|
if(user_guess_string_string.indexOf('"')==-1) {
|
||||||
|
user_guess_string_string = '"' + user_guess_string_string + '"';
|
||||||
|
}
|
||||||
|
settings.advanced.user_guess_string = user_guess_string_string;
|
||||||
|
|
||||||
settings.keyword_exclude = keyword_exclude.value;
|
settings.keyword_exclude = keyword_exclude.value;
|
||||||
|
|
||||||
settings.advanced.auto_reload_page_interval = auto_reload_page_interval.value;
|
settings.advanced.auto_reload_page_interval = auto_reload_page_interval.value;
|
||||||
|
@ -94,6 +101,11 @@ function loadChanges()
|
||||||
area_keyword.value='';
|
area_keyword.value='';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
user_guess_string.value = settings.advanced.user_guess_string;
|
||||||
|
if(user_guess_string.value=='""') {
|
||||||
|
user_guess_string.value='';
|
||||||
|
}
|
||||||
|
|
||||||
keyword_exclude.value = settings.keyword_exclude;
|
keyword_exclude.value = settings.keyword_exclude;
|
||||||
auto_reload_page_interval.value = settings.advanced.auto_reload_page_interval;
|
auto_reload_page_interval.value = settings.advanced.auto_reload_page_interval;
|
||||||
disable_adjacent_seat.checked = settings.advanced.disable_adjacent_seat;
|
disable_adjacent_seat.checked = settings.advanced.disable_adjacent_seat;
|
||||||
|
|
Loading…
Reference in New Issue