日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Python基于execjs運(yùn)行js過(guò)程解析

瀏覽:162日期:2022-07-04 10:12:55

execjs 使用

有了selenium+Chrome Headless 加載頁(yè)面為什么還要用execjs來(lái)運(yùn)行js?

selenium+Chrome Headless 必然是爬蟲(chóng)的一大利器,可是缺點(diǎn)依然存在, 性能問(wèn)題不可忽視。

但這構(gòu)不成舍棄它而不用的理由。我認(rèn)為舍棄包括Chrome Headless、PhantomJS在內(nèi)的無(wú)頭瀏覽器的原因主要有以下幾點(diǎn):

1. 頁(yè)面結(jié)構(gòu)改變、彈窗(一些網(wǎng)站的頁(yè)面結(jié)構(gòu)經(jīng)常無(wú)規(guī)則改變), 影響代碼的健壯性。

2. 無(wú)頭瀏覽器的應(yīng)用場(chǎng)景主要是一些模擬登陸賬號(hào)密碼加密的場(chǎng)景, 爬蟲(chóng)全程使用無(wú)頭瀏覽器, 影響性能和效率, 浪費(fèi)資源。

3. 通過(guò)js加密的網(wǎng)站, 可以看得到加密過(guò)程,可以拿得到加密源碼。

1. 安裝

pip install PyExecJS # 需要注意, 包的名稱(chēng):PyExecJS

2. 簡(jiǎn)單使用

import execjsexecjs.eval('new Date')

返回值為: 2018-04-04T12:53:17.759Z

execjs.eval('Date.now()')

返回值為:1522847001080 # 需要注意的是返回值是13位, 區(qū)別于python的time.time()

需要注意的是: 個(gè)別的JS語(yǔ)句, 用execjs返回的結(jié)果跟瀏覽器環(huán)境返回的結(jié)果是有區(qū)別的, 以下是瀏覽器環(huán)境返回的結(jié)果瀏覽器環(huán)境運(yùn)行的結(jié)果

Python基于execjs運(yùn)行js過(guò)程解析

3. 調(diào)用函數(shù)

# 實(shí)際生產(chǎn)中處理的js有幾百幾千行, 不方便貼上來(lái)。來(lái)看一下源碼中給的例子: ctx = execjs.compile(''' function add(x, y) {return x + y; }''') ctx.call('add', 1, 2) # 第一個(gè)參數(shù) “add” 為JS函數(shù)名的字符串, 后邊依次為實(shí)參 返回值:3

execjs的用法非常簡(jiǎn)單, 下邊來(lái)看一下執(zhí)行JS的環(huán)境, 以及性能:

4. 執(zhí)行JS的環(huán)境

# 1. 在windows上不需要其他的依賴(lài)便可運(yùn)行execjs, 也可以調(diào)用其他的JS環(huán)境 # windows 默認(rèn)的執(zhí)行JS的環(huán)境 execjs.get().name 返回值: JScript # 作者本人的windows上裝有Node.js , 所以返回值不同 execjs.get().name 返回值: Node.js (V8)#2. 在ubuntu下需要安裝執(zhí)行JS環(huán)境依賴(lài), 作者的環(huán)境為PhantomJS execjs.get().name 返回值: PhantomJS#3. 源碼中給出, 可執(zhí)行execjs的環(huán)境: PyV8 = 'PyV8' Node = 'Node' JavaScriptCore = 'JavaScriptCore' SpiderMonkey = 'SpiderMonkey' JScript = 'JScript' PhantomJS = 'PhantomJS' SlimerJS = 'SlimerJS' Nashorn = 'Nashorn'

注1:作者之前在ubuntu環(huán)境下執(zhí)行execjs碰見(jiàn)過(guò)因?yàn)闆](méi)有環(huán)境而報(bào)錯(cuò),因時(shí)間久遠(yuǎn),無(wú)法肯定。 現(xiàn)在環(huán)境齊全, 報(bào)錯(cuò)無(wú)法復(fù)原,如有讀者出現(xiàn)錯(cuò)誤, 請(qǐng)留言, 多謝!

