中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

百度做網(wǎng)站找誰智能建站系統(tǒng)

百度做網(wǎng)站找誰,智能建站系統(tǒng),wordpress小圖標(biāo)不顯示,做網(wǎng)站的屬于什么專業(yè)?前言 做爬蟲肯定少不了JavaScript引擎的使用,比如在Python中現(xiàn)在一般用pyexecjs2來執(zhí)行JavaScript代碼,另外還有一些其他執(zhí)行JavaScript的庫: https://github.com/eight04/node_vm2: rpc調(diào)用nodejs,需要安裝nodehttps://github.…

前言

做爬蟲肯定少不了JavaScript引擎的使用,比如在Python中現(xiàn)在一般用pyexecjs2來執(zhí)行JavaScript代碼,另外還有一些其他執(zhí)行JavaScript的庫:

  • https://github.com/eight04/node_vm2: rpc調(diào)用nodejs,需要安裝node
  • https://github.com/eight04/deno_vm: rpc調(diào)用deno,需要安裝deno
  • https://github.com/wistn/pyChakraCore: 調(diào)用ChakraCore.dll
aardio執(zhí)行js

如果本地安裝有nodejs,aardio范例里也有rpc調(diào)用node執(zhí)行JavaScript的例子。

但是rpc調(diào)用需要依賴本地的nodejs環(huán)境,給別人使用也不方便,需要讓人先安裝nodejs。而ChakraCore這個(gè)微軟開源的js引擎可以直接調(diào)用dll來實(shí)現(xiàn),不需要額外依賴。所以這篇文章我來封裝下aardio下的ChakraCore。

有了js引擎的話,又可以利用JavaScript優(yōu)秀的庫資源來豐富aardio的庫。比如加載crypt-js給aardio增加一些加密算法(AES、DES等)。

下載地址

封裝好的代碼可以到github下載

下載地址:https://github.com/kanadeblisst00/aardio-extlibs

開始封裝

倉庫地址:https://github.com/chakra-core/ChakraCore

編譯dll

倉庫給出的編譯好的dll文件還是2020年的,但是代碼最近一直在更新,所以最好是自己編譯一個(gè),防止之前的有bug還沒修復(fù)到。

根據(jù)官方給的文檔,下載源碼后使用vs2017打開Build下的Chakra.Core.sln,然后改一下編譯的架構(gòu)為x86。右鍵生成解決方案,一步就過了,沒有什么坑(最喜歡編譯這種項(xiàng)目了)。

生成的dll文件在Build\VcBuild\bin\x86_release下,只需要ChakraCore.dll這一個(gè)文件。

封裝思路

封裝這個(gè)庫用了不少時(shí)間,基本是參考上面pyChakraCore的代碼。就不說具體怎么做的(無非就是參考Python的代碼和看github和官方文檔嗎,碰到不會(huì)的在搜索一下),有興趣的可以自己看看庫代碼,下面說說怎么使用。

測(cè)試這個(gè)dll無法使用aardio的內(nèi)存加載,也就是說打包的時(shí)候只能帶上這個(gè)dll,不能直接打包進(jìn)exe。

案例

說幾個(gè)簡(jiǎn)單使用的案例,因?yàn)檫€沒有深度使用,后面想到什么在增加吧

例子1
import console; 
import ChakraCore;io.open()var core = ChakraCore();
core.start();console.dump(core.run('(()=>{return Uint8Array.from([1,2,3,4]).buffer;})()'))
console.dump(core.run('(()=>{let a = {"a":1,"b":2};return a;})()'))
console.dump(core.callFunction('pretty', {"a":1,"v":"111"}))
console.dump(core.run('console.log("aaaaa",undefined,null,false,{a:1,b:2},function(){})'))console.pause(true);
例子2

先定義函數(shù)再調(diào)用

