2024-01-12, restart browser with interval.

master
Your Name 2024-01-18 11:48:17 +08:00
parent 49ce76808d
commit c0acf7fd89
6 changed files with 63 additions and 10 deletions

View File

@ -19,6 +19,9 @@ class NonBrowser():
ret = True ret = True
return ret return ret
def Get_cookies(self):
return self.Session.cookies.get_dict()
def set_headers(self, header:str): def set_headers(self, header:str):
self.Session.headers = header self.Session.headers = header

View File

@ -41,7 +41,7 @@ try:
except Exception as exc: except Exception as exc:
pass pass
CONST_APP_VERSION = "MaxBot (2024.01.11)" CONST_APP_VERSION = "MaxBot (2024.01.12)"
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"
@ -807,7 +807,7 @@ def close_browser_tabs(driver):
pass pass
def get_driver_by_config(config_dict): def get_driver_by_config(config_dict):
global driver driver = None
# read config. # read config.
homepage = config_dict["homepage"] homepage = config_dict["homepage"]
@ -7432,7 +7432,10 @@ def set_non_browser_cookies(driver, url, Captcha_Browser):
domain_name = url.split('/')[2] domain_name = url.split('/')[2]
#PS: need set cookies once, if user change domain. #PS: need set cookies once, if user change domain.
if not Captcha_Browser is None: if not Captcha_Browser is None:
Captcha_Browser.Set_cookies(driver.get_cookies()) try:
Captcha_Browser.Set_cookies(driver.get_cookies())
except Exception as e:
pass
Captcha_Browser.Set_Domain(domain_name) Captcha_Browser.Set_Domain(domain_name)
def ticketmaster_parse_zone_info(driver, config_dict): def ticketmaster_parse_zone_info(driver, config_dict):
@ -12309,7 +12312,7 @@ def get_current_url(driver):
for each_error_string in exit_bot_error_strings: for each_error_string in exit_bot_error_strings:
if isinstance(str_exc, str): if isinstance(str_exc, str):
if each_error_string in str_exc: if each_error_string in str_exc:
print('quit bot by error:', each_error_string) print('quit bot by error:', each_error_string, driver)
is_quit_bot = True is_quit_bot = True
driver.quit() driver.quit()
sys.exit() sys.exit()
@ -12320,6 +12323,21 @@ def get_current_url(driver):
return url, is_quit_bot return url, is_quit_bot
def reset_webdriver(driver, config_dict, url):
new_driver = None
try:
cookies = driver.get_cookies()
driver.close()
config_dict["homepage"]=url
new_driver = get_driver_by_config(config_dict)
for cookie in cookies:
new_driver.add_cookie(cookie);
new_driver.get(url)
driver = new_driver
except Exception as e:
pass
return new_driver
def main(args): def main(args):
config_dict = get_config_dict(args) config_dict = get_config_dict(args)
@ -12377,13 +12395,13 @@ def main(args):
if config_dict["ocr_captcha"]["enable"]: if config_dict["ocr_captcha"]["enable"]:
ocr = ddddocr.DdddOcr(show_ad=False, beta=config_dict["ocr_captcha"]["beta"]) ocr = ddddocr.DdddOcr(show_ad=False, beta=config_dict["ocr_captcha"]["beta"])
Captcha_Browser = NonBrowser() Captcha_Browser = NonBrowser()
if len(config_dict["advanced"]["tixcraft_sid"]) > 1: if len(config_dict["advanced"]["tixcraft_sid"]) > 1:
set_non_browser_cookies(driver, config_dict["homepage"], Captcha_Browser) set_non_browser_cookies(driver, config_dict["homepage"], Captcha_Browser)
except Exception as exc: except Exception as exc:
print(exc) print(exc)
pass pass
maxbot_last_reset_time = time.time()
while True: while True:
time.sleep(0.05) time.sleep(0.05)
@ -12417,10 +12435,16 @@ def main(args):
if is_maxbot_paused: if is_maxbot_paused:
if 'kktix.c' in url: if 'kktix.c' in url:
kktix_dict = kktix_paused_main(driver, url, config_dict, kktix_dict) kktix_dict = kktix_paused_main(driver, url, config_dict, kktix_dict)
# sleep more when paused.
time.sleep(0.1) time.sleep(0.1)
continue continue
if config_dict["advanced"]["reset_browser_interval"] > 0:
maxbot_running_time = time.time() - maxbot_last_reset_time
if maxbot_running_time > config_dict["advanced"]["reset_browser_interval"]:
driver = reset_webdriver(driver, config_dict, url)
maxbot_last_reset_time = time.time()
tixcraft_family = False tixcraft_family = False
if 'tixcraft.com' in url: if 'tixcraft.com' in url:
tixcraft_family = True tixcraft_family = True