更新注1:經(jīng)過(guò)朋友老冀的指正(在此感謝),在ubuntu環(huán)境下, 沒(méi)有JS環(huán)境會(huì)報(bào)錯(cuò):Could not find an available JavaScript runtime. 由此可見(jiàn), execjs在ubuntu需要安裝JS環(huán)境 。具體的JS環(huán)境需根據(jù)具體的需求安裝, 切不可超過(guò)以上8種。

5.環(huán)境切換

# 1. 通過(guò)os.environ os.environ['EXECJS_RUNTIME'] = 'Node' execjs.get().name execjs.eval('1 + 2') # 2. 通過(guò)execjs.get 切換 jscript = execjs.get(execjs.runtime_names.JScript) # runtime_names 便是execjs源碼中給出的執(zhí)行環(huán)境的。 execjs.runtime_names.xxx xxx必須在上一節(jié) #3中取 jscript.eval('1 + 2')

注: 在切換環(huán)境時(shí), 當(dāng)環(huán)境不存在不會(huì)報(bào)錯(cuò), 會(huì)使用默認(rèn)的環(huán)境。 另外需要注意的是, 兩種方式的區(qū)別

6. 簡(jiǎn)易性能分析

# 作者只簡(jiǎn)單試了三種, 在windows下import execjsimport osimport time# 先用JScriptos.environ['EXECJS_RUNTIME'] = 'JScript'print execjs.get().nametime1 = time.time()for i in range(100): execjs.eval('new Date')print time.time() - time1# 切換環(huán)境 使用Nodejsos.environ['EXECJS_RUNTIME'] = 'Node'print execjs.get().nametime2 = time.time()for l in range(100): execjs.eval('new Date')print time.time() - time2# 打印的結(jié)果為:JScript4.70900011063Node.js (V8)27.501999855# 在ubuntu下試的是PhantoJS , 結(jié)果竟然高達(dá) 30+ S

此注釋來(lái)自execjs作者:PyExecJS的缺點(diǎn)之一就是性能。PyExecJS通過(guò)文本傳遞JavaScript運(yùn)行時(shí),并且速度很慢。另一個(gè)缺點(diǎn)是它不完全支持運(yùn)行時(shí)特定的功能。對(duì)于某些用例,PyV8可能是更好的選擇。

