精华内容
下载资源
问答
  • execjs

    2019-09-27 13:54:41
    import execjs # eval 和 complie 是要构建一个JS的环境 e = execjs.eval('a = new Array(1,2,3)') # 可以直接执行JS代码 print(e) x = execjs.compile(''' function add(x,y){ return x+y; ...
    import execjs
    
    # eval 和 complie 是要构建一个JS的环境
    e = execjs.eval('a = new Array(1,2,3)')  # 可以直接执行JS代码
    print(e)
    x = execjs.compile('''
           function add(x,y){
               return x+y;
               };
           ''')
    print(x.call('add', '1', '2'))  # execjs.compile用于执行更复杂的js代码

    转载于:https://www.cnblogs.com/ls1997/p/11342316.html

    展开全文
  • libphonenumber-execjs Google 的 libphonenumber 库的 ExecJS 包装器 安装 宝石档案: gem "libphonenumber-execjs" 入门 libphonenumber = Libphonenumber.new 目前只直接暴露了 3 个函数: libphonenumber....
  • python execjs

    2019-09-14 21:59:42
    用python 中的execjs来运行js代码,发现报错,说 ReferenceError: window is not defined 可以用node里的jsdom,这个库可以生成对应环境 https://www.npmjs.com/package/jsdom 全局安装命令 npm i jsdom -g 之后在...

    用python 中的execjs来运行js代码,发现报错,说

    ReferenceError: window is not defined

    可以用node里的jsdom,这个库可以生成对应环境

    https://www.npmjs.com/package/jsdom

    全局安装命令

    npm i jsdom -g

    之后在对应js代码里最前面加上以下代码就能正常运行

    const jsdom = require(“jsdom”);
    const { JSDOM } = jsdom;
    const dom = new JSDOM(<!DOCTYPE html><p>Hello world</p>);
    window = dom.window;
    document = window.document;
    XMLHttpRequest = window.XMLHttpRequest;

    1.在python执行文件所在的运行目录下,使用npm安装jsdom
    使用cwd参数,指定模块的所在目录,比如,我们在全局安装的jsdom,在cmd里通过npm root -g 可以查看全局模块安装路径: D:\Users\X\X\X\npm\node_modules
    我们使用时,代码可以按下面的写法写
    import execjs
    with open(r’要运行的.js’,‘r’,encoding=‘utf-8’) as f:
    js = f.read()
    ct = execjs.compile(js,cwd=r’C:\Users\w001\AppData\Roaming\npm\node_modules’)
    print(ct.call(‘Rohr_Opt.reload’,‘1’))

    展开全文
  • ExecJS FastNode 这是什么? ExecJS的Node.js集成的替代实现。 这样做的目的是加快链轮的编译速度,而无需像一样在ruby中嵌入javascript解释器。 它快多少? 许多。 $ rake bench ... user system total real ...
  • execjs RSA

    2017-07-14 16:12:05
    import execjs import urllib class RsaUtil: def get_rsa_pwd(self,data,exponent,modules): code = """ //BigInt var biRadixBase = 2; var biRadixBits = 16;
    import execjs
    import urllib
    
    class RsaUtil:
        def get_rsa_pwd(self,data,exponent,modules):
            code = """
                //BigInt
            
            var biRadixBase = 2;
            var biRadixBits = 16;
            var bitsPerDigit = biRadixBits;
            var biRadix = 1 << 16; // = 2^16 = 65536
            var biHalfRadix = biRadix >>> 1;
            var biRadixSquared = biRadix * biRadix;
            var maxDigitVal = biRadix - 1;
            var maxInteger = 9999999999999998; 
            var maxDigits;
            var ZERO_ARRAY;
            var bigZero, bigOne;
            
            function setMaxDigits(value)
            {
                maxDigits = value;
                ZERO_ARRAY = new Array(maxDigits);
                for (var iza = 0; iza < ZERO_ARRAY.length; iza++) ZERO_ARRAY[iza] = 0;
                bigZero = new BigInt();
                bigOne = new BigInt();
                bigOne.digits[0] = 1;
            }
            
            setMaxDigits(20);
            
            // The maximum number of digits in base 10 you can convert to an
            // integer without JavaScript throwing up on you.
            var dpl10 = 15;
            // lr10 = 10 ^ dpl10
            var lr10 = biFromNumber(1000000000000000);
            
            function BigInt(flag)
            {
                if (typeof flag == "boolean" && flag == true) {
                    this.digits = null;
                }
                else {
                    this.digits = ZERO_ARRAY.slice(0);
                }
                this.isNeg = false;
            }
            
            function biFromDecimal(s)
            {
                var isNeg = s.charAt(0) == '-';
                var i = isNeg ? 1 : 0;
                var result;
                // Skip leading zeros.
                while (i < s.length && s.charAt(i) == '0') ++i;
                if (i == s.length) {
                    result = new BigInt();
                }
                else {
                    var digitCount = s.length - i;
                    var fgl = digitCount % dpl10;
                    if (fgl == 0) fgl = dpl10;
                    result = biFromNumber(Number(s.substr(i, fgl)));
                    i += fgl;
                    while (i < s.length) {
                        result = biAdd(biMultiply(result, lr10),
                                       biFromNumber(Number(s.substr(i, dpl10))));
                        i += dpl10;
                    }
                    result.isNeg = isNeg;
                }
                return result;
            }
            
            function biCopy(bi)
            {
                var result = new BigInt(true);
                result.digits = bi.digits.slice(0);
                result.isNeg = bi.isNeg;
                return result;
            }
            
            function biFromNumber(i)
            {
                var result = new BigInt();
                result.isNeg = i < 0;
                i = Math.abs(i);
                var j = 0;
                while (i > 0) {
                    result.digits[j++] = i & maxDigitVal;
                    i = Math.floor(i / biRadix);
                }
                return result;
            }
            
            function reverseStr(s)
            {
                var result = "";
                for (var i = s.length - 1; i > -1; --i) {
                    result += s.charAt(i);
                }
                return result;
            }
            
            var hexatrigesimalToChar = new Array(
             '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
             'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
             'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
             'u', 'v', 'w', 'x', 'y', 'z'
            );
            
            function biToString(x, radix)
                // 2 <= radix <= 36
            {
                var b = new BigInt();
                b.digits[0] = radix;
                var qr = biDivideModulo(x, b);
                var result = hexatrigesimalToChar[qr[1].digits[0]];
                while (biCompare(qr[0], bigZero) == 1) {
                    qr = biDivideModulo(qr[0], b);
                    digit = qr[1].digits[0];
                    result += hexatrigesimalToChar[qr[1].digits[0]];
                }
                return (x.isNeg ? "-" : "") + reverseStr(result);
            }
            
            function biToDecimal(x)
            {
                var b = new BigInt();
                b.digits[0] = 10;
                var qr = biDivideModulo(x, b);
                var result = String(qr[1].digits[0]);
                while (biCompare(qr[0], bigZero) == 1) {
                    qr = biDivideModulo(qr[0], b);
                    result += String(qr[1].digits[0]);
                }
                return (x.isNeg ? "-" : "") + reverseStr(result);
            }
            
            var hexToChar = new Array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
                                      'a', 'b', 'c', 'd', 'e', 'f');
            
            function digitToHex(n)
            {
                var mask = 0xf;
                var result = "";
                for (i = 0; i < 4; ++i) {
                    result += hexToChar[n & mask];
                    n >>>= 4;
                }
                return reverseStr(result);
            }
            
            function biToHex(x)
            {
                var result = "";
                var n = biHighIndex(x);
                for (var i = biHighIndex(x); i > -1; --i) {
                    result += digitToHex(x.digits[i]);
                }
                return result;
            }
            
            function charToHex(c)
            {
                var ZERO = 48;
                var NINE = ZERO + 9;
                var littleA = 97;
                var littleZ = littleA + 25;
                var bigA = 65;
                var bigZ = 65 + 25;
                var result;
            
                if (c >= ZERO && c <= NINE) {
                    result = c - ZERO;
                } else if (c >= bigA && c <= bigZ) {
                    result = 10 + c - bigA;
                } else if (c >= littleA && c <= littleZ) {
                    result = 10 + c - littleA;
                } else {
                    result = 0;
                }
                return result;
            }
            
            function hexToDigit(s)
            {
                var result = 0;
                var sl = Math.min(s.length, 4);
                for (var i = 0; i < sl; ++i) {
                    result <<= 4;
                    result |= charToHex(s.charCodeAt(i))
                }
                return result;
            }
            
            function biFromHex(s)
            {
                var result = new BigInt();
                var sl = s.length;
                for (var i = sl, j = 0; i > 0; i -= 4, ++j) {
                    result.digits[j] = hexToDigit(s.substr(Math.max(i - 4, 0), Math.min(i, 4)));
                }
                return result;
            }
            
            function biFromString(s, radix)
            {
                var isNeg = s.charAt(0) == '-';
                var istop = isNeg ? 1 : 0;
                var result = new BigInt();
                var place = new BigInt();
                place.digits[0] = 1; // radix^0
                for (var i = s.length - 1; i >= istop; i--) {
                    var c = s.charCodeAt(i);
                    var digit = charToHex(c);
                    var biDigit = biMultiplyDigit(place, digit);
                    result = biAdd(result, biDigit);
                    place = biMultiplyDigit(place, radix);
                }
                result.isNeg = isNeg;
                return result;
            }
            
            function biDump(b)
            {
                return (b.isNeg ? "-" : "") + b.digits.join(" ");
            }
            
            function biAdd(x, y)
            {
                var result;
            
                if (x.isNeg != y.isNeg) {
                    y.isNeg = !y.isNeg;
                    result = biSubtract(x, y);
                    y.isNeg = !y.isNeg;
                }
                else {
                    result = new BigInt();
                    var c = 0;
                    var n;
                    for (var i = 0; i < x.digits.length; ++i) {
                        n = x.digits[i] + y.digits[i] + c;
                        result.digits[i] = n % biRadix;
                        c = Number(n >= biRadix);
                    }
                    result.isNeg = x.isNeg;
                }
                return result;
            }
            
            function biSubtract(x, y)
            {
                var result;
                if (x.isNeg != y.isNeg) {
                    y.isNeg = !y.isNeg;
                    result = biAdd(x, y);
                    y.isNeg = !y.isNeg;
                } else {
                    result = new BigInt();
                    var n, c;
                    c = 0;
                    for (var i = 0; i < x.digits.length; ++i) {
                        n = x.digits[i] - y.digits[i] + c;
                        result.digits[i] = n % biRadix;
                        // Stupid non-conforming modulus operation.
                        if (result.digits[i] < 0) result.digits[i] += biRadix;
                        c = 0 - Number(n < 0);
                    }
                    // Fix up the negative sign, if any.
                    if (c == -1) {
                        c = 0;
                        for (var i = 0; i < x.digits.length; ++i) {
                            n = 0 - result.digits[i] + c;
                            result.digits[i] = n % biRadix;
                            // Stupid non-conforming modulus operation.
                            if (result.digits[i] < 0) result.digits[i] += biRadix;
                            c = 0 - Number(n < 0);
                        }
                        // Result is opposite sign of arguments.
                        result.isNeg = !x.isNeg;
                    } else {
                        // Result is same sign.
                        result.isNeg = x.isNeg;
                    }
                }
                return result;
            }
            
            
            function biHighIndex(x)
            {
                var result = x.digits.length - 1;
                while (result > 0 && x.digits[result] == 0) --result;
                return result;
            }
            
            function biNumBits(x)
            {
                var n = biHighIndex(x);
                var d = x.digits[n];
                var m = (n + 1) * bitsPerDigit;
                var result;
                for (result = m; result > m - bitsPerDigit; --result) {
                    if ((d & 0x8000) != 0) break;
                    d <<= 1;
                }
                return result;
            }
            
            function biMultiply(x, y)
            {
                var result = new BigInt();
                var c;
                var n = biHighIndex(x);
                var t = biHighIndex(y);
                var u, uv, k;
            
                for (var i = 0; i <= t; ++i) {
                    c = 0;
                    k = i;
                    for (j = 0; j <= n; ++j, ++k) {
                        uv = result.digits[k] + x.digits[j] * y.digits[i] + c;
                        result.digits[k] = uv & maxDigitVal;
                        c = uv >>> biRadixBits;
                        //c = Math.floor(uv / biRadix);
                    }
                    result.digits[i + n + 1] = c;
                }
                // Someone give me a logical xor, please.
                result.isNeg = x.isNeg != y.isNeg;
                return result;
            }
            
            function biMultiplyDigit(x, y)
            {
                var n, c, uv;
            
                result = new BigInt();
                n = biHighIndex(x);
                c = 0;
                for (var j = 0; j <= n; ++j) {
                    uv = result.digits[j] + x.digits[j] * y + c;
                    result.digits[j] = uv & maxDigitVal;
                    c = uv >>> biRadixBits;
                    //c = Math.floor(uv / biRadix);
                }
                result.digits[1 + n] = c;
                return result;
            }
            
            function arrayCopy(src, srcStart, dest, destStart, n)
            {
                var m = Math.min(srcStart + n, src.length);
                for (var i = srcStart, j = destStart; i < m; ++i, ++j) {
                    dest[j] = src[i];
                }
            }
            
            var highBitMasks = new Array(0x0000, 0x8000, 0xC000, 0xE000, 0xF000, 0xF800,
                                         0xFC00, 0xFE00, 0xFF00, 0xFF80, 0xFFC0, 0xFFE0,
                                         0xFFF0, 0xFFF8, 0xFFFC, 0xFFFE, 0xFFFF);
            
            function biShiftLeft(x, n)
            {
                var digitCount = Math.floor(n / bitsPerDigit);
                var result = new BigInt();
                arrayCopy(x.digits, 0, result.digits, digitCount,
                          result.digits.length - digitCount);
                var bits = n % bitsPerDigit;
                var rightBits = bitsPerDigit - bits;
                for (var i = result.digits.length - 1, i1 = i - 1; i > 0; --i, --i1) {
                    result.digits[i] = ((result.digits[i] << bits) & maxDigitVal) |
                                       ((result.digits[i1] & highBitMasks[bits]) >>>
                                        (rightBits));
                }
                result.digits[0] = ((result.digits[i] << bits) & maxDigitVal);
                result.isNeg = x.isNeg;
                return result;
            }
            
            var lowBitMasks = new Array(0x0000, 0x0001, 0x0003, 0x0007, 0x000F, 0x001F,
                                        0x003F, 0x007F, 0x00FF, 0x01FF, 0x03FF, 0x07FF,
                                        0x0FFF, 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF);
            
            function biShiftRight(x, n)
            {
                var digitCount = Math.floor(n / bitsPerDigit);
                var result = new BigInt();
                arrayCopy(x.digits, digitCount, result.digits, 0,
                          x.digits.length - digitCount);
                var bits = n % bitsPerDigit;
                var leftBits = bitsPerDigit - bits;
                for (var i = 0, i1 = i + 1; i < result.digits.length - 1; ++i, ++i1) {
                    result.digits[i] = (result.digits[i] >>> bits) |
                                       ((result.digits[i1] & lowBitMasks[bits]) << leftBits);
                }
                result.digits[result.digits.length - 1] >>>= bits;
                result.isNeg = x.isNeg;
                return result;
            }
            
            function biMultiplyByRadixPower(x, n)
            {
                var result = new BigInt();
                arrayCopy(x.digits, 0, result.digits, n, result.digits.length - n);
                return result;
            }
            
            function biDivideByRadixPower(x, n)
            {
                var result = new BigInt();
                arrayCopy(x.digits, n, result.digits, 0, result.digits.length - n);
                return result;
            }
            
            function biModuloByRadixPower(x, n)
            {
                var result = new BigInt();
                arrayCopy(x.digits, 0, result.digits, 0, n);
                return result;
            }
            
            function biCompare(x, y)
            {
                if (x.isNeg != y.isNeg) {
                    return 1 - 2 * Number(x.isNeg);
                }
                for (var i = x.digits.length - 1; i >= 0; --i) {
                    if (x.digits[i] != y.digits[i]) {
                        if (x.isNeg) {
                            return 1 - 2 * Number(x.digits[i] > y.digits[i]);
                        } else {
                            return 1 - 2 * Number(x.digits[i] < y.digits[i]);
                        }
                    }
                }
                return 0;
            }
            
            function biDivideModulo(x, y)
            {
                var nb = biNumBits(x);
                var tb = biNumBits(y);
                var origYIsNeg = y.isNeg;
                var q, r;
                if (nb < tb) {
                    // |x| < |y|
                    if (x.isNeg) {
                        q = biCopy(bigOne);
                        q.isNeg = !y.isNeg;
                        x.isNeg = false;
                        y.isNeg = false;
                        r = biSubtract(y, x);
                        // Restore signs, 'cause they're references.
                        x.isNeg = true;
                        y.isNeg = origYIsNeg;
                    } else {
                        q = new BigInt();
                        r = biCopy(x);
                    }
                    return new Array(q, r);
                }
            
                q = new BigInt();
                r = x;
            
                // Normalize Y.
                var t = Math.ceil(tb / bitsPerDigit) - 1;
                var lambda = 0;
                while (y.digits[t] < biHalfRadix) {
                    y = biShiftLeft(y, 1);
                    ++lambda;
                    ++tb;
                    t = Math.ceil(tb / bitsPerDigit) - 1;
                }
                // Shift r over to keep the quotient constant. We'll shift the
                // remainder back at the end.
                r = biShiftLeft(r, lambda);
                nb += lambda; // Update the bit count for x.
                var n = Math.ceil(nb / bitsPerDigit) - 1;
            
                var b = biMultiplyByRadixPower(y, n - t);
                while (biCompare(r, b) != -1) {
                    ++q.digits[n - t];
                    r = biSubtract(r, b);
                }
                for (var i = n; i > t; --i) {
                var ri = (i >= r.digits.length) ? 0 : r.digits[i];
                var ri1 = (i - 1 >= r.digits.length) ? 0 : r.digits[i - 1];
                var ri2 = (i - 2 >= r.digits.length) ? 0 : r.digits[i - 2];
                var yt = (t >= y.digits.length) ? 0 : y.digits[t];
                var yt1 = (t - 1 >= y.digits.length) ? 0 : y.digits[t - 1];
                    if (ri == yt) {
                        q.digits[i - t - 1] = maxDigitVal;
                    } else {
                        q.digits[i - t - 1] = Math.floor((ri * biRadix + ri1) / yt);
                    }
            
                    var c1 = q.digits[i - t - 1] * ((yt * biRadix) + yt1);
                    var c2 = (ri * biRadixSquared) + ((ri1 * biRadix) + ri2);
                    while (c1 > c2) {
                        --q.digits[i - t - 1];
                        c1 = q.digits[i - t - 1] * ((yt * biRadix) | yt1);
                        c2 = (ri * biRadix * biRadix) + ((ri1 * biRadix) + ri2);
                    }
            
                    b = biMultiplyByRadixPower(y, i - t - 1);
                    r = biSubtract(r, biMultiplyDigit(b, q.digits[i - t - 1]));
                    if (r.isNeg) {
                        r = biAdd(r, b);
                        --q.digits[i - t - 1];
                    }
                }
                r = biShiftRight(r, lambda);
                // Fiddle with the signs and stuff to make sure that 0 <= r < y.
                q.isNeg = x.isNeg != origYIsNeg;
                if (x.isNeg) {
                    if (origYIsNeg) {
                        q = biAdd(q, bigOne);
                    } else {
                        q = biSubtract(q, bigOne);
                    }
                    y = biShiftRight(y, lambda);
                    r = biSubtract(y, r);
                }
                // Check for the unbelievably stupid degenerate case of r == -0.
                if (r.digits[0] == 0 && biHighIndex(r) == 0) r.isNeg = false;
            
                return new Array(q, r);
            }
            
            function biDivide(x, y)
            {
                return biDivideModulo(x, y)[0];
            }
            
            function biModulo(x, y)
            {
                return biDivideModulo(x, y)[1];
            }
            
            function biMultiplyMod(x, y, m)
            {
                return biModulo(biMultiply(x, y), m);
            }
            
            function biPow(x, y)
            {
                var result = bigOne;
                var a = x;
                while (true) {
                    if ((y & 1) != 0) result = biMultiply(result, a);
                    y >>= 1;
                    if (y == 0) break;
                    a = biMultiply(a, a);
                }
                return result;
            }
            
            function biPowMod(x, y, m)
            {
                var result = bigOne;
                var a = x;
                var k = y;
                while (true) {
                    if ((k.digits[0] & 1) != 0) result = biMultiplyMod(result, a, m);
                    k = biShiftRight(k, 1);
                    if (k.digits[0] == 0 && biHighIndex(k) == 0) break;
                    a = biMultiplyMod(a, a, m);
                }
                return result;
            }
            
            //Barrett
            
            function BarrettMu(m)
            {
                this.modulus = biCopy(m);
                this.k = biHighIndex(this.modulus) + 1;
                var b2k = new BigInt();
                b2k.digits[2 * this.k] = 1; // b2k = b^(2k)
                this.mu = biDivide(b2k, this.modulus);
                this.bkplus1 = new BigInt();
                this.bkplus1.digits[this.k + 1] = 1; // bkplus1 = b^(k+1)
                this.modulo = BarrettMu_modulo;
                this.multiplyMod = BarrettMu_multiplyMod;
                this.powMod = BarrettMu_powMod;
            }
            
            function BarrettMu_modulo(x)
            {
                var q1 = biDivideByRadixPower(x, this.k - 1);
                var q2 = biMultiply(q1, this.mu);
                var q3 = biDivideByRadixPower(q2, this.k + 1);
                var r1 = biModuloByRadixPower(x, this.k + 1);
                var r2term = biMultiply(q3, this.modulus);
                var r2 = biModuloByRadixPower(r2term, this.k + 1);
                var r = biSubtract(r1, r2);
                if (r.isNeg) {
                    r = biAdd(r, this.bkplus1);
                }
                var rgtem = biCompare(r, this.modulus) >= 0;
                while (rgtem) {
                    r = biSubtract(r, this.modulus);
                    rgtem = biCompare(r, this.modulus) >= 0;
                }
                return r;
            }
            
            function BarrettMu_multiplyMod(x, y)
            {
                /*
                x = this.modulo(x);
                y = this.modulo(y);
                */
                var xy = biMultiply(x, y);
                return this.modulo(xy);
            }
            
            function BarrettMu_powMod(x, y)
            {
                var result = new BigInt();
                result.digits[0] = 1;
                var a = x;
                var k = y;
                while (true) {
                    if ((k.digits[0] & 1) != 0) result = this.multiplyMod(result, a);
                    k = biShiftRight(k, 1);
                    if (k.digits[0] == 0 && biHighIndex(k) == 0) break;
                    a = this.multiplyMod(a, a);
                }
                return result;
            }
            
            //RSA
            
            function RSAKeyPair(encryptionExponent, decryptionExponent, modulus)
            {
                this.e = biFromHex(encryptionExponent);
                this.d = biFromHex(decryptionExponent);
                this.m = biFromHex(modulus);
                // We can do two bytes per digit, so
                // chunkSize = 2 * (number of digits in modulus - 1).
                // Since biHighIndex returns the high index, not the number of digits, 1 has
                // already been subtracted.
                this.chunkSize = 2 * biHighIndex(this.m);
                this.radix = 16;
                this.barrett = new BarrettMu(this.m);
            }
            
            function twoDigit(n)
            {
                return (n < 10 ? "0" : "") + String(n);
            }
            
            function encryptedString(key, s)
                // Altered by Rob Saunders (rob@robsaunders.net). New routine pads the
                // string after it has been converted to an array. This fixes an
                // incompatibility with Flash MX's ActionScript.
            {
                var a = new Array();
                var sl = s.length;
                var i = 0;
                while (i < sl) {
                    a[i] = s.charCodeAt(i);
                    i++;
                }
            
                while (a.length % key.chunkSize != 0) {
                    a[i++] = 0;
                }
            
                var al = a.length;
                var result = "";
                var j, k, block;
                for (i = 0; i < al; i += key.chunkSize) {
                    block = new BigInt();
                    j = 0;
                    for (k = i; k < i + key.chunkSize; ++j) {
                        block.digits[j] = a[k++];
                        block.digits[j] += a[k++] << 8;
                    }
                    var crypt = key.barrett.powMod(block, key.e);
                    var text = key.radix == 16 ? biToHex(crypt) : biToString(crypt, key.radix);
                    result += text + " ";
                }
                return result.substring(0, result.length - 1); // Remove last space.
            }
            
            function decryptedString(key, s)
            {
                var blocks = s.split(" ");
                var result = "";
                var i, j, block;
                for (i = 0; i < blocks.length; ++i) {
                    var bi;
                    if (key.radix == 16) {
                        bi = biFromHex(blocks[i]);
                    }
                    else {
                        bi = biFromString(blocks[i], key.radix);
                    }
                    block = key.barrett.powMod(bi, key.d);
                    for (j = 0; j <= biHighIndex(block); ++j) {
                        result += String.fromCharCode(block.digits[j] & 255,
                                                      block.digits[j] >> 8);
                    }
                }
                // Remove trailing null, if any.
                if (result.charCodeAt(result.length - 1) == 0) {
                    result = result.substring(0, result.length - 1);
                }
                return result;
            }
            
            function getKeyPair(data,exponent,modules){
                    var length = data.length /50;
                    encodeVal = data.substring(0,50);
                    setMaxDigits(130);
                    key = new RSAKeyPair(exponent, "" ,modules);
                    encodeVal = encryptedString(key, encodeURIComponent(encodeVal));
                    for(var i = 1; i < length ;i++){
                        encodeVal += ":"+encryptedString(key, encodeURIComponent(data.substring(50*i,50*(i+1))));
                    }
                    return encodeVal;
                }
            """
            ctx = execjs.compile(code)
            key = ctx.call("getKeyPair", data, exponent,modules)
            print 'rsa_passwd:',key
            return key
    if __name__ == '__main__':
        exponent = "010001"
        modules = "008605d497484b0ec11b271150f1a2733fc04212f8af6a2cad31c40e45efc98742a65ed7ece57a671ed769a8e69f1f6466f1a3e986b4f9eeeac0ce26ed0c3d899a19c2b01836e72280d42bf1c68360e491073593315397ce95e1d02a7d0a368b4a3666d08aef27cd8a0441c03ce2e58c9a7b7c4df139d6b5efc305cfff707cc7c3"
        tVal = '{"name":"password","value":""};{"name":"cardpassword","value":"6,5,7,4,2,1"}'
        rs = RsaUtil()
        rs.get_rsa_pwd(tVal,exponent,modules)

    展开全文
  • execjs的学习

    2020-07-07 14:08:51
    execjs的学习 1.基本使用 pip install pyExecJs #安装模块 apt-get install nodejs # execjs模块基于node运行的,(此方式是在Linux中使用 windows请安装node包) import execjs js=""" // 函数 function getnow(){...

    execjs的学习

    1.基本使用
    pip install pyExecJs #安装模块
    apt-get install nodejs # execjs模块基于node运行的,(此方式是在Linux中使用 windows请安装node包)
    
    
    import execjs
    js="""
    // 函数
    function getnow(){
        var timestamp=new Date().getTime();
        return timestamp;
    }
    // 变量
    var name="12353454";
    """
    
    # 通过compile命令转成一个js对象
    execjs.compile(js) #第二个参数cwd可以传入环境
    # 调用function方法
    res = docjs.call('getnow')
    print(res)
    # 调用变量方法
    res = docjs.eval('name')
    print(res)
    

    2.记一次错误调用解决

    import execjs
    
    def generate_visitor_id():
        js = '''
             const jsdom = require("jsdom");
             const { JSDOM } = jsdom;
             const dom = new JSDOM(`<!DOCTYPE html><p>Hello world</p>`);
             window = dom.window;
             document = window.document;
             function r()
             {
                 function t()
                 {
                     return n?15&n[e++]:16*Math.random()|0
                 }
                 var n=null,e=0,r=window.crypto||window.msCrypto;
                 r&&r.getRandomValues&&(n=r.getRandomValues(new Uint8Array(31)));
                 for(var o,i="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx",a="",s=0;s<i.length;s++)
                     o=i[s],"x"===o?a+=t().toString(16):"y"===o?(o=3&t()|8,a+=o.toString(16)):a+=o;
                 return a
             }
         '''
        
        p = execjs.compile(js)
        return p.call('r')
    
    if __name__ == '__main__':
        vid = generate_visitor_id()
        print(vid)
        
    
    2.记一次分析js
    事故1:

    python运行execjs中出现编码问题

    报错如下

    “”"
    UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0x80 in position 41: illegal multibyte sequence
    “”"
    解决方法:

    原因是有一个程序在使用TextIOWrapper 类创建对象时默认使用了cp936的编码,也就是gbk编码,读取不了utf-8的字符,
    所以我们可以修改下 subprocess.py 文件的默认编码方式为utf-8即可在代码行656有个初始化,直接修改默认即可,如下

    在这里插入图片描述

    事故2:

    报错如下:

    execjs._exceptions.ProgramError: Error: Cannot find module ‘jsdom’

    因为在node里也是只能运行js语法,window 和 document等对象是没有的但是node有个库jsdom可以生成对应环境

    https://www.npmjs.com/package/jsdom

    解决方案如下:

    全局安装命令
    npm i jsdom -g
    
    然后js中写入
    const jsdom = require("jsdom");
    const { JSDOM } = jsdom;
    const dom = new JSDOM(`<!DOCTYPE html><p>Hello world</p>`);
    window = dom.window;
    document = window.document;
    放入运行函数
    
    
    在全局安装jsdom后,在node里按上面的写法是没有问题的,但是我们要在python中使用的话,不能在全局安装
    如果在全局安装,使用时会报如下错误,说找不到jsdom
    execjs._exceptions.ProgramError: Error: Cannot find module 'jsdom'
    解决办法有两种
    1.就是在python执行文件所在的运行目录下,使用npm安装jsdom
    2. 使用cwd参数,指定模块的所在目录,比如,我们在全局安装的jsdom,在cmd里通过npm root -g 可以查看全局模块安装路径: C:\Users\Lenovo\AppData\Local\node-v12.16.1-win-x64\node-global\node_modules
    
    
    完整代码如下
    import execjs
    
    def generate_visitor_id():
        js = '''
             const jsdom = require("jsdom");
             const { JSDOM } = jsdom;
             const dom = new JSDOM(`<!DOCTYPE html><p>Hello world</p>`);
             window = dom.window;
             document = window.document;
             function r()
             {
                 function t()
                 {
                     return n?15&n[e++]:16*Math.random()|0
                 }
                 var n=null,e=0,r=window.crypto||window.msCrypto;
                 r&&r.getRandomValues&&(n=r.getRandomValues(new Uint8Array(31)));
                 for(var o,i="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx",a="",s=0;s<i.length;s++)
                     o=i[s],"x"===o?a+=t().toString(16):"y"===o?(o=3&t()|8,a+=o.toString(16)):a+=o;
                 return a
             }
         '''
        p = execjs.compile(js,cwd=r"C:\Users\Lenovo\AppData\Local\node-v12.16.1-win-x64\node-global\node_modules")
        return p.call('r')
    
    if __name__ == '__main__':
        vid = generate_visitor_id()
        print(vid)
    

    参考链接:

    https://www.cnblogs.com/huchong/p/11044238.html

    https://blog.csdn.net/qq_37619987/article/details/104184340

    展开全文
  • 前言什么是execjs库这是一个能让python程序执行javascript的库为什么要用execjs库针对现在大部分的网站都是使用js加密,js加载的,并不能直接抓取出来,这时候就不得不适用一些三方类库来执行js语句安装execjs库这里...
  • 主要介绍了python爬虫 execjs安装配置及使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • import execjs ModuleNotFoundError: No module named 'execjs' 解决办法 >pip install PyExecJS Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple Collecting PyExecJS Downloading ...
  • execjs使用体验

    2020-07-24 18:57:35
    把前端代码抠出来,进行本地运行...import execjs class BaiduTranslateSpider(object): def __init__(self): self.token_url = 'https://fanyi.baidu.com/?aldtype=16047' self.post_url = 'https://fanyi.baidu.
  • execjs 使用 有了selenium+Chrome Headless 加载页面为什么还要用execjs来运行js? selenium+Chrome Headless 必然是爬虫的一大利器,可是缺点依然存在, 性能问题不可忽视。 但这构不成舍弃它而不用的理由。我...
  • execjs:从Elixir运行JavaScript代码
  • python3调用js的库之execjs

    万次阅读 2018-07-29 15:05:41
    针对现在大部分的网站都是使用js加密,js加载的,并不能直接抓取...这里主要讲一下execjs,一个比较好用且容易上手的类库(支持py2,与py3),支持 JS runtime。 官网:https://pypi.org/project/PyExecJS/ (一...
  • python通过execjs运行js代码 pip install PyExecJS 使用方法 import execjs ctx = execjs.compile(""" function sum(a,b){ return a+b; } """) ret = ctx.call('sum', 3,6) print(ret)
  • 问题:execjs._exceptions.ProgramError: ReferenceError: navigator is not defined 解决办法: 在js文档头部添加如下代码 global.navigator={ userAgent: 'node.js', }; 报错:execjs._exceptions.ProgramError: ...
  • 问题: execjs._exceptions.ProgramError: ReferenceError: navigator is not defined 解决办法: 在js文档头部添加如下代码 global.navigator={ userAgent: 'node.js', };
  • execjs, 从 ruby 运行JavaScript代码 ExecJSExecJS允许你从 ruby 运行JavaScript代码。 它自动选择可以用于评估JavaScript程序的最佳运行时,然后将结果作为 ruby 对象返回给你。ExecJS支持以下运行时:therubyracer
  • python爬虫-execjs使用

    2019-04-27 09:32:00
    python爬虫-execjs使用 ecexjs的作用 通过python代码去执行JavaScript代码的库 execjs的安装 pip install PyExecJS execjs使用之前,得先安装node环境,去网上先去下载node.js 使用代码 import execjs with open(...
  • [284]python使用execjs执行js

    万次阅读 2018-07-09 08:50:31
    import execjs execjs.eval(&quot;new Date&quot;) 返回值为: 2018-04-04T12:53:17.759Z execjs.eval(&quot;Date.now()&quot;) 返回值为:1522847001080 # 需要注意的是返回值是13位, 区别于...
  • pip install execjs python 中调用 js 代码 有一个 js 文件 test.js import execjs with open(r'flag生成.js') as f: flag = f.read() flag = execjs.compile(flag) flag = flag.call('Flag') return flag ...
  • python使用execjs执行解密js代码时候,发现报错,然后经过俩个多小时最终找到问题所在,解决问题。 一、报错内容 报错内容: UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0xa1 in position 26: illegal ...
  • 利用python+execjs 实现jd平台的批量登录,绕过登录时验证,实现批量登录获取用户cookie
  • python 中execjs模块

    千次阅读 2019-03-23 10:59:07
    import execjs signcode = 'function a(r,o){for(var t=0;t<o.length-2;t+=3)' \ '{var a=o.charAt(t+2);a=a>="a"?a.charCodeAt(0)-87:Number(a),' \ 'a="+"===o.charAt(t+1)?...
  • 安装 # python3安装 pip install PyExecJS # python2安装 ...execjs执行语法 import execjs jsFunc = ''' function add(x,y){ return x+y; } ''' jscontext = execjs.compile(jsFunc) a = jsc...
  • 今天用execjs调用JS时,发现报错execjs._exceptions.ProgramError: ReferenceError: document is not defined 如图: 错误类型:文档对象未定义,解决方法,定义对象即可,习惯性定义变量吗?var document ;? ...
  • Python execjs(执行js脚本)

    千次阅读 2019-08-07 01:24:38
    python3调用js的库之execjs
  • python爬虫之js逆向安装execjs

    千次阅读 2020-07-28 11:28:36
    在命令行中输入 pip install PyExecJS 即可使用 引用 import execjs

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,713
精华内容 1,085
关键字:

execjs