View File

@ -22,7 +22,7 @@ import sys
import threading import threading
import webbrowser import webbrowser
CONST_APP_VERSION = "MaxBot (2024.01.11)" CONST_APP_VERSION = "MaxBot (2024.01.12)"
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"

View File

@ -65,6 +65,7 @@
"user_guess_string": "", "user_guess_string": "",
"remote_url": "\"http://127.0.0.1:16888/\"", "remote_url": "\"http://127.0.0.1:16888/\"",
"auto_reload_page_interval": 0.1, "auto_reload_page_interval": 0.1,
"reset_browser_interval": 0.0,
"proxy_server_port": "" "proxy_server_port": ""
} }
} }

View File

@ -39,7 +39,7 @@ try:
except Exception as exc: except Exception as exc:
pass pass
CONST_APP_VERSION = "MaxBot (2024.01.11)" CONST_APP_VERSION = "MaxBot (2024.01.12)"
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"
@ -133,6 +133,7 @@ def load_translate():
en_us["pass_date_is_sold_out"] = 'Pass date is sold out' en_us["pass_date_is_sold_out"] = 'Pass date is sold out'
en_us["auto_reload_coming_soon_page"] = 'Reload coming soon page' en_us["auto_reload_coming_soon_page"] = 'Reload coming soon page'
en_us["auto_reload_page_interval"] = 'Reload page interval(sec.)' en_us["auto_reload_page_interval"] = 'Reload page interval(sec.)'
en_us["reset_browser_interval"] = 'Reset browser interval(sec.)'
en_us["proxy_server_port"] = 'Proxy IP:PORT' en_us["proxy_server_port"] = 'Proxy IP:PORT'
en_us["area_select_order"] = 'Area select order' en_us["area_select_order"] = 'Area select order'
@ -240,6 +241,7 @@ def load_translate():
zh_tw["pass_date_is_sold_out"] = '避開「搶購一空」的日期' zh_tw["pass_date_is_sold_out"] = '避開「搶購一空」的日期'
zh_tw["auto_reload_coming_soon_page"] = '自動刷新倒數中的日期頁面' zh_tw["auto_reload_coming_soon_page"] = '自動刷新倒數中的日期頁面'
zh_tw["auto_reload_page_interval"] = '自動刷新頁面間隔(秒)' zh_tw["auto_reload_page_interval"] = '自動刷新頁面間隔(秒)'
zh_tw["reset_browser_interval"] = '重新啟動瀏覽器間隔(秒)'
zh_tw["proxy_server_port"] = 'Proxy IP:PORT' zh_tw["proxy_server_port"] = 'Proxy IP:PORT'
zh_tw["area_select_order"] = '區域排序方式' zh_tw["area_select_order"] = '區域排序方式'
@ -347,6 +349,7 @@ def load_translate():
zh_cn["pass_date_is_sold_out"] = '避开“抢购一空”的日期' zh_cn["pass_date_is_sold_out"] = '避开“抢购一空”的日期'
zh_cn["auto_reload_coming_soon_page"] = '自动刷新倒数中的日期页面' zh_cn["auto_reload_coming_soon_page"] = '自动刷新倒数中的日期页面'
zh_cn["auto_reload_page_interval"] = '重新加载间隔(秒)' zh_cn["auto_reload_page_interval"] = '重新加载间隔(秒)'
zh_cn["reset_browser_interval"] = '重新启动浏览器间隔(秒)'
zh_cn["proxy_server_port"] = 'Proxy IP:PORT' zh_cn["proxy_server_port"] = 'Proxy IP:PORT'
zh_cn["area_select_order"] = '区域排序方式' zh_cn["area_select_order"] = '区域排序方式'
@ -455,6 +458,7 @@ def load_translate():
ja_jp["pass_date_is_sold_out"] = '「売り切れ」公演を避ける' ja_jp["pass_date_is_sold_out"] = '「売り切れ」公演を避ける'
ja_jp["auto_reload_coming_soon_page"] = '公開予定のページをリロード' ja_jp["auto_reload_coming_soon_page"] = '公開予定のページをリロード'
ja_jp["auto_reload_page_interval"] = 'リロード間隔(秒)' ja_jp["auto_reload_page_interval"] = 'リロード間隔(秒)'
ja_jp["reset_browser_interval"] = 'ブラウザの再起動間隔(秒)'
ja_jp["proxy_server_port"] = 'Proxy IP:PORT' ja_jp["proxy_server_port"] = 'Proxy IP:PORT'
ja_jp["area_select_order"] = 'エリアソート方法' ja_jp["area_select_order"] = 'エリアソート方法'
@ -687,6 +691,7 @@ def get_default_config():
config_dict["advanced"]["remote_url"] = "http://127.0.0.1:%d/" % (CONST_SERVER_PORT) config_dict["advanced"]["remote_url"] = "http://127.0.0.1:%d/" % (CONST_SERVER_PORT)
config_dict["advanced"]["auto_reload_page_interval"] = 0.1 config_dict["advanced"]["auto_reload_page_interval"] = 0.1
config_dict["advanced"]["reset_browser_interval"] = 0
config_dict["advanced"]["proxy_server_port"] = "" config_dict["advanced"]["proxy_server_port"] = ""
return config_dict return config_dict
@ -776,6 +781,7 @@ def btn_save_act(language_code, slience_mode=False):
global chk_state_pass_date_is_sold_out global chk_state_pass_date_is_sold_out
global chk_state_auto_reload_coming_soon_page global chk_state_auto_reload_coming_soon_page
global txt_auto_reload_page_interval global txt_auto_reload_page_interval
global txt_reset_browser_intervalv
global txt_proxy_server_port global txt_proxy_server_port
global txt_tixcraft_sid global txt_tixcraft_sid
@ -986,8 +992,14 @@ def btn_save_act(language_code, slience_mode=False):
config_dict["advanced"]["auto_guess_options"] = bool(chk_state_auto_guess_options.get()) config_dict["advanced"]["auto_guess_options"] = bool(chk_state_auto_guess_options.get())
config_dict["advanced"]["auto_reload_page_interval"] = float(txt_auto_reload_page_interval.get().strip()) config_dict["advanced"]["auto_reload_page_interval"] = float(txt_auto_reload_page_interval.get().strip())
config_dict["advanced"]["reset_browser_interval"] = float(txt_reset_browser_interval.get().strip())
config_dict["advanced"]["proxy_server_port"] = txt_proxy_server_port.get().strip() config_dict["advanced"]["proxy_server_port"] = txt_proxy_server_port.get().strip()
if config_dict["advanced"]["reset_browser_interval"] > 0:
if config_dict["advanced"]["reset_browser_interval"] < 20:
# min value is 20 seconds.
config_dict["advanced"]["reset_browser_interval"] = 20
# save config. # save config.
if is_all_data_correct: if is_all_data_correct:
@ -1286,6 +1298,7 @@ def applyNewLanguage():
global lbl_block_facebook_network_recommand global lbl_block_facebook_network_recommand
global lbl_auto_reload_page_interval global lbl_auto_reload_page_interval
global lbl_reset_browser_interval
global lbl_proxy_server_port global lbl_proxy_server_port
lbl_homepage.config(text=translate[language_code]["homepage"]) lbl_homepage.config(text=translate[language_code]["homepage"])
@ -1322,6 +1335,7 @@ def applyNewLanguage():
lbl_block_facebook_network_recommand.config(text=translate[language_code]["recommand_enable"]) lbl_block_facebook_network_recommand.config(text=translate[language_code]["recommand_enable"])
lbl_auto_reload_page_interval.config(text=translate[language_code]["auto_reload_page_interval"]) lbl_auto_reload_page_interval.config(text=translate[language_code]["auto_reload_page_interval"])
lbl_reset_browser_interval.config(text=translate[language_code]["reset_browser_interval"])
lbl_proxy_server_port.config(text=translate[language_code]["proxy_server_port"]) lbl_proxy_server_port.config(text=translate[language_code]["proxy_server_port"])
lbl_headless.config(text=translate[language_code]["headless"]) lbl_headless.config(text=translate[language_code]["headless"])
@ -1944,6 +1958,17 @@ def AdvancedTab(root, config_dict, language_code, UI_PADDING_X):
group_row_count +=1 group_row_count +=1
global lbl_reset_browser_interval
lbl_reset_browser_interval = Label(frame_group_header, text=translate[language_code]['reset_browser_interval'])
lbl_reset_browser_interval.grid(column=0, row=group_row_count, sticky = E)
global txt_reset_browser_interval
txt_reset_browser_interval_value = StringVar(frame_group_header, value=config_dict["advanced"]["reset_browser_interval"])
txt_reset_browser_interval = Entry(frame_group_header, width=30, textvariable = txt_reset_browser_interval_value)
txt_reset_browser_interval.grid(column=1, row=group_row_count, sticky = W)
group_row_count +=1
global lbl_proxy_server_port global lbl_proxy_server_port
lbl_proxy_server_port = Label(frame_group_header, text=translate[language_code]['proxy_server_port']) lbl_proxy_server_port = Label(frame_group_header, text=translate[language_code]['proxy_server_port'])
lbl_proxy_server_port.grid(column=0, row=group_row_count, sticky = E) lbl_proxy_server_port.grid(column=0, row=group_row_count, sticky = E)