總注:使用execjs的難點(diǎn)并不是在execjs這個(gè)庫(kù), 而是解析JS的過(guò)程, 因?yàn)闆](méi)有瀏覽器的環(huán)境, 沒(méi)有加密源碼的依賴(lài)。從成千上萬(wàn)行的JS中擇出想要的內(nèi)容,可能是一段孤零零的JS函數(shù),也可能是從幾個(gè)JS文件去找出各自找出一段JS代碼, 并可以通過(guò)execjs順利執(zhí)行, 這并非易事。 需要慢慢積累經(jīng)驗(yàn)。 一旦掌握, 便可以提高爬蟲(chóng)的效率, 以及代碼的健壯性, 節(jié)省資源!

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Python 編程
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产欧洲在线| 国产精品白丝一区二区三区| 91亚洲国产成人久久精品| 麻豆91小视频| 欧美成人一二区| 免费日韩一区二区三区| 美女精品久久| 成人国产精品一区二区免费麻豆| 狠狠久久伊人| 伊人久久av| 久久永久免费| 久久精品一本| 色综合狠狠操| 亚洲高清成人| 视频一区二区三区在线| 蜜臀a∨国产成人精品| 亚洲久久在线| 日本va欧美va瓶| 国产精品宾馆| 国产成人a视频高清在线观看| 日韩综合一区| 999国产精品| 亚洲欧美日韩在线观看a三区 | 日本亚州欧洲精品不卡| 亚洲精品欧美| 国产精品视频一区二区三区| 成人污污视频| 久久亚洲国产| 一本综合精品| 国产精品欧美日韩一区| 国产一区二区三区探花| 成人免费电影网址| 亚洲欧美日韩国产一区| 国产调教精品| 中文在线中文资源| 欧美精品激情| 97成人在线| 中文在线资源| 国产免费成人| 啪啪亚洲精品| 精品网站999| 99riav1国产精品视频| 欧美天堂在线| 老牛影视精品| 免费精品视频最新在线| 国产乱码精品一区二区三区亚洲人| 福利精品在线| 亚洲天堂免费| 三上亚洲一区二区| 午夜在线精品偷拍| 欧美激情视频一区二区三区免费 | 在线精品视频一区| 欧美国产精品| 9国产精品视频| 国产毛片一区二区三区| 91精品国产调教在线观看 | 国产福利一区二区精品秒拍| 亚洲福利一区| 国产精品一区免费在线| 蜜桃tv一区二区三区| 日韩在线a电影| 国产成人调教视频在线观看| 久久福利毛片| 国产成人精品一区二区免费看京| 先锋亚洲精品| 国产aⅴ精品一区二区三区久久| 老鸭窝毛片一区二区三区| 国产一区精品福利| 亚洲狼人精品一区二区三区| 日韩精品永久网址| 国产探花在线精品一区二区| 伊人影院久久| 精品入口麻豆88视频| 蜜桃视频第一区免费观看| 中文字幕在线视频网站| 欧美日本三区| 亚洲v在线看| 国产精品麻豆成人av电影艾秋 | 麻豆国产一区| 视频一区欧美精品| 日韩精品欧美激情一区二区| 国产精品xvideos88| 一区二区高清| 亚洲欧洲一区| 亚洲不卡系列| 激情综合婷婷| 国产欧美大片| 久久亚洲美女| 日韩久久精品网| 国产精品毛片aⅴ一区二区三区| 亚洲一区二区三区四区电影| 日韩三区在线| 福利欧美精品在线| 久久a爱视频| 欧美一区自拍| 亚州精品视频| 免费日本视频一区| 亚洲色诱最新| 五月综合激情| 99久久九九| 日韩欧美自拍| 成人午夜亚洲| 国产精品一区二区99| 综合亚洲色图| 麻豆精品91| 宅男噜噜噜66国产日韩在线观看| 久久蜜桃av| 精品久久99| 久久久久九九精品影院| 国产精品亚洲综合在线观看| 日本精品另类| 日韩和欧美一区二区三区| 香蕉成人久久| 亚洲欧洲一区| 久久国产精品99国产| 国产午夜精品一区二区三区欧美| 伊人久久亚洲影院| 亚洲国产不卡| 欧美搞黄网站| 91精品成人| 激情视频一区二区三区| 久久免费国产| 日韩精品欧美| 伊人久久大香线蕉av不卡| 91精品一区二区三区综合| 久久婷婷激情| 久久一区二区三区喷水| 日韩精品欧美| 欧美+亚洲+精品+三区| 国产一区视频在线观看免费| 精品一区三区| 宅男噜噜噜66国产日韩在线观看| 亚洲一区日韩| 国产麻豆综合| 亚洲免费成人av在线| 日本不卡高清| 国产精品亚洲欧美| 精品精品99| 青青青免费在线视频| 久久婷婷一区| 亚洲欧美高清| 日本91福利区| 嫩呦国产一区二区三区av| 国产一区一一区高清不卡| 三上悠亚国产精品一区二区三区| 91精品蜜臀一区二区三区在线| 一区视频在线| 亚洲久久一区| 91福利精品在线观看| 精品国产欧美日韩| 亚洲国产专区| 亚洲精品一二| 精品一区不卡| 激情久久中文字幕| 亚洲精品欧美| 欧美精品不卡| 蜜桃精品在线| 亚洲在线免费| 日本成人中文字幕| 欧美91在线| 欧美亚洲在线日韩| 亚洲精品系列| 久久精品一区| 蜜桃av在线播放| 久久国产高清| 久久99久久久精品欧美| 久久精品国产99久久| 亚洲精品日本| caoporn视频在线| 99精品99| 国产精品一区二区三区av麻 | 国产精品1区| 日本久久成人网| 日本一区免费网站| 亚洲精品**中文毛片| 99热精品在线| 欧美黑人巨大videos精品| 欧美影院三区| 国产精品最新| 免费欧美一区| 国产福利亚洲| 伊人成人网在线看| 麻豆精品久久久| 久久福利影视| 吉吉日韩欧美| 视频一区二区三区入口| 美女久久久久久| 日韩视频久久| 久草精品视频| 蜜桃久久久久久久| 成人亚洲一区| 久久亚洲国产精品一区二区| 麻豆91小视频| 中文无码日韩欧| 蜜桃视频在线网站| 日韩国产精品久久久久久亚洲| 欧美天堂视频| 国产亚洲高清在线观看| 伊人精品视频| 成人美女视频|