[Python] 纯文本查看 复制代码
# decompyle3 version 3.9.0
# Python bytecode=1 version base 3.8.0 (3413)
# Decompiled from: Python 3.8.2 (tags/v3.8.2:7b3ab59, Feb 25 2020, 23:03:10) [MSC v.1916 64 bit (AMD64)]
# Embedded file name: js自动化测试代码混淆.py
from selenium import webdriver
from selenium.webdriver.edge.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
import selenium.webdriver.support as EC
import time, os, shutil, pyperclip
from tkinter import *
import tkinter.ttk as ttk
from tkinter import messagebox
from tkinter.scrolledtext import ScrolledText
from tkinter import filedialog, dialog
import _thread, webbrowser, datetime, win32api, base64, hashlib
from Crypto.Cipher import AES
import win32gui, win32con
def catch_info(OO0OO0O00OOOOOO00):
OOOO0O0OO0000OO0O = []
for O00OO0000OO00000O in range(OO0OO0O00OOOOOO00.nrows):
O0O00O0OO0O0O00OO = {}
OO000O0OO00OOOO0O = OO0OO0O00OOOOOO00.row_values(O00OO0000OO00000O)
for OO00000O00OO00000 in range(OO0OO0O00OOOOOO00.ncols):
if type(OO000O0OO00OOOO0O[OO00000O00OO00000]) == float:
print('数据转换')
O0O00O0OO0O0O00OO[OO00000O00OO00000] = str(int(OO000O0OO00OOOO0O[OO00000O00OO00000]))
else:
O0O00O0OO0O0O00OO[OO00000O00OO00000] = OO000O0OO00OOOO0O[OO00000O00OO00000]
OOOO0O0OO0000OO0O.append(O0O00O0OO0O0O00OO)
else:
return OOOO0O0OO0000OO0O
def wait_obj(OO0O00OO000O00OOO, OOO000000OO0OO0O0, OOO00OOOO00O00OO0, wait_time=5, frequent_time=0.5):
OOOOO0O0O00O00OO0 = WebDriverWait(OO0O00OO000O00OOO, wait_time, frequent_time).until(EC.presence_of_element_located((OOO000000OO0OO0O0, OOO00OOOO00O00OO0)))
return OOOOO0O0O00O00OO0
def top_window():
O00O00OOOOOOO0O0O = ''
while True:
while O00O00OOOOOOO0O0O == '':
OOO00O000O0OOOO0O = {}
def O000000OO0OO000O0(OOO0O0O0OOOOOOO00, OOOO0OOOOOOOO000O):
if win32gui.IsWindow(OOO0O0O0OOOOOOO00):
if win32gui.IsWindowEnabled(OOO0O0O0OOOOOOO00):
if win32gui.IsWindowVisible(OOO0O0O0OOOOOOO00):
OOO00O000O0OOOO0O.update({OOO0O0O0OOOOOOO00: win32gui.GetWindowText(OOO0O0O0OOOOOOO00)})
win32gui.EnumWindows(O000000OO0OO000O0, 0)
OOO0O0OO00O0O0OO0 = ''
for O00000OO000OO00OO, OO000O0OOO0O0O00O in OOO00O000O0OOOO0O.items():
if OO000O0OOO0O0O00O:
if 'Javascript自动化测试工具' in OO000O0OOO0O0O00O:
OOO0O0OO00O0O0OO0 = OO000O0OOO0O0O00O
O00O00OOOOOOO0O0O = OO000O0OOO0O0O00O
O0O0OO00O00OO0O00 = win32gui.FindWindow(None, OOO0O0OO00O0O0OO0)
win32gui.ShowWindow(O0O0OO00O00OO0O00, win32con.SW_SHOWNORMAL)
win32gui.SetWindowPos(O0O0OO00O00OO0O00, win32con.HWND_TOPMOST, 1, 738, 562, 339, win32con.SWP_NOMOVE | win32con.SWP_NOACTIVATE | win32con.SWP_NOOWNERZORDER | win32con.SWP_SHOWWINDOW | win32con.SWP_NOSIZE)
def stop_listing_msg():
global kkk
kkk = 'e'
fresh_btn.configure(state=NORMAL)
driver.refresh()
def run_browser():
global driver
global run_num
global sound_lock
start_btn.configure(text='启动浏览器(启动中....)', fg='DarkGreen')
try:
driver.quit()
except Exception as O0000O00OOO0OO00O:
try:
print(O0000O00OOO0OO00O)
finally:
O0000O00OOO0OO00O = None
del O0000O00OOO0OO00O
else:
O00O0O0O0O000O0O0 = os.path.join(os.getcwd(), '谷歌浏览器缓存')
OO00O0O0OOO000000 = os.path.join(os.getcwd(), 'edge浏览器缓存')
O0OOOO000OOOO0OO0 = os.path.join(os.getcwd(), '火狐浏览器缓存')
OOOO0O00OOOO0O000 = entry_url.get()
if OOOO0O00OOOO0O000 == '':
OOOO0O00OOOO0O000 = 'about:blank'
OOO0OOOOO000O0OOO = str(browser_set.get())
try:
if run_num == 0:
print(OOO0OOOOO000O0OOO)
if '谷歌' in OOO0OOOOO000O0OOO:
run_num += 1
O0O000O0OOO0OO0OO = os.getcwd()
OOOOOOOOO00OO0O00 = os.path.join(O0O000O0OOO0OO0OO, 'Drivers', '.wdm', 'drivers', 'chromedriver', 'win32')
OOO00O0OO0OO00O00 = os.listdir(OOOOOOOOO00OO0O00)[0]
OOOOO00OOO0O00000 = os.path.join(OOOOOOOOO00OO0O00, OOO00O0OO0OO00O00, 'chromedriver.exe')
print(OOOOO00OOO0O00000)
OOO0000O00O000O00 = Service(OOOOO00OOO0O00000)
OOO0OOO0OO0OOO0OO = webdriver.ChromeOptions()
if sound_lock == 0:
OOO0OOO0OO0OOO0OO.add_argument('--mute-audio')
OOO0OOO0OO0OOO0OO.add_argument('--disable-blink-features=AutomationControlled')
os.makedirs(O00O0O0O0O000O0O0, exist_ok=True)
OOO0OOO0OO0OOO0OO.add_argument('--user-data-dir=' + O00O0O0O0O000O0O0)
OOO0OOO0OO0OOO0OO.add_experimental_option('excludeSwitches', ['enable-automation', 'enable-logging'])
driver = webdriver.Chrome(service=OOO0000O00O000O00, options=OOO0OOO0OO0OOO0OO)
else:
if '微软' in OOO0OOOOO000O0OOO:
run_num += 1
O0O000O0OOO0OO0OO = os.getcwd()
OOOOOOOOO00OO0O00 = os.path.join(O0O000O0OOO0OO0OO, 'Drivers', '.wdm', 'drivers', 'edgedriver', 'win64')
OOO00O0OO0OO00O00 = os.listdir(OOOOOOOOO00OO0O00)[0]
OOOOO00OOO0O00000 = os.path.join(OOOOOOOOO00OO0O00, OOO00O0OO0OO00O00, 'msedgedriver.exe')
print(OOOOO00OOO0O00000)
OOO0000O00O000O00 = Service(OOOOO00OOO0O00000)
OOO0OOO0OO0OOO0OO = webdriver.EdgeOptions()
OOO0OOO0OO0OOO0OO.use_chromium = True
if sound_lock == 0:
OOO0OOO0OO0OOO0OO.add_argument('--mute-audio')
OOO0OOO0OO0OOO0OO.add_argument('--disable-blink-features=AutomationControlled')
os.makedirs(OO00O0O0OOO000000, exist_ok=True)
OOO0OOO0OO0OOO0OO.add_argument('user-data-dir=' + OO00O0O0OOO000000)
OOO0OOO0OO0OOO0OO.add_experimental_option('excludeSwitches', ['enable-automation', 'enable-logging'])
driver = webdriver.Edge(service=OOO0000O00O000O00, options=OOO0OOO0OO0OOO0OO)
else:
if '火狐' in OOO0OOOOO000O0OOO:
run_num += 1
if not os.path.exists(O0OOOO000OOOO0OO0):
try:
os.makedirs(O0OOOO000OOOO0OO0)
print(f"文件夹 '{O0OOOO000OOOO0OO0}' 已成功创建。")
except OSError as O0000O00OOO0OO00O:
try:
print(f"创建文件夹 '{O0OOOO000OOOO0OO0}' 失败:{O0000O00OOO0OO00O}")
finally:
O0000O00OOO0OO00O = None
del O0000O00OOO0OO00O
else:
print(f"文件夹 '{O0OOOO000OOOO0OO0}' 已存在。")
O0O000O0OOO0OO0OO = os.getcwd()
OOOOOOOOO00OO0O00 = os.path.join(O0O000O0OOO0OO0OO, 'Drivers', '.wdm', 'drivers', 'geckodriver', 'win64')
OOO00O0OO0OO00O00 = os.listdir(OOOOOOOOO00OO0O00)[0]
OOOOO00OOO0O00000 = os.path.join(OOOOOOOOO00OO0O00, OOO00O0OO0OO00O00, 'geckodriver.exe')
print(OOOOO00OOO0O00000)
OOO0000O00O000O00 = Service(OOOOO00OOO0O00000)
OOO0OOO0OO0OOO0OO = webdriver.FirefoxOptions()
if sound_lock == 0:
OOO0OOO0OO0OOO0OO.add_argument('--mute-audio')
OOO0OOO0OO0OOO0OO.add_argument('--profile')
OOO0OOO0OO0OOO0OO.add_argument(O0OOOO000OOOO0OO0)
OOO0OOO0OO0OOO0OO.add_argument('--disable-automation')
OOO0OOO0OO0OOO0OO.add_argument('--disable-logging')
driver = webdriver.Firefox(service=OOO0000O00O000O00, options=OOO0OOO0OO0OOO0OO)
driver.set_page_load_timeout(60)
driver.get(OOOO0O00OOOO0O000)
print('网页打开成功')
start_btn.configure(text='启动浏览器', fg='black')
except Exception as O0000O00OOO0OO00O:
try:
print(O0000O00OOO0OO00O)
with open('errLog.txt', 'w', encoding='utf-8') as O0OO00OO0O00O0O0O:
O0OO00OO0O00O0O0O.write(str(O0000O00OOO0OO00O))
if 'invalid argument' in str(O0000O00OOO0OO00O):
messagebox.showwarning('网址错误', '请检查网址是否有误,列如:遗漏http://或者https://等情况')
start_btn.configure(text='启动浏览器', fg='black')
else:
if 'failed to start' in str(O0000O00OOO0OO00O):
messagebox.showwarning('启动错误', '请先关闭已打开的浏览器后再重试')
start_btn.configure(text='启动浏览器', fg='black')
else:
update_driver_btn.configure(state=NORMAL, text='———>>更新驱动<<———', fg='green', bg='gold', font=('微软雅黑',
11))
messagebox.showwarning('驱动不匹配', '驱动需要更新!请【更新驱动】')
start_btn.configure(text='启动浏览器', fg='black')
finally:
O0000O00OOO0OO00O = None
del O0000O00OOO0OO00O
def origin_decrypt--- This code section failed: ---
L. 158 0 LOAD_STR '6$etwbg$6*f'
2 STORE_FAST 'O0O0000OO0OO00OO0'
L. 159 4 SETUP_FINALLY 96 'to 96'
L. 160 6 LOAD_FAST 'O0O0000OO0OO00OO0'
8 STORE_FAST 'OOOOOOO00OO0OO0OO'
L. 161 10 LOAD_FAST 'O0O000OOO00O00OO0'
12 STORE_FAST 'O0O0000O000OO0O00'
L. 162 14 LOAD_GLOBAL AES
16 LOAD_METHOD new
18 LOAD_GLOBAL add_to_16
20 LOAD_FAST 'OOOOOOO00OO0OO0OO'
22 CALL_FUNCTION_1 1 ''
24 LOAD_GLOBAL AES
26 LOAD_ATTR MODE_ECB
28 CALL_METHOD_2 2 ''
30 STORE_FAST 'OOO000O0OOO000OOO'
L. 163 32 LOAD_GLOBAL base64
34 LOAD_METHOD decode=1bytes
36 LOAD_FAST 'O0O0000O000OO0O00'
38 LOAD_ATTR encode
40 LOAD_STR 'utf-8'
42 LOAD_CONST ('encoding',)
44 CALL_FUNCTION_KW_1 1 '1 total positional and keyword args'
46 CALL_METHOD_1 1 ''
48 STORE_FAST 'O0OOOO0OOOOOO000O'
L. 164 50 LOAD_GLOBAL str
52 LOAD_FAST 'OOO000O0OOO000OOO'
54 LOAD_METHOD decrypt
56 LOAD_FAST 'O0OOOO0OOOOOO000O'
58 CALL_METHOD_1 1 ''
60 LOAD_STR 'utf-8'
62 LOAD_CONST ('encoding',)
64 CALL_FUNCTION_KW_2 2 '2 total positional and keyword args'
66 STORE_FAST 'OO0OO00OO00O00OO0'
L. 165 68 LOAD_GLOBAL base64
70 LOAD_METHOD b64decode=1
72 LOAD_FAST 'OO0OO00OO00O00OO0'
74 LOAD_METHOD encode
76 LOAD_STR 'utf-8'
78 CALL_METHOD_1 1 ''
80 CALL_METHOD_1 1 ''
82 LOAD_METHOD decode=1
84 LOAD_STR 'utf-8'
86 CALL_METHOD_1 1 ''
88 STORE_FAST 'OO0OO00OO00O00OO0'
L. 166 90 LOAD_FAST 'OO0OO00OO00O00OO0'
92 POP_BLOCK
94 RETURN_VALUE
96_0 COME_FROM_FINALLY 4 '4'
L. 167 96 DUP_TOP
98 LOAD_GLOBAL Exception
100 COMPARE_OP exception-match
102 POP_JUMP_IF_FALSE 142 'to 142'
104 POP_TOP
106 STORE_FAST 'O0000O000OO0OOO0O'
108 POP_TOP
110 SETUP_FINALLY 130 'to 130'
L. 168 112 LOAD_GLOBAL print
114 LOAD_FAST 'O0000O000OO0OOO0O'
116 CALL_FUNCTION_1 1 ''
118 POP_TOP
L. 169 120 POP_BLOCK
122 POP_EXCEPT
124 CALL_FINALLY 130 'to 130'
126 LOAD_STR 'err'
128 RETURN_VALUE
130_0 COME_FROM 124 '124'
130_1 COME_FROM_FINALLY 110 '110'
130 LOAD_CONST None
132 STORE_FAST 'O0000O000OO0OOO0O'
134 DELETE_FAST 'O0000O000OO0OOO0O'
136 END_FINALLY
138 POP_EXCEPT
140 JUMP_FORWARD 144 'to 144'
142_0 COME_FROM 102 '102'
142 END_FINALLY
144_0 COME_FROM 140 '140'
Parse error at or near `POP_EXCEPT' instruction at offset 122
def start_js--- This code section failed: ---
L. 184 0 LOAD_GLOBAL textPad
2 LOAD_METHOD get
4 LOAD_STR '1.0'
6 LOAD_STR 'end-1c'
8 CALL_METHOD_2 2 ''
10 STORE_FAST 'O0OOOOOOOOOOO000O'
L. 185 12 LOAD_FAST 'O0OOOOOOOOOOO000O'
14 LOAD_STR ''
16 COMPARE_OP !=
18_20 POP_JUMP_IF_FALSE 438 'to 438'
L. 186 22 LOAD_STR '|*-*||*-*||*-*||*-*||*-*||*-*||*-*|'
24 STORE_FAST 'O00O00OOO0OOOO0O0'
26_0 COME_FROM 124 '124'
26_1 COME_FROM 98 '98'
26_2 COME_FROM 52 '52'
L. 188 26 LOAD_GLOBAL origin_decrypt
28 LOAD_FAST 'O0OOOOOOOOOOO000O'
30 CALL_FUNCTION_1 1 ''
32 STORE_FAST 'OO0000OO0OO000OOO'
L. 189 34 LOAD_FAST 'OO0000OO0OO000OOO'
36 LOAD_STR ''
38 COMPARE_OP ==
40 POP_JUMP_IF_TRUE 126 'to 126'
42 LOAD_FAST 'OO0000OO0OO000OOO'
44 LOAD_STR 'err'
46 COMPARE_OP ==
48 POP_JUMP_IF_FALSE 54 'to 54'
L. 190 50 JUMP_FORWARD 126 'to 126'
52 JUMP_LOOP 26 'to 26'
54_0 COME_FROM 48 '48'
L. 192 54 LOAD_FAST 'OO0000OO0OO000OOO'
56 LOAD_METHOD split
58 LOAD_STR '\n'
60 CALL_METHOD_1 1 ''
62 STORE_FAST 'O000OO0OOO00OOOOO'
L. 193 64 LOAD_STR '$s加密状态'
66 LOAD_FAST 'O000OO0OOO00OOOOO'
68 LOAD_CONST -1
70 BINARY_SUBSCR
72 COMPARE_OP in
74 POP_JUMP_IF_FALSE 100 'to 100'
L. 194 76 LOAD_FAST 'O000OO0OOO00OOOOO'
78 LOAD_METHOD pop
80 CALL_METHOD_0 0 ''
82 STORE_FAST 'O00O00OOO0OOOO0O0'
L. 195 84 LOAD_STR '\n'
86 LOAD_METHOD join
88 LOAD_FAST 'O000OO0OOO00OOOOO'
90 CALL_METHOD_1 1 ''
92 STORE_FAST 'O0O0O000O0OOOO000'
L. 196 94 LOAD_FAST 'O0O0O000O0OOOO000'
96 STORE_FAST 'O0OOOOOOOOOOO000O'
98 JUMP_LOOP 26 'to 26'
100_0 COME_FROM 74 '74'
L. 198 100 LOAD_FAST 'O000OO0OOO00OOOOO'
102 LOAD_METHOD pop
104 CALL_METHOD_0 0 ''
106 STORE_FAST 'O00O00OOO0OOOO0O0'
L. 199 108 LOAD_STR '\n'
110 LOAD_METHOD join
112 LOAD_FAST 'O000OO0OOO00OOOOO'
114 CALL_METHOD_1 1 ''
116 STORE_FAST 'O0O0O000O0OOOO000'
L. 200 118 LOAD_FAST 'O0O0O000O0OOOO000'
120 STORE_FAST 'O0OOOOOOOOOOO000O'
L. 201 122 JUMP_FORWARD 126 'to 126'
124 JUMP_LOOP 26 'to 26'
126_0 COME_FROM 122 '122'
126_1 COME_FROM 50 '50'
126_2 COME_FROM 40 '40'
L. 202 126 LOAD_GLOBAL print
128 LOAD_FAST 'O00O00OOO0OOOO0O0'
130 CALL_FUNCTION_1 1 ''
132 POP_TOP
L. 203 134 LOAD_FAST 'O00O00OOO0OOOO0O0'
136 LOAD_METHOD split
138 LOAD_STR '|*-*|'
140 CALL_METHOD_1 1 ''
142 STORE_FAST 'O0O00OO00OO00O0OO'
L. 204 144 LOAD_GLOBAL print
146 LOAD_FAST 'O0O00OO00OO00O0OO'
148 CALL_FUNCTION_1 1 ''
150 POP_TOP
L. 205 152 LOAD_STR 'yes'
154 STORE_FAST 'O0O0OO0O0OOOO0O00'
L. 206 156 LOAD_FAST 'O0O00OO00OO00O0OO'
158 LOAD_CONST 2
160 BINARY_SUBSCR
162 LOAD_STR ''
164 COMPARE_OP !=
166 POP_JUMP_IF_FALSE 210 'to 210'
L. 207 168 LOAD_FAST 'O0O00OO00OO00O0OO'
170 LOAD_CONST 2
172 BINARY_SUBSCR
174 LOAD_GLOBAL str
176 LOAD_GLOBAL win32api
178 LOAD_METHOD GetVolumeInformation
180 LOAD_STR 'C:\\'
182 CALL_METHOD_1 1 ''
184 LOAD_CONST 1
186 BINARY_SUBSCR
188 CALL_FUNCTION_1 1 ''
190 COMPARE_OP !=
192 POP_JUMP_IF_FALSE 210 'to 210'
L. 208 194 LOAD_STR 'no'
196 STORE_FAST 'O0O0OO0O0OOOO0O00'
L. 209 198 LOAD_GLOBAL messagebox
200 LOAD_METHOD showwarning
202 LOAD_STR '错误提醒'
204 LOAD_STR '本机特征码与代码指定特征码不匹配,无法执行'
206 CALL_METHOD_2 2 ''
208 POP_TOP
210_0 COME_FROM 192 '192'
210_1 COME_FROM 166 '166'
L. 210 210 LOAD_FAST 'O0O00OO00OO00O0OO'
212 LOAD_CONST 4
214 BINARY_SUBSCR
216 LOAD_STR ''
218 COMPARE_OP !=
220_222 POP_JUMP_IF_FALSE 296 'to 296'
L. 211 224 LOAD_GLOBAL get_web_now_time
226 CALL_FUNCTION_0 0 ''
228 STORE_FAST 'OO0O000OO0OO0OO00'
L. 212 230 LOAD_GLOBAL webtime
232 LOAD_GLOBAL int
234 LOAD_FAST 'O0O00OO00OO00O0OO'
236 LOAD_CONST 4
238 BINARY_SUBSCR
240 CALL_FUNCTION_1 1 ''
242 BINARY_SUBTRACT
244 LOAD_CONST 0
246 COMPARE_OP >
248_250 POP_JUMP_IF_FALSE 270 'to 270'
L. 213 252 LOAD_GLOBAL messagebox
254 LOAD_METHOD showwarning
256 LOAD_STR '过期提示'
258 LOAD_STR '代码已过期,无法执行'
260 CALL_METHOD_2 2 ''
262 POP_TOP
L. 214 264 LOAD_STR 'no'
266 STORE_FAST 'O0O0OO0O0OOOO0O00'
268 JUMP_FORWARD 296 'to 296'
270_0 COME_FROM 248 '248'
L. 215 270 LOAD_GLOBAL webtime
272 LOAD_CONST -1
274 COMPARE_OP ==
276_278 POP_JUMP_IF_FALSE 296 'to 296'
L. 216 280 LOAD_GLOBAL messagebox
282 LOAD_METHOD showwarning
284 LOAD_STR '网络未连接'
286 LOAD_STR '请连接网络后重试'
288 CALL_METHOD_2 2 ''
290 POP_TOP
L. 217 292 LOAD_STR 'no'
294 STORE_FAST 'O0O0OO0O0OOOO0O00'
296_0 COME_FROM 276 '276'
296_1 COME_FROM 268 '268'
296_2 COME_FROM 220 '220'
L. 218 296 LOAD_FAST 'O0O0OO0O0OOOO0O00'
298 LOAD_STR 'yes'
300 COMPARE_OP ==
302_304 POP_JUMP_IF_FALSE 462 'to 462'
L. 219 306 LOAD_GLOBAL print
308 LOAD_STR '执行代码'
310 CALL_FUNCTION_1 1 ''
312 POP_TOP
L. 220 314 SETUP_FINALLY 330 'to 330'
L. 221 316 LOAD_GLOBAL driver
318 LOAD_METHOD execute_script
320 LOAD_FAST 'O0OOOOOOOOOOO000O'
322 CALL_METHOD_1 1 ''
324 POP_TOP
326 POP_BLOCK
328 JUMP_FORWARD 436 'to 436'
330_0 COME_FROM_FINALLY 314 '314'
L. 222 330 DUP_TOP
332 LOAD_GLOBAL Exception
334 COMPARE_OP exception-match
336_338 POP_JUMP_IF_FALSE 434 'to 434'
340 POP_TOP
342 STORE_FAST 'O0O00O00OOOOOOOOO'
344 POP_TOP
346 SETUP_FINALLY 422 'to 422'
L. 223 348 LOAD_GLOBAL str
350 LOAD_FAST 'O0O00O00OOOOOOOOO'
352 CALL_FUNCTION_1 1 ''
354 STORE_FAST 'OOO0OOO0O0OOOO00O'
L. 224 356 LOAD_STR "name 'driver' is not defined"
358 LOAD_FAST 'OOO0OOO0O0OOOO00O'
360 COMPARE_OP not-in
362_364 POP_JUMP_IF_FALSE 394 'to 394'
L. 225 366 LOAD_GLOBAL pyperclip
368 LOAD_METHOD copy
370 LOAD_FAST 'OOO0OOO0O0OOOO00O'
372 CALL_METHOD_1 1 ''
374 POP_TOP
L. 226 376 LOAD_GLOBAL messagebox
378 LOAD_METHOD showwarning
380 LOAD_STR 'DEBUG报错信息(代码运行出错辣o(╥﹏╥)o)'
382 LOAD_STR '报错信息已复制到剪切板\n'
384 LOAD_FAST 'OOO0OOO0O0OOOO00O'
386 BINARY_ADD
388 CALL_METHOD_2 2 ''
390 POP_TOP
392 JUMP_FORWARD 418 'to 418'
394_0 COME_FROM 362 '362'
L. 228 394 LOAD_GLOBAL fresh_btn
396 LOAD_ATTR configure
398 LOAD_GLOBAL NORMAL
400 LOAD_CONST ('state',)
402 CALL_FUNCTION_KW_1 1 '1 total positional and keyword args'
404 POP_TOP
L. 229 406 LOAD_GLOBAL messagebox
408 LOAD_METHOD showwarning
410 LOAD_STR '错误提示'
412 LOAD_STR '亲,请先启动浏览器,再执行代码'
414 CALL_METHOD_2 2 ''
416 POP_TOP
418_0 COME_FROM 392 '392'
418 POP_BLOCK
420 BEGIN_FINALLY
422_0 COME_FROM_FINALLY 346 '346'
422 LOAD_CONST None
424 STORE_FAST 'O0O00O00OOOOOOOOO'
426 DELETE_FAST 'O0O00O00OOOOOOOOO'
428 END_FINALLY
430 POP_EXCEPT
432 JUMP_FORWARD 436 'to 436'
434_0 COME_FROM 336 '336'
434 END_FINALLY
436_0 COME_FROM 432 '432'
436_1 COME_FROM 328 '328'
436 JUMP_FORWARD 462 'to 462'
438_0 COME_FROM 18 '18'
L. 231 438 LOAD_GLOBAL fresh_btn
440 LOAD_ATTR configure
442 LOAD_GLOBAL NORMAL
444 LOAD_CONST ('state',)
446 CALL_FUNCTION_KW_1 1 '1 total positional and keyword args'
448 POP_TOP
L. 232 450 LOAD_GLOBAL messagebox
452 LOAD_METHOD showwarning
454 LOAD_STR '错误提示'
456 LOAD_STR '亲,请先编写 或 导入 代码'
458 CALL_METHOD_2 2 ''
460 POP_TOP
462_0 COME_FROM 436 '436'
462_1 COME_FROM 302 '302'
Parse error at or near `LOAD_GLOBAL' instruction at offset 126
try:
_thread.start_new_thread(top_window, ())
print('\n创建转换进程...')
except:
print('erro')
else:
def load_sysSet():
if os.path.exists('sysSet.ini') == False:
with open('sysSet.ini', 'w', encoding='utf-8') as O0OOOO0O00O0OO0O0:
O0OOOO0O00O0OO0O0.write('')
O0OOO00O0O00O00O0 = []
else:
with open('sysSet.ini', 'r', encoding='utf-8') as O0OOOO0O00O0OO0O0:
O0OOO00O0O00O00O0 = O0OOOO0O00O0OO0O0.read().splitlines()
return O0OOO00O0O00O00O0
sysSet = load_sysSet()
if sysSet != []:
try:
urlSet = sysSet[0]
except Exception:
urlSet = ''
try:
browserSet = sysSet[1]
except Exception:
browserSet = '浏览器引擎:微软Edge浏览器'
else:
urlSet = ''
browserSet = '浏览器引擎:微软Edge浏览器'
def save_set():
O000O0O0O0O0OOO00 = str(entry_url.get())
O0O0O0OOOO00OOOO0 = str(browser_set.get())
OOO000OOO00O00O00 = str(O000O0O0O0O0OOO00) + '\n' + str(O0O0O0OOOO00OOOO0)
with open('sysSet.ini', 'w', encoding='utf-8') as O000OO000O0000OO0:
O000OO000O0000OO0.write(OOO000OOO00O00O00)
print('saved')
run_num = 0
run_listen_num = 0
win = Tk()
win.resizable(0, 0)
win.title('Javascript自动化测试工具')
win.configure(bg='white')
cwd = os.getcwd()
icon_path = os.path.join(cwd, 'icon', 'a', 'porcupine.ico')
win.iconbitmap(icon_path)
def run_login():
global run_num
save_set()
run_num = 0
if run_num == 0:
_thread.start_new_thread(run_browser, ())
else:
messagebox.showwarning('提示', '网页只能打开1次,请重启软件后再点击')
def run_listen():
global run_listen_num
save_set()
if run_listen_num == 0:
fresh_btn.configure(state=DISABLED)
_thread.start_new_thread(start_js, ())
def fresh_list():
_thread.start_new_thread(got_group_list, ())
edit_lock = 0
def switch_edit():
global edit_lock
global info_lock
save_set()
if edit_lock == 0:
edit_lock = 1
e_frame.pack(side='left', fill='x', pady=3, padx=1)
edit_script.unbind('<Leave>')
else:
edit_lock = 0
e_frame.pack_forget()
edit_script.bind('<Leave>', lambda O00OO00OOOOOOO0O0: edit_script.configure(bg=btn_bg, fg='black')
)
info_lock = 0
code_info_frame.pack_forget()
code_info_btn.configure(bg='white')
main_width = 30
edit_width = 50
font_set = ('微软雅黑', 11)
btn_bg = 'white'
main_frame = Frame(win, width=main_width, bg='white')
main_frame.pack(side='left', fill='x', pady=3, padx=1)
def show_content(O0O000O0OOO000O0O):
entry_url.config(show='')
def hide_content(O000OOO0000000OO0):
entry_url.config(show='-')
url_frame = LabelFrame(main_frame, text='网址设置', width=400, bg='white')
url_frame.pack(side='top', fill='x', pady=3, padx=1)
entry_url = Entry(url_frame, width=main_width, show='-')
entry_url.insert(0, urlSet)
entry_url.pack(side='top', fill='x', pady=3, padx=1)
entry_url.bind('<Button-1>', show_content)
entry_url.bind('<FocusOut>', hide_content)
start_btn = Button(main_frame, text='启动浏览器', relief='groove', width=main_width, command=run_login, bg=btn_bg, font=font_set)
start_btn.pack(side='top', fill='x', pady=3, padx=1)
def get_info--- This code section failed: ---
L. 331 0 LOAD_FAST 'O0O0000OO0O0OO0O0'
2 STORE_FAST 'OOO000OO0O000O0OO'
4_0 COME_FROM 110 '110'
4_1 COME_FROM 84 '84'
4_2 COME_FROM 30 '30'
L. 333 4 LOAD_GLOBAL origin_decrypt
6 LOAD_FAST 'OOO000OO0O000O0OO'
8 CALL_FUNCTION_1 1 ''
10 STORE_FAST 'O0O0O00OO000O0O00'
L. 334 12 LOAD_FAST 'O0O0O00OO000O0O00'
14 LOAD_STR ''
16 COMPARE_OP ==
18 POP_JUMP_IF_TRUE 112 'to 112'
20 LOAD_FAST 'O0O0O00OO000O0O00'
22 LOAD_STR 'err'
24 COMPARE_OP ==
26 POP_JUMP_IF_FALSE 32 'to 32'
L. 335 28 JUMP_FORWARD 112 'to 112'
30 JUMP_LOOP 4 'to 4'
32_0 COME_FROM 26 '26'
L. 337 32 LOAD_FAST 'O0O0O00OO000O0O00'
34 LOAD_METHOD split
36 LOAD_STR '\n'
38 CALL_METHOD_1 1 ''
40 STORE_FAST 'O0OOOOOO0O00O0O00'
L. 338 42 LOAD_GLOBAL print
44 LOAD_FAST 'O0OOOOOO0O00O0O00'
46 CALL_FUNCTION_1 1 ''
48 POP_TOP
L. 339 50 LOAD_STR '$s加密状态'
52 LOAD_FAST 'O0OOOOOO0O00O0O00'
54 LOAD_CONST -1
56 BINARY_SUBSCR
58 COMPARE_OP in
60 POP_JUMP_IF_FALSE 86 'to 86'
L. 340 62 LOAD_FAST 'O0OOOOOO0O00O0O00'
64 LOAD_METHOD pop
66 CALL_METHOD_0 0 ''
68 STORE_FAST 'OO0O0OOOOO00O0O0O'
L. 341 70 LOAD_STR '\n'
72 LOAD_METHOD join
74 LOAD_FAST 'O0OOOOOO0O00O0O00'
76 CALL_METHOD_1 1 ''
78 STORE_FAST 'O000OO0O0000OO000'
L. 342 80 LOAD_FAST 'O000OO0O0000OO000'
82 STORE_FAST 'OOO000OO0O000O0OO'
84 JUMP_LOOP 4 'to 4'
86_0 COME_FROM 60 '60'
L. 344 86 LOAD_FAST 'O0OOOOOO0O00O0O00'
88 LOAD_METHOD pop
90 CALL_METHOD_0 0 ''
92 STORE_FAST 'OO0O0OOOOO00O0O0O'
L. 345 94 LOAD_STR '\n'
96 LOAD_METHOD join
98 LOAD_FAST 'O0OOOOOO0O00O0O00'
100 CALL_METHOD_1 1 ''
102 STORE_FAST 'O000OO0O0000OO000'
L. 346 104 LOAD_FAST 'O000OO0O0000OO000'
106 STORE_FAST 'OOO000OO0O000O0OO'
L. 347 108 JUMP_FORWARD 112 'to 112'
110 JUMP_LOOP 4 'to 4'
112_0 COME_FROM 108 '108'
112_1 COME_FROM 28 '28'
112_2 COME_FROM 18 '18'
L. 348 112 LOAD_GLOBAL print
114 LOAD_FAST 'OO0O0OOOOO00O0O0O'
116 CALL_FUNCTION_1 1 ''
118 POP_TOP
L. 349 120 LOAD_FAST 'OO0O0OOOOO00O0O0O'
122 LOAD_METHOD split
124 LOAD_STR '|*-*|'
126 CALL_METHOD_1 1 ''
128 STORE_FAST 'O0O0OOOOO0OOOO0OO'
L. 350 130 LOAD_FAST 'O0O0OOOOO0OOOO0OO'
132 RETURN_VALUE
-1 RETURN_LAST
Parse error at or near `JUMP_FORWARD' instruction at offset 108
def load_code():
global edit_lock
try:
O0O0O000OOOOOO00O = os.getcwd()
OOO0O0000OOOO0OO0 = os.path.join(O0O0O000OOOOOO00O, '代码仓库')
OO0OOOO00000000OO = filedialog.askopenfilename(initialdir=OOO0O0000OOOO0OO0, filetypes=[('JSC', '.jsc')])
with open(OO0OOOO00000000OO, 'r', encoding='utf-8') as O0OO0O0O0O00OOO0O:
O00OOO0O0000OOOO0 = O0OO0O0O0O00OOO0O.read()
textPad.delete('1.0', END)
textPad.insert('1.0', O00OOO0O0000OOOO0)
O00O0O000O0O0OOO0 = get_info(O00OOO0O0000OOOO0)
print(O00O0O000O0O0OOO0)
entry_expire.delete(0, END)
entry_expire.insert(0, O00O0O000O0O0OOO0[3])
entry_author.delete(0, END)
entry_author.insert(0, O00O0O000O0O0OOO0[5])
entry_contact.delete(0, END)
entry_contact.insert(0, O00O0O000O0O0OOO0[6])
describe_Pad.delete('1.0', END)
describe_Pad.insert('1.0', O00O0O000O0O0OOO0[7].replace('[回车]', '\n'))
if edit_lock == 0:
edit_lock = 1
e_frame.pack(side='left', fill='x', pady=3, padx=1)
edit_script.configure(bg='skyblue', fg='white')
edit_script.unbind('<Leave>')
except Exception as O0OO0O0O0O0000O00:
try:
print(O0OO0O0O0O0000O00)
finally:
O0OO0O0O0O0000O00 = None
del O0OO0O0O0O0000O00
load_script = Button(main_frame, text='导入代码', relief='groove', width=main_width, bg=btn_bg, font=font_set, command=load_code)
load_script.pack(side='top', fill='x', pady=3, padx=1)
edit_script = Button(main_frame, text='编辑代码', relief='groove', width=main_width, command=switch_edit, bg=btn_bg, font=font_set)
edit_script.pack(side='top', fill='x', pady=3, padx=1)
fresh_btn = Button(main_frame, text='执行代码', relief='groove', width=main_width, command=run_listen, bg=btn_bg, font=font_set)
fresh_btn.pack(side='top', fill='x', pady=3, padx=1)
fresh_btn2 = Button(main_frame, text='停止执行', relief='groove', width=main_width, command=stop_listing_msg, bg=btn_bg, font=font_set)
fresh_btn2.pack(side='top', fill='x', pady=3, padx=1)
def switch_to_next_window():
O000OOOOOOO0O0O0O = driver.window_handles
if len(O000OOOOOOO0O0O0O) > 1:
fresh_btn.configure(state=NORMAL)
OOO0OO0OO0000000O = driver.current_window_handle
O0OO00O0O00O00OO0 = O000OOOOOOO0O0O0O.index(OOO0OO0OO0000000O)
O00000O0000OO00OO = (O0OO00O0O00O00OO0 + 1) % len(O000OOOOOOO0O0O0O)
OOOOOOO00O000OOO0 = O000OOOOOOO0O0O0O[O00000O0000OO00OO]
driver.switch_to.window(OOOOOOO00O000OOO0)
driver.execute_script("alert('主程序已切换到当前浏览器窗口标签,您执行的代码将在此标签下运行');")
sound_lock = 0
def sound_switch():
global sound_lock
if sound_lock == 0:
sound_lock = 1
sound_btn.configure(text='关闭声音')
else:
sound_lock = 1
sound_btn.configure(text='开启声音')
sound_btn = Button(main_frame, text='打开声音', relief='groove', width=main_width, command=sound_switch, bg=btn_bg, font=font_set)
sound_btn.pack(side='top', fill='x', pady=3, padx=1)
def switch_to_next_window_thread():
_thread.start_new_thread(switch_to_next_window, ())
switch_btn = Button(main_frame, text='切换浏览器标签页', relief='groove', width=main_width, command=switch_to_next_window_thread, bg=btn_bg, font=font_set)
switch_btn.pack(side='top', fill='x', pady=3, padx=1)
switch_btn.bind('<Enter>', lambda O00O0OO0O000OO0OO: switch_btn.configure(bg='lightsteelblue', fg='white')
)
switch_btn.bind('<Leave>', lambda O0OO0000OOOOO0OOO: switch_btn.configure(bg=btn_bg, fg='black')
)
def update_driver_thread():
_thread.start_new_thread(update_driver, ())
def show_c_num_id():
OOO00OOO0OO00OOO0 = str(win32api.GetVolumeInformation('C:\\')[1])
pyperclip.copy(OOO00OOO0OO00OOO0)
messagebox.showwarning('机器特征码', '您的机器特征码为:' + OOO00OOO0OO00OOO0 + '\n已复制到剪切板')
show_c_num = Button(main_frame, text='机器特征码复制', relief='groove', width=main_width, command=show_c_num_id, bg=btn_bg, font=font_set)
show_c_num.pack(side='top', fill='x', pady=3, padx=1)
start_btn.bind('<Enter>', lambda OOOO000OO000OO000: start_btn.configure(bg='red', fg='white')
)
start_btn.bind('<Leave>', lambda O0OO000OOO00OO0O0: start_btn.configure(bg=btn_bg, fg='black')
)
load_script.bind('<Enter>', lambda O0O0O0O0OO0000OO0: load_script.configure(bg='coral', fg='white')
)
load_script.bind('<Leave>', lambda OOO0O000OO0OO00O0: load_script.configure(bg=btn_bg, fg='black')
)
edit_script.bind('<Enter>', lambda O0000OOO0O0000O0O: edit_script.configure(bg='skyblue', fg='white')
)
edit_script.bind('<Leave>', lambda O0OOO0O000OO0O0O0: edit_script.configure(bg=btn_bg, fg='black')
)
fresh_btn.bind('<Enter>', lambda O00O0O0O0OO0O0OOO: fresh_btn.configure(bg='mediumseagreen', fg='white')
)
fresh_btn.bind('<Leave>', lambda OO0OOOO0O00O0O00O: fresh_btn.configure(bg=btn_bg, fg='black')
)
fresh_btn2.bind('<Enter>', lambda O000O0O0O0OOOOO0O: fresh_btn2.configure(bg='pink', fg='white')
)
fresh_btn2.bind('<Leave>', lambda OO0O000O0OOO0OO00: fresh_btn2.configure(bg=btn_bg, fg='black')
)
show_c_num.bind('<Enter>', lambda OOO0O0O0OOO0O0000: show_c_num.configure(bg='mediumaquamarine', fg='white')
)
show_c_num.bind('<Leave>', lambda O0O000OOO00O00O00: show_c_num.configure(bg=btn_bg, fg='black')
)
sound_btn.bind('<Enter>', lambda OOOO0OOO0O000OOO0: sound_btn.configure(bg='orchid', fg='white')
)
sound_btn.bind('<Leave>', lambda OO00OOOOOOO000OOO: sound_btn.configure(bg=btn_bg, fg='black')
)
e_frame = Frame(win, width=edit_width, bg='white')
e_frame.pack(side='left', fill='both', expand='yes', pady=3, padx=1, anchor='nw')
e_frame.pack_forget()
edit_frame = LabelFrame(e_frame, text='JavaScript代码编辑区', width=edit_width, bg='white')
edit_frame.pack(side='top', fill='both', expand='yes', pady=3, padx=1, anchor='nw')
textPad = ScrolledText(edit_frame, width=edit_width, height=20, bg='white', fg='black', font=('黑体',
14))
textPad.pack(side='top', fill='both', expand='yes', pady=3, padx=1, anchor=N)
def save_code():
OO00OOO000000OOOO = textPad.get('1.0', END)
if OO00OOO000000OOOO != '':
OOOO0OO0O00O0O0O0 = os.getcwd()
OO00OO0O000O0OOO0 = os.path.join(OOOO0OO0O00O0O0O0, '代码仓库')
OOOO00O000000OO0O = filedialog.asksaveasfilename(initialdir=OO00OO0O000O0OOO0, filetypes=[('JSC', '.jsc')])
if '.jsc' not in OOOO00O000000OO0O:
OOOO00O000000OO0O += '.jsc'
with open(OOOO00O000000OO0O, 'w', encoding='utf-8') as O00OO00OO0O0OO0OO:
O00OO00OO0O0OO0OO.write(OO00OOO000000OOOO)
def decrypt_oralce():
O0O0000OO0O0O0O0O = '6$etwbg$6*f'
O00O000O00OOO0OO0 = str(entry_jm.get())
OOO00O0O0OO0O000O = len(O00O000O00OOO0OO0)
if OOO00O0O0OO0O000O == 0:
print('不用解密')
else:
pass
try:
O000OOOOO00O0O0OO = O0O0000OO0O0O0O0O
O0OO0OOOOO00O0OO0 = textPad.get('1.0', END)
O0O0OO000000OO00O = AES.new(add_to_16(O000OOOOO00O0O0OO), AES.MODE_ECB)
O00OOO0O0OO0O0O00 = base64.decode=1bytes(O0OO0OOOOO00O0OO0.encode(encoding='utf-8'))
O00O0OOO000OO0O00 = str((O0O0OO000000OO00O.decrypt(O00OOO0O0OO0O0O00)), encoding='utf-8')
O00O0OOO000OO0O00 = base64.b64decode=1(O00O0OOO000OO0O00.encode('utf-8')).decode=1('utf-8')
O0OOO0O0O00OOO00O = O00O0OOO000OO0O00.split('\n')
if O00O000O00OOO0OO0 in O0OOO0O0O00OOO00O[-1]:
O0OOO0O0O00OOO00O.pop()
O0OOO0O0O00OOO00O.pop()
O0OOOOO0000OOOOOO = '\n'.join(O0OOO0O0O00OOO00O)
textPad.delete('1.0', END)
textPad.insert('1.0', O0OOOOO0000OOOOOO)
messagebox.showwarning('解密成功', '成功!若为多重加密,可继续解密')
else:
messagebox.showwarning('解密失败', '您输入的秘钥错误')
except Exception:
messagebox.showwarning('解密失败', '您输入的秘钥错误')
def add_to_16(OO0O0OOOOO0OOOO0O):
while True:
if len(OO0O0OOOOO0OOOO0O) % 16 != 0:
OO0O0OOOOO0OOOO0O += '\x00'
return str.encode(OO0O0OOOOO0OOOO0O)
def encrypt_oracle():
try:
O0000OO000OO00O0O = str(win32api.GetVolumeInformation('C:\\')[1])
OOO00O0O00O00O0OO = str(entry_tz.get())
OO00O00O000O0OOO0 = str(entry_expire.get())
if OO00O00O000O0OOO0 != '':
OOO000O0O00000000 = OO00O00O000O0OOO0 + ' 23:59:59'
O00O00OOOO0OO00O0 = time.strptime(OOO000O0O00000000, '%Y-%m-%d %H:%M:%S')
O0O0OO00OO0O0O00O = str(int(time.mktime(O00O00OOOO0OO00O0)))
else:
O0O0OO00OO0O0O00O = ''
OO0O0O0000OO0O000 = '6$etwbg$6*f'
O0OOO0O00O00OO00O = str(entry_jm.get())
O000O000OOO0O0000 = len(O0OOO0O00O00OO00O)
OOO00OOOOO0OOO00O = str(entry_author.get())
O0OOOO000OOO0O000 = str(entry_contact.get())
O00O00OOOO0000OOO = str(describe_Pad.get('1.0', END)).replace('\n', '[回车]')
if O000O000OOO0O0000 == 0:
print('不用加密')
else:
O0000O0O0000OO0O0 = OO0O0O0000OO0O000
OO00OOO0O0000OO0O = textPad.get('1.0', END) + '\n' + '$s加密状态|*-*|' + O0OOO0O00O00OO00O + '|*-*|' + OOO00O0O00O00O0OO + '|*-*|' + OO00O00O000O0OOO0 + '|*-*|' + O0O0OO00OO0O0O00O + '|*-*|' + OOO00OOOOO0OOO00O + '|*-*|' + O0OOOO000OOO0O000 + '|*-*|' + O00O00OOOO0000OOO + '|*-*|' + O0000OO000OO00O0O
OO00O0000O0O0OO00 = base64.b64encode(OO00OOO0O0000OO0O.encode('utf-8')).decode=1('ascii')
OO0O000O000000000 = AES.new(add_to_16(O0000O0O0000OO0O0), AES.MODE_ECB)
OOOOO00O000OOOOOO = OO0O000O000000000.encrypt(add_to_16(OO00O0000O0O0OO00))
O00O0000OO000OO0O = str((base64.encodebytes(OOOOO00O000OOOOOO)), encoding='utf-8')
textPad.delete('1.0', END)
textPad.insert('1.0', O00O0000OO000OO0O)
except Exception:
messagebox.showwarning('到期时间格式错误', '格式错误!\n时间格式示列:2023-05-01\n同时请核对该月是否有31号')
def clear_text():
textPad.delete('1.0', END)
entry_jm.delete('0', END)
entry_tz.delete('0', END)
entry_expire.delete('0', END)
entry_author.delete('0', END)
entry_contact.delete('0', END)
describe_Pad.delete('1.0', END)
jm_frame = Frame(e_frame, bg='white', width=15)
jm_frame.pack(side='top', pady=3, padx=1, ipadx=1, anchor='nw')
jm_label = Label(jm_frame, text='加密/解密-秘钥:', bg='white', relief=GROOVE)
jm_label.pack(side='left', pady=3, padx=1)
entry_jm = Entry(jm_frame, width=15, show='*', relief=GROOVE, bg='white')
entry_jm.pack(side='left', pady=3, padx=1)
tz_label = Label(jm_frame, text='绑定机器特征码:', bg='white', relief=GROOVE)
tz_label.pack(side='left', pady=3, padx=1)
entry_tz = Entry(jm_frame, width=15, relief=GROOVE, bg='white')
entry_tz.pack(side='left', pady=3, padx=1)
expire_label = Label(jm_frame, text='代码过期时间:', bg='white', relief=GROOVE)
expire_label.pack(side='left', pady=3, padx=1)
entry_expire = Entry(jm_frame, width=15, relief=GROOVE, bg='white')
entry_expire.pack(side='left', pady=3, padx=1)
jm_btn_frame = Frame(e_frame, bg='white', width=15)
jm_btn_frame.pack(side='top', pady=3, padx=1, ipadx=1, anchor='nw')
def show_help():
messagebox.showwarning('使用说明', '①秘钥:用于加密和解密源代码,若不填则不能加密\n②绑定机器特征码:可不填,填写后则只有指定特征码的计算机能够运行代码\n③代码过期时间:可不填,填写后则代码只能在设定日期前使用,时间格式示列:2023-05-20\n④要进行代码加密则秘钥为必填项,否则填写的特征码和过期时间均无效\n⑤解密代码只需要填写秘钥即可,无需填写特征码和过期时间')
help_btn = Button(jm_btn_frame, text='使用说明', relief='groove', width=10, bg='aliceblue', command=show_help)
help_btn.pack(side='left', pady=3, padx=15)
e_jm_btn = Button(jm_btn_frame, text='加密', relief='groove', width=10, bg='white', command=encrypt_oracle)
e_jm_btn.pack(side='left', pady=3, padx=15)
e_unjm_btn = Button(jm_btn_frame, text='解密', relief='groove', width=10, bg='white', command=decrypt_oralce)
e_unjm_btn.pack(side='left', pady=3, padx=15)
e_clear_btn = Button(jm_btn_frame, text='清空', relief='groove', width=10, bg='white', command=clear_text)
e_clear_btn.pack(side='left', pady=3, padx=15)
e_save_btn = Button(jm_btn_frame, text='保存', relief='groove', width=10, bg='white', command=save_code)
e_save_btn.pack(side='left', pady=3, padx=15)
info_lock = 0
def info_show():
global info_lock
if info_lock == 0:
info_lock = 1
code_info_frame.pack(side='left', fill='both', expand='yes', pady=3, padx=1, anchor='nw')
code_info_btn.configure(bg='royalblue')
else:
info_lock = 0
code_info_frame.pack_forget()
code_info_btn.configure(bg='white')
code_info_frame = Frame(win, width=edit_width, bg='white')
code_info_frame.pack(side='left', fill='both', expand='yes', pady=3, padx=1, anchor='nw')
code_info_frame.pack_forget()
code_info_btn = Button(jm_btn_frame, text='代码信息', relief='groove', width=10, bg='white', command=info_show)
code_info_btn.pack(side='left', pady=3, padx=15)
info_label = Label(code_info_frame, text='以下信息将在点击代码【加密】按钮时写入代码中', bg='white')
info_label.pack(side='top', pady=3, padx=15)
div_label = Label(code_info_frame, text='', bg='white')
div_label.pack(side='top', pady=7, padx=15)
author_label = Label(code_info_frame, text='作者:', bg='white', anchor='w')
author_label.pack(side='top', pady=3, padx=15, anchor='w')
entry_author = Entry(code_info_frame, text='', bg='white')
entry_author.pack(side='top', pady=3, padx=15)
contact_label = Label(code_info_frame, text='联系方式:', bg='white', anchor='w')
contact_label.pack(side='top', pady=3, padx=15, anchor='w')
entry_contact = Entry(code_info_frame, text='', bg='white')
entry_contact.pack(side='top', pady=3, padx=15)
describe_label = Label(code_info_frame, text='代码运行说明:', bg='white', anchor='w')
describe_label.pack(side='top', pady=3, padx=15, anchor='w')
describe_Pad = ScrolledText(code_info_frame, width=5, height=5, bg='white', fg='black')
describe_Pad.pack(side='top', fill='both', expand='yes', pady=3, padx=1, anchor=N)
def update_driver():
save_set()
def OOOO0OO0O0OO0OOO0():
OOOOO0O00O000OOOO = os.getcwd()
OOOOO0O0O00OO00O0 = os.path.join(OOOOO0O00O000OOOO, '更新驱动.exe')
os.system(OOOOO0O0O00OO00O0)
_thread.start_new_thread(OOOO0OO0O0OO0OOO0, ())
update_driver_btn = Button(main_frame, text='更新驱动', relief='groove', width=main_width, command=update_driver_thread, bg=btn_bg, font=font_set)
update_driver_btn.pack(side='top', fill='x', pady=3, padx=1)
browser_name = StringVar()
browser_set = ('浏览器引擎:微软Edge浏览器', '浏览器引擎:谷歌Chrome浏览器', '浏览器引擎:火狐fox浏览器')
browser_set = ttk.Combobox(main_frame, textvariable=browser_name, values=browser_set, justify='center', font=font_set)
browser_set.set(browserSet)
browser_set.pack(side='top', fill='x', pady=3, padx=1)
def open_url(O00OO000000OO0000):
OOOO000O0OOO000OO = str(browser_set.get())
if '谷歌' in OOOO000O0OOO000OO:
webbrowser.open('http://npm.taobao.org/mirrors/chromedriver/', new=0)
else:
if '微软' in OOOO000O0OOO000OO:
webbrowser.open(':https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/', new=0)
else:
if '火狐' in OOOO000O0OOO000OO:
webbrowser.open('https://github.com/mozilla/geckodriver/releases', new=0)
link = Label(main_frame, text='Webdriver Download Manually', font=('Arial', 10))
link.pack(side='top', fill='x', padx=1)
link.bind('<Button-1>', open_url)
def get_web_now_time--- This code section failed: ---
L. 648 0 LOAD_CONST 0
2 LOAD_CONST None
4 IMPORT_NAME arrow
6 STORE_FAST 'ar'
L. 649 8 LOAD_CONST 0
10 LOAD_CONST None
12 IMPORT_NAME requests
14 STORE_FAST 'req'
L. 650 16 SETUP_FINALLY 126 'to 126'
L. 651 18 LOAD_FAST 'req'
20 LOAD_METHOD get
22 LOAD_STR 'https://www.baidu.com/'
24 CALL_METHOD_1 1 ''
26 LOAD_ATTR headers
28 LOAD_STR 'Date'
30 BINARY_SUBSCR
32 STORE_FAST 'O00O0OOO00OO0O000'
L. 652 34 LOAD_FAST 'ar'
36 LOAD_METHOD get
38 LOAD_FAST 'O00O0OOO00OO0O000'
40 LOAD_CONST 4
42 LOAD_CONST -4
44 BUILD_SLICE_2 2
46 BINARY_SUBSCR
48 LOAD_STR 'DD MMM YYYY HH:mm:ss'
50 CALL_METHOD_2 2 ''
52 LOAD_FAST 'ar'
54 LOAD_METHOD now
56 CALL_METHOD_0 0 ''
58 LOAD_METHOD floor
60 LOAD_STR 'second'
62 CALL_METHOD_1 1 ''
64 BINARY_SUBTRACT
66 STORE_FAST 'O0OOOO0O000OO0O00'
L. 653 68 LOAD_FAST 'ar'
70 LOAD_METHOD now
72 CALL_METHOD_0 0 ''
74 LOAD_FAST 'O0OOOO0O000OO0O00'
76 BINARY_ADD
78 LOAD_METHOD format
80 LOAD_FAST 'time_format'
82 CALL_METHOD_1 1 ''
84 STORE_FAST 'O00O00OOOOO00O0OO'
L. 654 86 LOAD_GLOBAL time
88 LOAD_METHOD strptime
90 LOAD_FAST 'O00O00OOOOO00O0OO'
92 LOAD_CONST None
94 LOAD_CONST -4
96 BUILD_SLICE_2 2
98 BINARY_SUBSCR
100 LOAD_STR '%Y-%m-%d %H:%M:%S'
102 CALL_METHOD_2 2 ''
104 STORE_FAST 'O00OO0O0O00000O00'
L. 655 106 LOAD_GLOBAL int
108 LOAD_GLOBAL time
110 LOAD_METHOD mktime
112 LOAD_FAST 'O00OO0O0O00000O00'
114 CALL_METHOD_1 1 ''
116 CALL_FUNCTION_1 1 ''
118 STORE_FAST 'O0OOOO0O0OO00000O'
L. 656 120 LOAD_FAST 'O0OOOO0O0OO00000O'
122 POP_BLOCK
124 RETURN_VALUE
126_0 COME_FROM_FINALLY 16 '16'
L. 657 126 DUP_TOP
128 LOAD_GLOBAL BaseException
130 COMPARE_OP exception-match
132 POP_JUMP_IF_FALSE 178 'to 178'
134 POP_TOP
136 STORE_FAST 'OO000OO0O000OO0O0'
138 POP_TOP
140 SETUP_FINALLY 166 'to 166'
L. 658 142 LOAD_GLOBAL print
144 LOAD_STR '获取网络时间出错,出错原因:{}'
146 LOAD_METHOD format
148 LOAD_FAST 'OO000OO0O000OO0O0'
150 CALL_METHOD_1 1 ''
152 CALL_FUNCTION_1 1 ''
154 POP_TOP
L. 659 156 POP_BLOCK
158 POP_EXCEPT
160 CALL_FINALLY 166 'to 166'
162 LOAD_CONST -1
164 RETURN_VALUE
166_0 COME_FROM 160 '160'
166_1 COME_FROM_FINALLY 140 '140'
166 LOAD_CONST None
168 STORE_FAST 'OO000OO0O000OO0O0'
170 DELETE_FAST 'OO000OO0O000OO0O0'
172 END_FINALLY
174 POP_EXCEPT
176 JUMP_FORWARD 180 'to 180'
178_0 COME_FROM 132 '132'
178 END_FINALLY
180_0 COME_FROM 176 '176'
Parse error at or near `POP_EXCEPT' instruction at offset 158
webtime = get_web_now_time()
def Secret(O00OO000000OO00OO):
OOOOOO0O00OOOO0OO = O00OO000000OO00OO
OOO0OO0000O0OOO00 = win32api.GetVolumeInformation('C:\\')
OOO00OOO000O00OO0 = (str(OOO0OO0000O0OOO00[1]) + OOOOOO0O00OOOO0OO + 'javascriptYES').encode('utf-8')
OO0O00O000OOOOOO0 = base64.b64encode(OOO00OOO000O00OO0)
OO0000OOO00OO00O0 = hashlib.md5()
OO0000OOO00OO00O0.update(OO0O00O000OOOOOO0)
O00O0000OOO0O0O0O = OO0000OOO00OO00O0.hexdigest()
O00O0000OOO0O0O0O = O00O0000OOO0O0O0O[:8]
O00OO0000O0000O00 = O00O0000OOO0O0O0O + O00OO000000OO00OO
return O00OO0000O0000O00
def save_secret(O0000OO00000OOOO0):
with open('cock.egg', 'w') as OO0000O0OO0OOO0O0:
OO0000O0OO0OOO0O0.write(O0000OO00000OOOO0)
def load_secret():
with open('cock.egg', 'r') as OO0OOO0OO0O0O0O00:
OO0O000000000000O = OO0OOO0OO0O0O0O00.read()
return OO0O000000000000O
def active_machine():
O00O0OO0OOO0O0OOO = secret_entry3.get()
OO0OOOO0000O00OOO = Secret(O00O0OO0OOO0O0OOO[8:])
if O00O0OO0OOO0O0OOO == OO0OOOO0000O00OOO:
if webtime - int(O00O0OO0OOO0O0OOO[8:]) > 0:
messagebox.showwarning('过期提示', '激活码已过期,请使用正确的激活码')
else:
if webtime == -1:
messagebox.showwarning('网络未连接', '请连接网络后重试')
else:
OOOOOO0O0O00O0OOO = time.localtime(int(O00O0OO0OOO0O0OOO[8:]))
O0000O0O0O0OO0OO0 = time.strftime('%Y年%m月%d日', OOOOOO0O0O00O0OOO)
lable_expire.configure(text=(O0000O0O0O0OO0OO0 + '过期'), bg='hotpink')
save_secret(O00O0OO0OOO0O0OOO)
start_btn.config(state=NORMAL)
load_script.configure(state=NORMAL)
edit_script.configure(state=NORMAL)
fresh_btn.configure(state=NORMAL)
fresh_btn2.configure(state=NORMAL)
switch_btn.configure(state=NORMAL)
lable_expire.configure(fg='white')
label_7.pack_forget()
secret_entry3.pack_forget()
activeBtn.pack_forget()
show_c_num.configure(bg='white', fg='black')
messagebox.showinfo('激活成功', '软件已激活,可正常使用O(∩_∩)O')
else:
messagebox.showwarning('激活码错误', '输入正确的激活码')
def check_expire():
while True:
time.sleep(3600)
O000OOOOOOOO0O000 = get_web_now_time()
if os.path.exists('cock.egg') == False:
save_secret('000000000000000000')
O00O00OO00OO00O00 = '000000000000000000'
O0O00O00O0O0OO000 = Secret('0000000000')
else:
O00O00OO00OO00O00 = load_secret()
O0O00O00O0O0OO000 = Secret(O00O00OO00OO00O00[8:])
while O00O00OO00OO00O00 != O0O00O00O0O0OO000 or O000OOOOOOOO0O000 - int(O00O00OO00OO00O00[8:]) > 0 or O000OOOOOOOO0O000 == -1:
stop_listing_msg()
fresh_btn.configure(state=DISABLED)
fresh_btn2.configure(state=DISABLED)
start_btn.config(state=DISABLED)
switch_btn.configure(state=DISABLED)
messagebox.showwarning('过期提示', '激活码已过期,请重新启动软件注册')
print('自检完成,未过期')
if os.path.exists('cock.egg') == False:
save_secret('000000000000000000')
local_secret = '000000000000000000'
secret = Secret('0000000000')
else:
local_secret = load_secret()
secret = Secret(local_secret[8:])
lable_expire = Label(main_frame, text='', anchor='center', relief='groove', width=main_width, fg='white')
lable_expire.pack(side='top', fill='x', pady=3, padx=1)
if local_secret != secret or webtime - int(local_secret[8:]) > 0 or webtime == -1:
lable_expire.configure(text='软件未激活', bg='white', fg='black')
show_c_num.configure(bg='mediumaquamarine', fg='white')
start_btn.config(state=DISABLED)
load_script.configure(state=DISABLED)
edit_script.configure(state=DISABLED)
fresh_btn.configure(state=DISABLED)
fresh_btn2.configure(state=DISABLED)
switch_btn.configure(state=DISABLED)
label_7 = Label(main_frame, text='输入激活码:', anchor='w', relief='groove', width=main_width)
label_7.pack(side='top', fill='x', pady=3, padx=1)
secret_entry3 = Entry(main_frame, width=main_width, bg='GhostWhite')
secret_entry3.insert(0, '')
secret_entry3.pack(side='top', fill='x', pady=3, padx=1)
activeBtn = Button(main_frame, text='激 活', relief='groove', width=main_width, height=1, command=active_machine, bg='hotpink', fg='white')
activeBtn.pack(side='top', fill='x', pady=3, padx=1)
if time.time() - int(local_secret[8:]) > 0:
messagebox.showwarning('过期提示', '激活码已过期,请重新注册')
else:
time_local = time.localtime(int(local_secret[8:]))
dt = time.strftime('%Y年%m月%d日', time_local)
lable_expire.configure(text=(dt + '过期'), bg='hotpink')
_thread.start_new_thread(check_expire, ())
def agree_it():
agree_frame.pack_forget()
main_frame.pack(side='left', fill='x', pady=3, padx=1)
def disagree_it():
win.destroy()
agree_frame = Frame(win, width=main_width, bg='white')
agree_frame.pack(side='left', fill='x', pady=3, padx=1, anchor='center')
agreePad = ScrolledText(agree_frame, width=edit_width, height=18, bg='white', fg='black', font=('黑体',
16))
agreePad.pack(side='top', fill='both', expand='yes', pady=3, padx=1, anchor=N)
font1 = ('黑体', 16)
font2 = ('黑体', 14)
font3 = ('黑体', 12)
agreePad.insert(END, ' 使用协议\n\n 欢迎使用本工具,请您务必仔细阅读本协议,以便更好地使用本工具。\n\n一、服务说明\n\n 1.本工具是一款可在本地计算机调用浏览器执行用户编写的JavaScript代码的工具,为用户提供代码编辑器,点击“执行”按钮即可运行代码。\n\n 2.用户必须自行承担使用本工具的一切后果。\n\n 3.用户自行编写或执行的JavaScript代码不得涉及违法活动,否则一切后果由用户自行承担。\n\n二、使用规则\n\n 1.用户在使用本工具时应遵守国家法律法规、政策规定及其他相关规定。\n\n 2.用户不得利用本工具从事任何违反国家法律法规、政策规定及其他相关规定的活动。\n\n 3.用户自行编写或执行的JS代码不得涉及违法活动,否则一切后果由用户自行承担。\n\n三、免责声明\n\n 1.本工具不对用户自行编写的JS代码的正确性、合法性、安全性进行保证,如因用户自行编写的JS代码引起的任何问题均由用户自行承担。\n\n 2.用户因使用本工具而导致的任何直接或间接损失,本工具概不负责,亦不承担任何法律责任。\n\n 3.本工具不对用户因使用本工具未能达到预期效果或遭受任何非正常因素引起的损失承担任何责任。\n\n四、知识产权声明\n\n 用户不得对本工具的任何资源、信息和材料进行修改、重制、复制、抄袭、传播、出售等。\n\n五、其他条款\n\n 1.本协议未涉及的问题和争议,应参照中华人民共和国国家法律法规等规定予以处理。\n\n 2.本工具保留协议修订的权利,如果本协议有任何更改,我们将在后续版本更新中公布,一经公布即具有法律约束力,请您经常更新软件获得最新协议。\n\n 3.本协议一经点击下方确定按钮,则视为用户已经完全了解并接受了本协议的各项条款,并同意遵守相关规定。\n\n 4.本协议的解释权归本工具所有。如用户对本协议有任何疑问或建议,请联系本工具客服。\n\n', font1)
agreePad.configure(state=DISABLED)
choose_frame = Frame(agree_frame, width=main_width, bg='white')
choose_frame.pack(side='top', fill='x', pady=3, padx=1, anchor='center')
agree_btn = Button(choose_frame, text='同 意', relief='groove', bg=btn_bg, font=font_set, state=DISABLED, command=agree_it)
agree_btn.pack(side='left', fill='x', pady=3, padx=155, anchor='center')
disagree_btn = Button(choose_frame, text='不同意', relief='groove', bg=btn_bg, font=font_set, state=DISABLED, command=disagree_it)
disagree_btn.pack(side='left', fill='x', pady=3, padx=1, anchor='center')
main_frame.pack_forget()
def wait_five():
agree_btn.configure(text='同 意(5)')
time.sleep(1)
agree_btn.configure(text='同 意(4)')
time.sleep(1)
agree_btn.configure(text='同 意(3)')
time.sleep(1)
agree_btn.configure(text='同 意(2)')
time.sleep(1)
agree_btn.configure(text='同 意(1)')
time.sleep(1)
agree_btn.configure(text='同 意', state=NORMAL)
disagree_btn.configure(state=NORMAL)
_thread.start_new_thread(wait_five, ())
win.mainloop()