View File

@ -1 +1 @@
{"homepage": "https://tixcraft.com", "browser": "chrome", "language": "\u7e41\u9ad4\u4e2d\u6587", "ticket_number": 2, "ocr_captcha": {"enable": true, "beta": true, "force_submit": true, "image_source": "canvas"}, "webdriver_type": "undetected_chromedriver", "date_auto_select": {"enable": true, "date_keyword": "", "mode": "random"}, "area_auto_select": {"enable": true, "mode": "random", "area_keyword": ""}, "keyword_exclude": "\"\u8f2a\u6905\",\"\u8eab\u969c\",\"\u8eab\u5fc3 \u969c\u7919\",\"Restricted View\",\"\u71c8\u67f1\u906e\u853d\",\"\u8996\u7dda\u4e0d\u5b8c\u6574\"", "kktix": {"auto_press_next_step_button": true, "auto_fill_ticket_number": true}, "tixcraft": {"pass_date_is_sold_out": true, "auto_reload_coming_soon_page": true}, "advanced": {"play_captcha_sound": {"enable": true, "filename": "ding-dong.wav"}, "tixcraft_sid": "", "ibonqware": "", "facebook_account": "", "kktix_account": "", "fami_account": "", "cityline_account": "", "urbtix_account": "", "hkticketing_account": "", "kham_account": "", "ticket_account": "", "udn_account": "", "ticketplus_account": "", "facebook_password": "", "kktix_password": "", "fami_password": "", "urbtix_password": "", "cityline_password": "", "hkticketing_password": "", "kham_password": "", "ticket_password": "", "udn_password": "", "ticketplus_password": "", "disable_adjacent_seat": false, "hide_some_image": true, "block_facebook_network": false, "headless": false, "verbose": false, "auto_guess_options": true, "user_guess_string": "", "remote_url": "\"http://127.0.0.1:16888/\"", "auto_reload_page_interval": 0.1, "proxy_server_port": ""}} {"homepage": "https://tixcraft.com", "browser": "chrome", "language": "\u7e41\u9ad4\u4e2d\u6587", "ticket_number": 2, "ocr_captcha": {"enable": true, "beta": true, "force_submit": true, "image_source": "canvas"}, "webdriver_type": "undetected_chromedriver", "date_auto_select": {"enable": true, "date_keyword": "", "mode": "random"}, "area_auto_select": {"enable": true, "mode": "random", "area_keyword": ""}, "keyword_exclude": "\"\u8f2a\u6905\",\"\u8eab\u969c\",\"\u8eab\u5fc3 \u969c\u7919\",\"Restricted View\",\"\u71c8\u67f1\u906e\u853d\",\"\u8996\u7dda\u4e0d\u5b8c\u6574\"", "kktix": {"auto_press_next_step_button": true, "auto_fill_ticket_number": true}, "tixcraft": {"pass_date_is_sold_out": true, "auto_reload_coming_soon_page": true}, "advanced": {"play_captcha_sound": {"enable": true, "filename": "ding-dong.wav"}, "tixcraft_sid": "", "ibonqware": "", "facebook_account": "", "kktix_account": "", "fami_account": "", "cityline_account": "", "urbtix_account": "", "hkticketing_account": "", "kham_account": "", "ticket_account": "", "udn_account": "", "ticketplus_account": "", "facebook_password": "", "kktix_password": "", "fami_password": "", "urbtix_password": "", "cityline_password": "", "hkticketing_password": "", "kham_password": "", "ticket_password": "", "udn_password": "", "ticketplus_password": "", "disable_adjacent_seat": false, "hide_some_image": true, "block_facebook_network": false, "headless": false, "verbose": false, "auto_guess_options": true, "user_guess_string": "", "remote_url": "\"http://127.0.0.1:16888/\"", "auto_reload_page_interval": 0.1, "reset_browser_interval": 0.0, "proxy_server_port": ""}}