import console; 
import ChakraCore;io.open()var core = ChakraCore();
core.start();core.run("function add(a,b){return a+b;}    
")
var a = 1;
var b = 2;
console.log("a+b=", core.callFunction("add", a,b))console.pause(true);
例子3

注冊(cè)aardio函數(shù)為JavaScript函數(shù),這里以atobbtoa這兩個(gè)函數(shù)為例,ChakraCore沒有自帶這兩個(gè)函數(shù),而瀏覽器有,所以我們用aardio來實(shí)現(xiàn)。我在庫代碼里已經(jīng)內(nèi)置了console.logsetTimeout,有興趣的可以自己看怎么實(shí)現(xiàn)。

import console; 
import ChakraCore;
import crypt.bin;
io.open()var core = ChakraCore();
core.start();var btoa = function(ptr_callee, isConstructCall, ptrj_arguments, argumentCount, callbackState){// ptr_callee不知道是什么// isConstructCall表示是不是構(gòu)造方法// ptrj_arguments是參數(shù)的數(shù)組// argumentCount是參數(shù)的個(gè)數(shù)// callbackState也不知道是什么var pointerSize = 4;var jStr = ..raw.convert(ptrj_arguments, {ptr p}, pointerSize).p;var aStr = ChakraCore.jValueToString(jStr);var result = crypt.bin.encodeBase64(aStr);var jResult = core.JsCreateString(result,#result,);return jResult;
};var atob = function(ptr_callee, isConstructCall, ptrj_arguments, argumentCount, callbackState){var pointerSize = 4;var jStr = ..raw.convert(ptrj_arguments, {ptr p}, pointerSize).p;var aStr = ChakraCore.jValueToString(jStr);var result = crypt.bin.decodeBase64(aStr);var jResult = core.JsCreateString(result,#result,);return jResult;
}core.registerMethod(btoa, "btoa");
core.registerMethod(atob, "atob");
var result = core.run('btoa("Hello, world")')
console.log("btoa: ", result)
console.log("atob: ", core.callFunction("atob", result))
console.pause(true);

而且比較有意思的是,這樣注冊(cè)的JavaScript函數(shù)打印出來的也是function () { [native code] },可惜和瀏覽器還是有區(qū)別,瀏覽器會(huì)加上函數(shù)名function btoa() { [native code] }

例子4

調(diào)用crypt-js實(shí)現(xiàn)下加密AES CBC加密算法

import console; 
import ChakraCore;io.open()var core = ChakraCore();
core.start();core.run($"~\lib\ChakraCore\.res\crypto-js.js")var js = /*
let key = CryptoJS.enc.Utf8.parse("1234567890000000");
let iv = CryptoJS.enc.Utf8.parse("1234567890000000");let s = "Hello World";
let encrypted = CryptoJS.AES.encrypt(CryptoJS.enc.Utf8.parse(s), key, {iv: iv,mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.Pkcs7
});var eData = CryptoJS.enc.Base64.stringify(encrypted.ciphertext);
console.log("加密字符串: ", eData);let decrypted = CryptoJS.AES.decrypt(eData,key, {    iv: iv,mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.Pkcs7
});
let dData= decrypted.toString(CryptoJS.enc.Utf8).toString();
console.log("解密字符串: ", dData);
*/core.run(js)
console.pause(true);
http://www.risenshineclean.com/news/1910.html

相關(guān)文章:

  • 煙臺(tái)優(yōu)化網(wǎng)站建設(shè)網(wǎng)絡(luò)營銷好不好
  • 前端做視頻直播網(wǎng)站怎么做線上推廣
  • vs中可以用新建項(xiàng)目來做網(wǎng)站嗎如何快速推廣自己的產(chǎn)品
  • 網(wǎng)站開發(fā)php廣州網(wǎng)站seo公司
  • 個(gè)人網(wǎng)站備案可以做項(xiàng)目網(wǎng)站關(guān)鍵詞排名優(yōu)化易下拉排名
  • 自定義網(wǎng)站建站公司seo提升排名
  • 關(guān)于政府網(wǎng)站建設(shè)的調(diào)研報(bào)告百度關(guān)鍵詞查詢排名
  • html網(wǎng)頁模板網(wǎng)站模板下載廈門網(wǎng)站建設(shè)平臺(tái)
  • 深圳自適應(yīng)網(wǎng)站建設(shè)價(jià)格網(wǎng)絡(luò)推廣外包一年多少錢
  • 攝影網(wǎng)站開發(fā)的背景企業(yè)網(wǎng)站建設(shè)哪家好
  • 做網(wǎng)站域名的成本廣州網(wǎng)站建設(shè)公司
  • 音樂做音基題網(wǎng)站seo外鏈推廣工具
  • 免費(fèi)網(wǎng)站空間可訪問第三方推廣平臺(tái)
  • 政府網(wǎng)站建設(shè)項(xiàng)目背景seo網(wǎng)站優(yōu)化推薦
  • 做網(wǎng)站工作室找客戶難廣州谷歌優(yōu)化
  • 裝修公司做網(wǎng)站有用嗎友情鏈接的網(wǎng)站圖片
  • 自助建站系統(tǒng)微信管理系統(tǒng)登錄入口
  • 做技術(shù)開發(fā)的網(wǎng)站如何制作一個(gè)網(wǎng)站
  • 南陽網(wǎng)站排名優(yōu)化濟(jì)南做網(wǎng)站比較好的公司
  • 杭州網(wǎng)站建設(shè)網(wǎng)百度瀏覽器網(wǎng)址鏈接
  • 網(wǎng)站推廣的措施和手段有哪些新塘網(wǎng)站seo優(yōu)化
  • 動(dòng)易官方網(wǎng)站搜索引擎優(yōu)化實(shí)訓(xùn)
  • 可以做設(shè)計(jì)的網(wǎng)站社交媒體營銷案例
  • wordpress產(chǎn)品的分類標(biāo)簽屬性區(qū)別信息流優(yōu)化師培訓(xùn)機(jī)構(gòu)
  • 網(wǎng)站設(shè)計(jì)審美角度怎么去推廣一個(gè)app
  • 甘肅省住房和城鄉(xiāng)建設(shè)廳注冊(cè)中心網(wǎng)站首頁交換鏈接適用于哪些網(wǎng)站
  • 湖南網(wǎng)站建設(shè)小公司排名廣州網(wǎng)站優(yōu)化外包
  • 石家莊企業(yè)網(wǎng)站制作上海網(wǎng)絡(luò)推廣優(yōu)化公司
  • 成都網(wǎng)站建設(shè)小程序360關(guān)鍵詞指數(shù)查詢
  • 手機(jī)上做網(wǎng)站php網(wǎng)站制作企業(yè)有哪些