def __init__(self, engine=None): self.__master_file = "" dir_path = os.path.dirname(os.path.realpath(__file__)) with open(dir_path + "/Simple-RFC1738-Encoder/js/common.js") as f: file = f.read() self.__master_file += file + "\n\n" with open(dir_path + "/Simple-RFC1738-Encoder/js/encode.js") as f: file = f.read() self.__master_file += file + "\n\n" with open(dir_path + "/Simple-RFC1738-Encoder/js/decode.js") as f: file = f.read() self.__master_file += file + "\n\n" with open(dir_path + "/Simple-RFC1738-Encoder/js/utf8.js") as f: file = f.read() self.__master_file += file #print(self.__master_file) if engine is None: self.__execjs_engine = execjs.get() # automatically picked runtime else: self.__execjs_engine = execjs.get(engine) self.ctx = self.__execjs_engine.compile(self.__master_file)
def __init__(self, comicid=None): try: execjs.get() except Exception: raise RuntimeError('请先安装nodejs。 https://nodejs.org/zh-cn/') super().__init__() self.comicid = comicid
def __init__(self): self._session = None if self.REQUIRE_JAVASCRIPT: try: execjs.get() except Exception: raise RuntimeError('请先安装nodejs。 https://nodejs.org/zh-cn/')
def __init__(self): self.timeout = 30 if self.REQUIRE_JAVASCRIPT: try: execjs.get() except Exception: raise RuntimeError( 'pleaese install nodejs first. https://nodejs.org/zh-cn/')
def get_signature(user_id, max_behot_time): with open('newsign.js', 'r', encoding='utf-8') as f: jsData = f.read() execjs.get() ctx = execjs.compile(jsData).call( 'tac', str(user_id) + str(max_behot_time) ) # 复原TAC.sign(userInfo.id + "" + i.param.max_behot_time) return ctx
def __init__(self, comicid_or_url=None): self._tag_info = None if self.REQUIRE_JAVASCRIPT: try: execjs.get() except Exception: raise RuntimeError('pleaese install nodejs first. https://nodejs.org/zh-cn/') self.comicid = self.get_comicid_by_url(comicid_or_url=comicid_or_url) if self.NEEDED_NODE_PACKAGES: self.chekc_node_modules()
def check_jsenv(): """ Description: Check the js runtime environment @return: `True` or `False` """ try: execjs.get() except Exception: raise EnvironmentError("未发现js运行环境")
def execute(bot, data, forward=True): args = {"peer_id": data['peer_id'], "v": "5.60", } if forward: args.update({"forward_messages": data['message_id']}) code = bot.html_decode(' '.join(data['message'].split('<br>')[1:])) JavaScript = execjs.get(execjs.runtime_names.Node) print('JavaScript runtime -- ', execjs.get().name) js = JavaScript.eval(code) args['message'] = 'Выполнено {}\n{}'.format(execjs.get().name, js) bot.Replyqueue.put(args)
def unscramble_galaxy_script(self): # check script body if not self.script_body.startswith('var Deuterium = '): self.error_str = 'Invalid format of script body: cannot parse it!' return None # create JavaScript interpreter runtime try: js_runtime = execjs.get('Node') except execjs_exceptions.RuntimeUnavailableError: js_runtime = execjs.get() # default # find galaxy script part eval_start = self.script_body.find('eval(function(p,a,c,k,e,d)') if eval_start == -1: # try to find an end of galaxy rows declaration; maybe it is not packed (uni5) eval_end = self.script_body.find("$('#galaxy').append(PrintRow());") if eval_end == -1: self.error_str = 'parse error (1) cannot find start (and end) of packed function' return None # if we are here, probably galaxy script is not scrambled # eval_end is pointing at correct location, need to figure eval_start rows_end_str = "$('#galaxy').append(PrintSelector(fleet_shortcut));" eval_start = self.script_body.find(rows_end_str) if eval_start == -1: self.error_str = 'parse error (3) cannot find start of unpacked function' return None eval_start += len(rows_end_str) eval_text = self.script_body[eval_start:eval_end] eval_text = eval_text.strip() eval_text = 'var row = []; ' + eval_text + '\nreturn row;' # ctx = js_runtime.compile(eval_text) self.galaxy_rows = ctx.exec_(eval_text) else: # packed, as usual (uni4) eval_end = self.script_body.find("$('#galaxy').append(PrintRow());") if eval_end == -1: self.error_str = 'parse error(2) cannot find end of function' return None eval_text = self.script_body[eval_start:eval_end] eval_text = eval_text.strip() # ^^ [eval(function(p,a,c,k,e,d){e=function(c){r... ...141|7866|u0426'.split('|')))] eval_text = eval_text[5:-1] # ^^ [function(p,a,c,k,e,d){e=functi... ...0426'.split('|'))] eval_res = js_runtime.eval(eval_text) # Now, eval_res is a string: # row[12]={"planet":12,"id_planet":54448,"ally_planet":0,"metal":0,"crystal":0, ... eval_res = 'var row = []; ' + eval_res + "\nreturn row;" ctx = js_runtime.compile(eval_res) self.galaxy_rows = ctx.exec_(eval_res) return self.galaxy_rows
def execute(bot, data, forward=True): args = { "peer_id": data['peer_id'], "v": "5.60", } if forward: args.update({"forward_messages": data['message_id']}) code = bot.html_decode(' '.join(data['message'].split('<br>')[1:])) JavaScript = execjs.get(execjs.runtime_names.Node) print('JavaScript runtime -- ', execjs.get().name) js = JavaScript.eval(code) args['message'] = 'Выполнено {}\n{}'.format(execjs.get().name, js) bot.Replyqueue.put(args)
def unscramble_galaxy_script(self): if not self.script_body.startswith('var Deuterium = '): logger.error('Invalid format of script body: cannot parse it!') return None eval_start = self.script_body.find('eval(function(p,a,c,k,e,d)') if eval_start == -1: logger.error('parse error (1)') return None eval_end = self.script_body.find("$('#galaxy').append(PrintRow());") if eval_end == -1: logger.error('parse error (2)') return None eval_text = self.script_body[eval_start:eval_end] eval_text = eval_text.strip() logger.debug('eval [{0}]'.format(eval_text)) # ^^ [eval(function(p,a,c,k,e,d){e=function(c){r... ...141|7866|u0426'.split('|')))] inner_eval = eval_text[5:-1] logger.debug('inner eval [{0}]'.format(inner_eval)) # ^^ [function(p,a,c,k,e,d){e=functi... ...0426'.split('|'))] # # create JS interptreter and eval that js_runtimes = execjs.available_runtimes() if 'Node' in js_runtimes: js = execjs.get('Node') else: js = execjs.get() # default logger.debug('Using [{0}] as JS runtime.'.format(js.name)) eval_res = js.eval(inner_eval) # Now, eval_res is a string: # row[12]={"planet":12,"id_planet":54448,"ally_planet":0,"metal":0,"crystal":0, # "name":"\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u043f\u043b\u0430\u043d\u0435\u0442\u0430", # "planet_type":1,"destruyed":0,"image":"normaltempplanet02","last_active":60,"parent_planet":0, # "luna_id":null,"luna_name":null,"luna_destruyed":null,"luna_diameter":null,"luna_temp":null, # "user_id":71992,"username":"******", # "race":4,"ally_id":0,"authlevel":0,"onlinetime":1,"urlaubs_modus_time":0,"banaday":0,"sex":1, # "avatar":7,"user_image":"","ally_name":null,"ally_members":null,"ally_web":null,"ally_tag":null, # "type":null,"total_rank":7865,"total_points":0};row[9]={"planet":9,"id_planet":54450,"ally_planet":0, # "metal":0,"crystal":0,"name":"Arnon","planet_type":1,"destruyed":0,"image":"normaltempplanet08", # "last_active":0,"parent_planet":0,"luna_id":null,"luna_name":null,"luna_destruyed":null, # "luna_diameter":null,"luna_temp":null,"user_id":71995,"username":"******","race":4,"ally_id":389, # "authlevel":0,"onlinetime":0,"urlaubs_modus_time":0,"banaday":0,"sex":1,"avatar":5, # "user_image":"71995_1440872455.jpg","ally_name":"Fury","ally_members":8,"ally_web":"", # "ally_tag":"Fury","type":null,"total_rank":141,"total_points":115582}; # ... # we ned to eval() this string again, slightly modified, to get resulting row: eval_res = 'var row = []; ' + eval_res + "\nreturn row;" ctx = js.compile(eval_res) self.galaxy_rows = ctx.exec_(eval_res)
def validate_javascript_b(self, js_file_list): node_runner = get('Node') for a_single_file in js_file_list: javascript_program = node_runner.compile(''' module.paths.push('%s'); standard_package = require('standard'); function validateMyJS() { return standard_package.lintTextSync('%s') } ''' % (path.join(path.dirname(__file__), 'node_modules'), a_single_file)) standard_data = javascript_program.call('validateMyJS') if standard_data['results'][0]['messages'] != None: for error in standard_data['results'][0]['messages']: print("Error Located: " + error['message']) print(f"Error Count: {standard_data['errorCount']}") print(f"Warning Count: {standard_data['warningCount']} \n") all_javascript_string = "" for a_file in js_file_list: with open(a_file) as js_file: js_code = js_file.read() all_javascript_string += f"{js_code}\n" print("Files Have been Validated by Standard JS \n") return all_javascript_string
def getJs2(self, data): try: import execjs node = execjs.get("Node") except: printl('nodejs not found', self, 'E') self.session.open( MessageBoxExt, _("This plugin requires packages python-pyexecjs and nodejs."), MessageBoxExt.TYPE_INFO) return js = re.search('(.*?)if\(\$\(window', data, re.S).group(1) js = js + "function go(){ cookie = toHex(BFCrypt.decrypt(c, 2, a, b)) };" js = js + 'go(); return cookie;' result = node.exec_(js) printl('BLAZINGFAST-WEB-PROTECT: ' + result, self, 'A') mdh_ck.update({'BLAZINGFAST-WEB-PROTECT': str(result)}) import requests requests.cookies.cookiejar_from_dict(mdh_ck, cookiejar=mdh_cookies) url = "https://www.stream-mydirtyhobby.co/" twAgentGetPage(url, agent=myagent, cookieJar=mdh_cookies, headers={ 'Referer': 'https://www.stream-mydirtyhobby.co/' }, timeout=30).addCallback(self.genreData).addErrback( self.genreData)
def get_w(): node = execjs.get() with open('demo.js', 'r', encoding='utf-8') as f: decrypt_js = f.read() ctx = execjs.compile(decrypt_js) data = ctx.call('E2') print(data)
def validate_javascript_a(self, js_files): runtime = get('Node') print("Validating JavaScript file(s)") for current_file in js_files: context = runtime.compile(''' module.paths.push('%s'); s = require('standard'); function lintJS() { return s.lintTextSync('%s') } ''' % (path.join(path.dirname(__file__), 'node_modules'), current_file)) validation_results = context.call('lintJS') error_count = validation_results['errorCount'] warning_count = validation_results['warningCount'] if validation_results['results'][0]['messages'] != None: error_messages = validation_results['results'][0]['messages'] for error in error_messages: print("Error Found.") print("Error Message: " + error['message']) print("Error Count: " + str(error_count)) print("Warning Count: " + str(warning_count) + '\n') js_code = "" for f in js_files: with open(f) as js_file: js = js_file.read() js_code += js + ' \n' return js_code
def __init__(self, challenge, gt, referer): self.challenge = challenge self.gt = gt self.session = requests.Session() self.session.headers[ 'User-Agent'] = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36' self.session.headers['Referer'] = referer self.node = execjs.get() with open('geetest_cracking/sense.js', 'r', encoding='utf8') as f: source_sense = f.read() self.context_sense = self.node.compile(source_sense) with open('geetest_cracking/fullpage.js', 'r', encoding='utf8') as f: source_fullpage = f.read() self.context_fullpage = self.node.compile(source_fullpage) with open('geetest_cracking/fullpage2.js', 'r', encoding='utf8') as f: source_fullpage2 = f.read() self.context_fullpage2 = self.node.compile(source_fullpage2) with open('geetest_cracking/slide.js', 'r', encoding='utf8') as f: source_slide = f.read() self.context_slide = self.node.compile(source_slide) with open('geetest_cracking/click.js', 'r', encoding='utf8') as f: source_click = f.read() self.context_click = self.node.compile(source_click)
def get_cookie_js(self, js): with open(self.file, 'r', encoding='utf-8') as f: ctx = execjs.get().compile(f.read()) data = ctx.call('Encrypted', js) func_js = data[213:-196] # 匹配用于计算c_token值的函数 return func_js, data
def main(): parser = ArgumentParser() parser.add_argument('--print-available-runtimes', action=PrintRuntimes) parser.add_argument('-r', '--runtime', action='store', dest='runtime') parser.add_argument('-e', '--eval', action='store', dest='expr') parser.add_argument("--encoding", action="store", dest="files_encoding", default="utf8") parser.add_argument(nargs="*", action='store', dest='files') opts = parser.parse_args() runtime = execjs.get(opts.runtime) codes = [] for f in opts.files: with io.open(f, encoding=opts.files_encoding) as fp: codes.append(fp.read()) context = runtime.compile("\n".join(codes)) if opts.expr: if isinstance(opts.expr, bytes): expr = opts.expr.decode() else: expr = opts.expr sys.stdout.write(repr(context.eval(expr)) + "\n") else: ret = context.eval(sys.stdin.read()) sys.stdout.write(repr(ret) + "\n")
def solve_cf_challenge(self, resp, headers, **kwargs): headers = headers.copy() url = resp.url parsed = urlparse(url) domain = parsed.netloc page = resp.content kwargs.pop("params", None) # Don't pass on params try: # Extract the arithmetic operation challenge = re.search(r'name="jschl_vc" value="(\w+)"', page).group(1) builder = re.search( r"setTimeout\(function\(\){\s+(var t,r,a,f.+?\r?\n[\s\S]+?a\.value =.+?)\r?\n", page ).group(1) builder = re.sub(r"a\.value =(.+?) \+ .+?;", r"\1", builder) builder = re.sub(r"\s{3,}[a-z](?: = |\.).+", "", builder) except AttributeError: # Something is wrong with the page. This may indicate Cloudflare has changed their # anti-bot technique. If you see this and are running the latest version, # please open a GitHub issue so I can update the code accordingly. raise IOError( "Unable to parse Cloudflare anti-bots page. Try upgrading cfscrape, or " "submit a bug report if you are running the latest version." ) # Lock must be added explicitly, because PyV8 bypasses the GIL ctxt = execjs.get("PhantomJS") # Safely evaluate the Javascript expression answer = str(int(ctxt.eval(builder)) + len(domain)) params = {"jschl_vc": challenge, "jschl_answer": answer} submit_url = "%s://%s/cdn-cgi/l/chk_jschl" % (parsed.scheme, domain) headers["Referer"] = url return requests.get(submit_url, params=params, headers=headers, **kwargs)
def get_params(mid, max_behot_time=0): node = execjs.get() # ctx = node.compile(open('encryption.js', 'r', encoding='gbk').read()) ctx = node.compile(toutiaohao_sign_js) p = ctx.call('getParams', mid, max_behot_time) print(json.dumps(p, indent=4, ensure_ascii=False)) return p
def parseOL(self, data): try: import execjs node = execjs.get("Node") except: printl('nodejs not found', self, 'E') self.session.open( MessageBoxExt, _("This plugin requires packages python-pyexecjs and nodejs."), MessageBoxExt.TYPE_INFO) return script = re.findall( '<script language="JavaScript" type="text/javascript">(.*?)</script>', data, re.S) if script: func = re.findall('function\s(.*?)\(', data, re.S)[0] js = script[0].replace(func, 'decrypt').replace( 'document.write', 'video_url=') + "return video_url;" data = str(node.exec_(js)) script = re.findall( '<script language="JavaScript" type="text/javascript">(.*?)</script>', data, re.S) if script: func = re.findall('function\s(.*?)\(', data, re.S)[0] js = script[0].replace(func, 'decrypt').replace( 'document.write', 'video_url=') + "return video_url;" data = str(node.exec_(js)) stream = re.findall( '<iframe.*?src=[\'|"](http[s]?://.*?\/.*?)[\'|"|\&|<]', data, re.S | re.I) get_stream_link(self.session).check_link( stream[0], self.got_link)
def login(self, salt, randstr, ticket): with open('rsa.js', 'r', encoding='utf-8') as f: source = f.read() phantom = execjs.get('PhantomJS') context = phantom.compile(source) p = context.call('get_pass', self.password, salt, randstr) url = 'https://ssl.ptlogin2.qq.com/login' params = { 'u': self.username, 'verifycode': randstr, 'pt_vcode_v1': '1', 'pt_verifysession_v1': ticket, 'p': p, 'pt_randsalt': '2', 'u1': 'https://qzs.qzone.qq.com/qzone/v5/loginsucc.html?para=izone', 'ptredirect': '0', 'h': '1', 't': '1', 'g': '1', 'from_ui': '1', 'ptlang': '2052', 'js_type': '1', 'login_sig': '', 'pt_uistyle': '40', 'aid': '549000912', 'daid': '5', 'has_onekey': '1', } response = self.session.get(url=url, params=params) print(response.text)
def freeProxy15(): """ 零度代理, 不能使用 """ def get_token(page, timestamp): token = str(page) + '15' + str(timestamp) hl = hashlib.md5() hl.update(token.encode(encoding='utf-8')) return hl.hexdigest() node = execjs.get() ctx = node.compile(open('js/nyloner.js').read()) session = requests.session() session.get('https://nyloner.cn/proxy', headers={ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36' }) for page in range(1, 11): try: timestamp = int(time.time()) token = get_token(page, timestamp) url = 'https://nyloner.cn/proxy?page=%s&num=15&token=%s&t=%s' % (page, token, timestamp) resp = session.get(url, timeout=5) list_str = resp.json()['list'] list_str = ctx.call("decode_str", list_str) data_json = json.loads(list_str) for ip_info in data_json: yield ip_info['ip'] + ':' + ip_info['port'] except: time.sleep(2)
def encrypt_pwd(self): # serverTime = 'e1a6f1d17c' with open('./pwd_wap.js', 'r', encoding='utf-8') as f: js_content = f.read() # encrypt js_engine = execjs.get() cm = js_engine.compile(js_content) gid = cm.call('guideRandom') post_data = self._get_params(gid) # replace JS params # print(self.serverTime) js_content = js_content.replace( '{{serverTime}}', 'var serverTime="%s";' % self.serverTime) js_content = js_content.replace('{{module}}', 'var module="%s";' % config.MODULE) cm = js_engine.compile(js_content) en_pwd = cm.call('enbaidupwd', self.pwd) post_data['password'] = en_pwd post_data['gid'] = gid print(post_data) return post_data
def __init__(self): f = open('jsfuck.js', 'r') jsf_code = f.read() js = execjs.get() #print "Using Engine %s" % js.name self.jsf_int = js.compile(jsf_code) pass
def get_language_map(self, ss, language_url, proxies): r = ss.get(language_url, headers=self.host_headers, proxies=proxies) r.raise_for_status() lang_map_str = re.search(pattern='languagePair = {(.*?)}', string=r.text, flags=re.S).group(0) #C= return execjs.get().eval(lang_map_str)
def getPassword(password, nonce, servertime, rsakey): #调用js加密密码 with open('sslogin.js', 'r') as f: source = f.read() phantom = execjs.get("PhantomJS") getPass = phantom.compile(source) mypass = getPass.call("get_pass", password, nonce, servertime, rsakey) return mypass
def setUpClass(cls): with open('eos/__javascript__/eos.js_tests.js', 'r') as f: code = f.read() cls.ctx = execjs.get().compile('var window={},navigator={};' + code + 'var test=window.eosjs_tests.' + cls.module + '.__all__.' + cls.name + '();test.setUpClass();')
def getName(name): #调用js加密用户名 with open('sslogin.js', 'r') as f: source = f.read() phantom = execjs.get("PhantomJS") getPass = phantom.compile(source) myname = getPass.call("get_name", name) return myname
def get_answer3(question): api = 'https://www.150s.cn/topic/getSubject' url = 'https://www.150s.cn/' # 调用本地js脚本,需要node.js或其他环境 node = execjs.get() file = 'a.js' ctx = node.compile(open(file).read()) cnt = 1 ff = open("44.txt", mode='w+') for i in question: session = requests.Session() h = {'User-Agent': random.choice(USER_AGENTS)} f = session.get(url, headers=h) print("----第 %d 题----" % cnt) i['stem'] = i['stem'].replace('\n', '') i['stem'] = i['stem'].replace('\t', '') js = 'searchProblem("{0}")'.format(i['stem']) sec = ctx.eval(js) data = {"secret": sec, "title": i['stem']} req = session.post(api, data=data, headers=h) tmp_data = json.loads(req.text) print("题目: " + tmp_data['title']) print("答案: " + tmp_data['answer']) print("") ff.write("第" + str(cnt) + "题 : ") ff.write(tmp_data['title'] + '\n') ff.write("答案: " + tmp_data['answer'] + '\n\n') ff.write("------------") ff.flush() cnt = cnt + 1 time.sleep(1) ff.close()
def create_scraper(cls, sess=None, js_engine=None): """ Convenience function for creating a ready-to-go requests.Session (subclass) object. """ if js_engine: os.environ["EXECJS_RUNTIME"] = js_engine js_engine = execjs.get().name if not js_engine: raise EnvironmentError("No Javascript runtime installed. " "Please install Node.js or equivalent Javascript runtime. ") #if not ("Node" in js_engine or "V8" in js_engine): #raise EnvironmentError("Your Javascript runtime '%s' is not supported due to security concerns. " #"Please use Node.js or PyV8. To force a specific engine, " #"such as Node, call create_scraper(js_engine=\"Node\")" % js_engine) scraper = cls(js_engine=js_engine) if sess: attrs = ["auth", "cert", "cookies", "headers", "hooks", "params", "proxies", "data"] for attr in attrs: val = getattr(sess, attr, None) if val: setattr(scraper, attr, val) return scraper
def create_scraper(cls, sess=None, js_engine=None): """ Convenience function for creating a ready-to-go requests.Session (subclass) object. """ if js_engine: os.environ["EXECJS_RUNTIME"] = js_engine js_engine = execjs.get().name if not ("Node" in js_engine or "V8" in js_engine): raise EnvironmentError( "Your Javascript runtime '%s' is not supported due to security concerns. " "Please use Node.js or PyV8. To force a specific engine, " "such as Node, call create_scraper(js_engine=\"Node\")" % js_engine) scraper = cls(js_engine=js_engine) if sess: attrs = [ "auth", "cert", "cookies", "headers", "hooks", "params", "proxies", "data" ] for attr in attrs: val = getattr(sess, attr, None) if val: setattr(scraper, attr, val) return scraper
def run_js(js_text: str, invoke: str): js_env = execjs.get().name print('-----------------------------------------------------------------') print('Run java script: ') print('Js environment: ' + js_env) if js_env == 'JScript': print( 'Warning: Run JS in Windows environment may cause access denied and Security Warning.\n' 'It is recommended to use NodeJs.') else: pass try: context = execjs.compile(js_text) return context.call(invoke) except Exception as e: print( 'Error: Run JS fail, please check the JS environment and your Security Setting.' ) print(e) print(traceback.format_exc()) return None finally: print( '-----------------------------------------------------------------' )
def test_case(self): model = clone(estimator) model.fit(**fit_data) for method in methods: try: code = sklearn2code(model, method, javascript) except ExpressionTypeNotSupportedError: continue js = execjs.get('Node') context = js.compile(code) exported_pred = [] try: for _, row in export_predict_data['X'].iterrows(): val = context.eval('%s(%s)' % (method, ', '.join( [str(x) if x == x else 'NaN' for x in row]))) exported_pred.append(val) exported_pred = np.array(exported_pred) pred = DataFrame(getattr(model, method)(**predict_data)) assert_array_almost_equal(np.ravel(pred), np.ravel(exported_pred), 3) except: # print(code) import clipboard clipboard.copy(code) raise
def _get_runntime(): """ :param path: 加密js的路径,注意js中不要使用中文!估计是pyexecjs处理中文还有一些问题 :return: 编译后的js环境,不清楚pyexecjs这个库的用法的请在github上查看相关文档 """ phantom = execjs.get() # 这里必须为phantomjs设置环境变量,否则可以写phantomjs的具体路径 with open(js_path, 'r') as f: source = f.read() return phantom.compile(source)
def __init__(self, script, logger=None): try: import execjs except ImportError: raise ImportError('Please install PyExecJS') self.runner = execjs.get() self.logger = getLogger('js', logger) self.ctx = self.runner.compile(self.HEADER + script)
async def evaljs(self, *, code:str): """eval JS code in Node.JS""" code_clean = "{0}".format(code.strip("```")) node = execjs.get("Node") execute = node.eval(code_clean) try: result = node.eval(code_clean) await self.bot.say(code.format(result)) except execjs.ProgramError as e: await self.bot.say(code.format(type(e).__name__ + ': ' + str(e)))
def book(session, kid, action=None): with open("./ios/bus.js") as r: js = execjs.get("Node").compile(r.read()) if not action: res = session.post('http://bus.kuas.edu.tw/API/Reserves/add', data="{busId:"+ kid +"}") else: kid['reserveId'] = int(kid['key']) res = session.post('http://bus.kuas.edu.tw/API/Reserves/remove?_dc='+str(js.call('getTime')), data=json.dumps(kid)) resource = json.loads(res.content) return resource['message']
def list_js_runtimes(): ajsr = execjs.available_runtimes() if len(ajsr) > 0: print('Detected {0} JavaScript runtimes:'.format(len(ajsr))) for js in ajsr: jsr = execjs.get(js) pref_str = '' if js == 'Node': pref_str = ' <== I prefer this one!' print(' {0}: {1}{2}'.format(js, jsr.name, pref_str)) else: print('No JS runtimes detected! Install Node.js, spidermonkey or something!') sys.exit(0)
def initialize_javascript_runtime(): global jsrt, jsctx, jsinitcnt pac_content = main_gfwlist2pac() jsrts = execjs.available_runtimes() logging.debug(str(jsrts.keys())) # [u'Node', u'SpiderMonkey', u'Spidermonkey'] # SpiderMonkey 引擎比Node引擎用内存与CPU资源少,速度更快。 # 在archlinux上是包会自动使用js185,js包和js17包都不认。 # 好像有很严重的内存泄漏 # 内存问题好像不是出在execjs上的,而是mitmproxy本身就有问题 # https://github.com/mitmproxy/mitmproxy/issues/620 # 如果这有真有内存问题的话,可以考虑试用pacparser包。 jsrt = execjs.get('SpiderMonkey') # jsrt = execjs.get('Node') jsctx = jsrt.compile(pac_content) jsinitcnt += 1 return
def run_script(code, func_name, func_input, errorlogger) : sandboxcode = """ "use strict"; var vm = require('vm'); function safe_run(code, func_name, input) { var vm_output = []; var sandbox = { vm_input : input, vm_output: vm_output, require : function() {throw Error('require not allowed');}} vm.createContext(sandbox); vm.runInContext('"use strict";\\n'+code,sandbox,{'timeout':200}); vm.runInContext('vm_output.push('+func_name+'(vm_input))',sandbox,{'timeout':200}); return vm_output[0]; } """ js_ctx = execjs.get('Node').compile(sandboxcode) try: response = js_ctx.call('safe_run',code,func_name,func_input) # except execjs.ProgramError as e: # print str(e) # return {'error':str(e)} # except execjs.RuntimeError as e: # print str(e) # return {'error':str(e)} except execjs.Error as e: print str(e) errorlogger.log_error(str(e)) return {} except: print traceback.format_exc() errorlogger.log_error('Error: Unknown Error') return {} print response return response
def list_js_runtimes(): # AttributeError: module 'execjs' has no attribute 'available_runtimes' try: ajsr = execjs.available_runtimes() except AttributeError: # Newer execjs does not have available_runtimes() method? ajsr = [] supported_runtimes = execjs.runtimes() for sr in supported_runtimes: if supported_runtimes[sr].is_available(): ajsr.append(sr) if len(ajsr) > 0: print('Detected {0} JavaScript runtimes:'.format(len(ajsr))) for js in ajsr: jsr = execjs.get(js) pref_str = '' if js == 'Node': pref_str = ' <== I prefer this one!' print(' {0}: {1}{2}'.format(js, jsr.name, pref_str)) else: print('No JS runtimes detected! Install Node.js, spidermonkey or something!') sys.exit(0)
def solve_challenge(self, body): try: js = re.search(r"setTimeout\(function\(\){\s+(var " "s,t,o,p,b,r,e,a,k,i,n,g,f.+?\r?\n[\s\S]+?a\.value =.+?)\r?\n", body).group(1) except Exception: raise ValueError("Unable to identify Cloudflare IUAM Javascript on website. %s" % BUG_REPORT) js = re.sub(r"a\.value = (parseInt\(.+?\)).+", r"\1", js) js = re.sub(r"\s{3,}[a-z](?: = |\.).+", "", js) # Strip characters that could be used to exit the string context # These characters are not currently used in Cloudflare's arithmetic snippet js = re.sub(r"[\n\\']", "", js) if "parseInt" not in js: raise ValueError("Error parsing Cloudflare IUAM Javascript challenge. %s" % BUG_REPORT) # Use vm.runInNewContext to safely evaluate code # The sandboxed code cannot use the Node.js standard library js = "return require('vm').runInNewContext('%s', Object.create(null), {timeout: 5000});" % js try: node = execjs.get("Node") except Exception: raise EnvironmentError("Missing Node.js runtime. Node is required. Please read the cfscrape" " README's Dependencies section: https://github.com/Anorov/cloudflare-scrape#dependencies.") try: result = node.exec_(js) except Exception: logging.error("Error executing Cloudflare IUAM Javascript. %s" % BUG_REPORT) raise try: result = int(result) except Exception: raise ValueError("Cloudflare IUAM challenge returned unexpected value. %s" % BUG_REPORT) return result
def __init__(self, script, logger=None, domain=""): try: import execjs except ImportError: raise ImportError('Please install PyExecJS') self.runner = execjs.get() self.logger = getLogger('js', logger) window_emulator = self.HEADER if domain: window_emulator += "document.domain = '" + domain + "';" window_emulator += """ if (typeof(location) === "undefined") { var location = window.location = { host: document.domain }; } """ self.ctx = self.runner.compile(window_emulator + script)
def init(session): with open("./ios/bus.js") as r: js_function = r.read() session.get('http://bus.kuas.edu.tw/') js = execjs.get("Node").compile(js_function + session.get('http://bus.kuas.edu.tw/API/Scripts/a1').content) return js
from execjs import get import sys import os.path as op try: from .rel import node_modules except ImportError: from rel import node_modules rt = get('Node') context = rt.compile(''' module.paths.push('%s'); function seePath(){ return module.paths; } var ng = require('ng-annotate'); function annotate(src,cfg){ return ng(src,cfg); }''' % node_modules) def ng_annotate(src,cfg=None): return context.call('annotate',src,cfg or dict(add=True)).get('src',None) coffee = ''' var app = angular.module('my.app',[]); app.controller('TestCtrl',function($scope){ }); '''
def _get_build_base_url(self): runtime = execjs.get('Node') runtime._command = settings.COMPRESSOR_REQUIREJS_NODE_EXECUTABLE ctx = runtime.eval(open(self.build_file, 'r').read()) return os.path.join(os.path.dirname(self.build_file), *ctx.get('baseUrl', '').split(self.PATH_SPLIT))
import os import execjs import simplejson from models import Entry, Serializer APP_TAG = 'vscode' SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__)) I18N_DIR = os.path.join(SCRIPT_DIR, '../workspace/vscode/i18n') OUTPUT_JSON_PATH = os.path.join(SCRIPT_DIR, '../generated/vscode.json') nodejs = execjs.get("Node") def fild_all_files(directory): for root, dirs, files in os.walk(directory): for file in files: s = os.path.join(root, file) yield os.path.join(root, file) def main(): pass if '__main__' in __name__: main()
import time import re import requests from requests.adapters import HTTPAdapter import execjs try: from urlparse import urlparse except ImportError: from urllib.parse import urlparse DEFAULT_USER_AGENT = ("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) " "Ubuntu Chromium/34.0.1847.116 Chrome/34.0.1847.116 Safari/537.36") JS_ENGINE = execjs.get().name if not ("Node" in JS_ENGINE or "V8" in JS_ENGINE): raise EnvironmentError("Your Javascript runtime '%s' is not supported due to security concerns. " "Please use Node.js, V8, or PyV8." % JS_ENGINE) class CloudflareAdapter(HTTPAdapter): def send(self, request, **kwargs): domain = request.url.split("/")[2] resp = super(CloudflareAdapter, self).send(request, **kwargs) # Check if we already solved a challenge if request._cookies.get("cf_clearance", domain="." + domain): return resp # Check if Cloudflare anti-bot is on if ( "URL=/cdn-cgi/" in resp.headers.get("Refresh", "") and
def _default_runtime(): return execjs.get()
def __init__(self, generator_js): self.context = execjs.get("Node").compile(generator_js)
import execjs _node = execjs.get("Node") _context = execjs.compile(""" var twitter = require('twitter-text'); """) get_tweet_length = lambda text, options: _context.call("twitter.getTweetLength", text, options)
import execjs # Init environment import requests node = execjs.get() # Params method = 'GETCITYWEATHER' city = '北京' type = 'HOUR' start_time = '2018-01-25 00:00:00' end_time = '2018-01-25 23:00:00' # Compile javascript file = 'new.js' import codecs stream = codecs.open(file,'r',encoding='utf-8') content = stream.read() # print(content) ctx = node.compile(content) # Get params js = 'getEncryptedData("{0}", "{1}", "{2}", "{3}", "{4}")'.format(method, city, type, start_time, end_time) params = ctx.eval(js) print(params) api = 'https://www.aqistudy.cn/apinew/aqistudyapi.php' response = requests.post(api, data={'d': params}) js = 'decodeData("{0}")'.format(response.text) decrypted_data = ctx.eval(js) print(decrypted_data)
def setUp(self): self.runtime = execjs.get('PhantomJS')
def setUp(self): self.runtime = execjs.get('Node')
def setUp(self): self.runtime = execjs.get('Nashorn')
import json import urllib.request as req import urllib.parse as par import execjs import os runtime = execjs.get() context = runtime.compile(''' module.paths.push('%s'); ng = require ) rugby_bot = execjs.eval('../bot') def get_token(url): obj = [ { "channel":"/meta/handshake", "version":"1.0", "supportedConnectionTypes":["long-polling"], "id":"1" } ] j_obj = json.dumps(obj) request = req.Request(url) request.add_header('Content-Type', 'application/json') response = req.urlopen(request, j_obj.encode('utf-8')) resp_obj = json.loads(response.read().decode('utf-8')) token = resp_obj[0]["clientId"] return token
def get_runtime(): """returns an appropriate instance of execjs.Runtime which is used in coffeescript.compile() and coffeescript.compile_file() """ return execjs.get()