diff --git a/chrome_tixcraft.py b/chrome_tixcraft.py index c2dac43..131b0bf 100644 --- a/chrome_tixcraft.py +++ b/chrome_tixcraft.py @@ -41,7 +41,7 @@ try: except Exception as exc: 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_CONFIG_FILE = "settings.json" @@ -2951,24 +2951,29 @@ def fill_common_verify_form(driver, config_dict, inferred_answer_string, fail_li # PS: sometime may send key twice... form_input_1.clear() form_input_1.send_keys(inferred_answer_string) - is_button_clicked = False - if is_do_press_next_button: - if submit_by_enter: - form_input_1.send_keys(Keys.ENTER) - is_button_clicked = True - if len(next_step_button_css) > 0: - is_button_clicked = force_press_button(driver, By.CSS_SELECTOR, next_step_button_css) - - if is_button_clicked: - is_answer_sent = True - fail_list.append(inferred_answer_string) - if show_debug_message: - print("sent password by bot:", inferred_answer_string, " at #", len(fail_list)) except Exception as exc: if show_debug_message: print(exc) pass + is_button_clicked = False + try: + if is_do_press_next_button: + if submit_by_enter: + form_input_1.send_keys(Keys.ENTER) + is_button_clicked = True + if len(next_step_button_css) > 0: + 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: + is_answer_sent = True + fail_list.append(inferred_answer_string) + if show_debug_message: + print("sent password by bot:", inferred_answer_string, " at #", len(fail_list)) + if is_answer_sent: for i in range(3): time.sleep(0.1) @@ -8475,17 +8480,18 @@ def cityline_main(driver, url, config_dict): cityline_shows_goto_cta(driver) def get_ibon_question_text(driver): - form_select = None + question_div = None 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: print("find verify textbox fail") pass question_text = "" - if not form_select is None: + if not question_div is None: try: - question_text = form_select.text + question_text = question_div.text except Exception as exc: print("get text fail") diff --git a/config_launcher.py b/config_launcher.py index cbb8070..e86b715 100644 --- a/config_launcher.py +++ b/config_launcher.py @@ -22,7 +22,7 @@ import sys import threading 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_CONFIG_FILE = "settings.json" diff --git a/settings.py b/settings.py index 92690dc..5a9bd9e 100644 --- a/settings.py +++ b/settings.py @@ -40,7 +40,7 @@ try: except Exception as exc: 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_CONFIG_FILE = "settings.json" diff --git a/webdriver/Maxbotplus_1.0.0/js/ibon_ticket_next.js b/webdriver/Maxbotplus_1.0.0/js/ibon_ticket_next.js index 06532a3..60c3f31 100644 --- a/webdriver/Maxbotplus_1.0.0/js/ibon_ticket_next.js +++ b/webdriver/Maxbotplus_1.0.0/js/ibon_ticket_next.js @@ -1,84 +1,6 @@ var myInterval = null; //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_number0) { - /* - 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 button'); - $next_btn.click(); - } - } - } else { - console.log("not target_area found.") - } -} - function begin() { console.log("begin to next"); diff --git a/webdriver/Maxbotplus_1.0.0/js/ibon_verification.js b/webdriver/Maxbotplus_1.0.0/js/ibon_verification.js new file mode 100644 index 0000000..f83ee43 --- /dev/null +++ b/webdriver/Maxbotplus_1.0.0/js/ibon_verification.js @@ -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'); + } +}); diff --git a/webdriver/Maxbotplus_1.0.0/manifest.json b/webdriver/Maxbotplus_1.0.0/manifest.json index b08f82f..46880d3 100644 --- a/webdriver/Maxbotplus_1.0.0/manifest.json +++ b/webdriver/Maxbotplus_1.0.0/manifest.json @@ -262,6 +262,17 @@ "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": [ "https://queue.hkticketing.com/hotshow.html", @@ -380,5 +391,5 @@ ] } ], - "version": "1.0.8" + "version": "1.0.9" } \ No newline at end of file diff --git a/webdriver/Maxbotplus_1.0.0/options.html b/webdriver/Maxbotplus_1.0.0/options.html index 49b541c..4d2c897 100644 --- a/webdriver/Maxbotplus_1.0.0/options.html +++ b/webdriver/Maxbotplus_1.0.0/options.html @@ -12,10 +12,18 @@

MaxBot Settings

+
@@ -114,7 +122,8 @@
-
+ +
@@ -146,6 +155,15 @@
+ +
+
+ +
+ +
+
+
diff --git a/webdriver/Maxbotplus_1.0.0/options.js b/webdriver/Maxbotplus_1.0.0/options.js index 642b17c..62d4c55 100644 --- a/webdriver/Maxbotplus_1.0.0/options.js +++ b/webdriver/Maxbotplus_1.0.0/options.js @@ -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_use_public_server = document.querySelector('#ocr_captcha_use_public_server'); 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/"; @@ -25,7 +26,7 @@ ocr_captcha_use_public_server.addEventListener('change', checkUsePublicServer); async function saveChanges() { const ticket_number_value = ticket_number.value; - console.log(ticket_number_value); + //console.log(ticket_number_value); if (!ticket_number_value) { message('Error: No ticket_number specified'); @@ -33,7 +34,7 @@ async function saveChanges() if(settings) { settings.ticket_number = ticket_number_value; settings.date_auto_select.mode = date_select_mode.value; - + let date_keyword_string = date_keyword.value; if(date_keyword_string.indexOf('"')==-1) { date_keyword_string = '"' + date_keyword_string + '"'; @@ -47,7 +48,13 @@ async function saveChanges() area_keyword_string = '"' + 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.advanced.auto_reload_page_interval = auto_reload_page_interval.value; @@ -94,6 +101,11 @@ function loadChanges() 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; auto_reload_page_interval.value = settings.advanced.auto_reload_page_interval; disable_adjacent_seat.checked = settings.advanced.disable_adjacent_seat;