JS逆向进阶案例

2023-11-16

前情回顾:
有道翻译参数破解
百度翻译参数破解

之前,我们介绍了两种基础的JS逆向案例。今天,就继续来分享一个稍微复杂的JS逆向案例吧~
在这里插入图片描述

爬取网址:某网站,本次爬取仅供学习,无任何商业用途

注意:该网站首次访问会有滑动验证码,建议人工验证后,再执行本次的爬虫代码

一、寻找加密源码

进入网站后,利用Chrome浏览器进行抓包,结果如下

在这里插入图片描述
从上图可知,我们需要的数据encypt_data被加密成一长串字符。按照JS逆向的一般套路,首先,我们来搜索一下encypt_data参数,基本步骤如下
在这里插入图片描述
通过比对搜索出的6个encypt_data参数,最终定位到10790行encypt_data,在此数打下断点,刷新页面,结果如下
在这里插入图片描述
依步调试代码,最终定位在11087行

在这里插入图片描述
不难看出,参数t就是之前我们看到的加密后字符串encypt_data!分析o函数可知:它将encypt_data参数传给s函数,然后利用json解析其返回值即可实现解密!(JSON.parse是javascript中解析json字符串的方法,后续就无需复制此处,因为我们可以利用Python复写)

由于上述s函数与a.a.decode函数均未定义,因此我们对其进行补充,将鼠标放置s上即可进行跳转。最终复制的JS代码如下,并将其另存为tech.js(这里我将a.a.decode函数重命名为mydecode函数

function o(t) {
	//注意此处没有JSON.parse,并且将a.a.decode改为mydecode
    return  s("5e5062e82f15fe4ca9d24bc5", mydecode(t), 0, 0, "012345677890123", 1)  
}

function s(t, e, i, n, a, s) {
    var o, r, c, l, u, d, h, p, f, v, m, g, b, y, C = new Array(16843776,0,65536,16843780,16842756,66564,4,65536,1024,16843776,16843780,1024,16778244,16842756,16777216,4,1028,16778240,16778240,66560,66560,16842752,16842752,16778244,65540,16777220,16777220,65540,0,1028,66564,16777216,65536,16843780,4,16842752,16843776,16777216,16777216,1024,16842756,65536,66560,16777220,1024,4,16778244,66564,16843780,65540,16842752,16778244,16777220,1028,66564,16843776,1028,16778240,16778240,0,65540,66560,0,16842756), _ = new Array(-2146402272,-2147450880,32768,1081376,1048576,32,-2146435040,-2147450848,-2147483616,-2146402272,-2146402304,-2147483648,-2147450880,1048576,32,-2146435040,1081344,1048608,-2147450848,0,-2147483648,32768,1081376,-2146435072,1048608,-2147483616,0,1081344,32800,-2146402304,-2146435072,32800,0,1081376,-2146435040,1048576,-2147450848,-2146435072,-2146402304,32768,-2146435072,-2147450880,32,-2146402272,1081376,32,32768,-2147483648,32800,-2146402304,1048576,-2147483616,1048608,-2147450848,-2147483616,1048608,1081344,0,-2147450880,32800,-2147483648,-2146435040,-2146402272,1081344), w = new Array(520,134349312,0,134348808,134218240,0,131592,134218240,131080,134217736,134217736,131072,134349320,131080,134348800,520,134217728,8,134349312,512,131584,134348800,134348808,131592,134218248,131584,131072,134218248,8,134349320,512,134217728,134349312,134217728,131080,520,131072,134349312,134218240,0,512,131080,134349320,134218240,134217736,512,0,134348808,134218248,131072,134217728,134349320,8,131592,131584,134217736,134348800,134218248,520,134348800,131592,8,134348808,131584), x = new Array(8396801,8321,8321,128,8396928,8388737,8388609,8193,0,8396800,8396800,8396929,129,0,8388736,8388609,1,8192,8388608,8396801,128,8388608,8193,8320,8388737,1,8320,8388736,8192,8396928,8396929,129,8388736,8388609,8396800,8396929,129,0,0,8396800,8320,8388736,8388737,1,8396801,8321,8321,128,8396929,129,1,8192,8388609,8193,8396928,8388737,8193,8320,8388608,8396801,128,8388608,8192,8396928), k = new Array(256,34078976,34078720,1107296512,524288,256,1073741824,34078720,1074266368,524288,33554688,1074266368,1107296512,1107820544,524544,1073741824,33554432,1074266112,1074266112,0,1073742080,1107820800,1107820800,33554688,1107820544,1073742080,0,1107296256,34078976,33554432,1107296256,524544,524288,1107296512,256,33554432,1073741824,34078720,1107296512,1074266368,33554688,1073741824,1107820544,34078976,1074266368,256,33554432,1107820544,1107820800,524544,1107296256,1107820800,34078720,0,1074266112,1107296256,524544,33554688,1073742080,524288,0,1074266112,34078976,1073742080), A = new Array(536870928,541065216,16384,541081616,541065216,16,541081616,4194304,536887296,4210704,4194304,536870928,4194320,536887296,536870912,16400,0,4194320,536887312,16384,4210688,536887312,16,541065232,541065232,0,4210704,541081600,16400,4210688,541081600,536870912,536887296,16,541065232,4210688,541081616,4194304,16400,536870928,4194304,536887296,536870912,16400,536870928,541081616,4210688,541065216,4210704,541081600,0,541065232,16,16384,541065216,4210704,16384,4194320,536887312,0,541081600,536870912,4194320,536887312), T = new Array(2097152,69206018,67110914,0,2048,67110914,2099202,69208064,69208066,2097152,0,67108866,2,67108864,69206018,2050,67110912,2099202,2097154,67110912,67108866,69206016,69208064,2097154,69206016,2048,2050,69208066,2099200,2,67108864,2099200,67108864,2099200,2097152,67110914,67110914,69206018,69206018,2,2097154,67108864,67110912,2097152,69208064,2050,2099202,69208064,2050,67108866,69208066,69206016,2099200,0,2,69208066,0,2099202,69206016,2048,67108866,67110912,2048,2097154), L = new Array(268439616,4096,262144,268701760,268435456,268439616,64,268435456,262208,268697600,268701760,266240,268701696,266304,4096,64,268697600,268435520,268439552,4160,266240,262208,268697664,268701696,4160,0,0,268697664,268435520,268439552,266304,262144,266304,262144,268701696,4096,64,268697664,4096,266304,268439552,64,268435520,268697600,268697664,268435456,262144,268439616,0,268701760,262208,268435520,268697600,268439552,268439616,0,268701760,266240,266240,4160,4160,262208,268435456,268701696), S = function(t) {
        for (var e, i, n, a = new Array(0,4,536870912,536870916,65536,65540,536936448,536936452,512,516,536871424,536871428,66048,66052,536936960,536936964), s = new Array(0,1,1048576,1048577,67108864,67108865,68157440,68157441,256,257,1048832,1048833,67109120,67109121,68157696,68157697), o = new Array(0,8,2048,2056,16777216,16777224,16779264,16779272,0,8,2048,2056,16777216,16777224,16779264,16779272), r = new Array(0,2097152,134217728,136314880,8192,2105344,134225920,136323072,131072,2228224,134348800,136445952,139264,2236416,134356992,136454144), c = new Array(0,262144,16,262160,0,262144,16,262160,4096,266240,4112,266256,4096,266240,4112,266256), l = new Array(0,1024,32,1056,0,1024,32,1056,33554432,33555456,33554464,33555488,33554432,33555456,33554464,33555488), u = new Array(0,268435456,524288,268959744,2,268435458,524290,268959746,0,268435456,524288,268959744,2,268435458,524290,268959746), d = new Array(0,65536,2048,67584,536870912,536936448,536872960,536938496,131072,196608,133120,198656,537001984,537067520,537004032,537069568), h = new Array(0,262144,0,262144,2,262146,2,262146,33554432,33816576,33554432,33816576,33554434,33816578,33554434,33816578), p = new Array(0,268435456,8,268435464,0,268435456,8,268435464,1024,268436480,1032,268436488,1024,268436480,1032,268436488), f = new Array(0,32,0,32,1048576,1048608,1048576,1048608,8192,8224,8192,8224,1056768,1056800,1056768,1056800), v = new Array(0,16777216,512,16777728,2097152,18874368,2097664,18874880,67108864,83886080,67109376,83886592,69206016,85983232,69206528,85983744), m = new Array(0,4096,134217728,134221824,524288,528384,134742016,134746112,16,4112,134217744,134221840,524304,528400,134742032,134746128), g = new Array(0,4,256,260,0,4,256,260,1,5,257,261,1,5,257,261), b = t.length > 8 ? 3 : 1, y = new Array(32 * b), C = new Array(0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0), _ = 0, w = 0, x = 0; x < b; x++) {
            var k = t.charCodeAt(_++) << 24 | t.charCodeAt(_++) << 16 | t.charCodeAt(_++) << 8 | t.charCodeAt(_++)
              , A = t.charCodeAt(_++) << 24 | t.charCodeAt(_++) << 16 | t.charCodeAt(_++) << 8 | t.charCodeAt(_++);
            k ^= (n = 252645135 & (k >>> 4 ^ A)) << 4,
            k ^= n = 65535 & ((A ^= n) >>> -16 ^ k),
            k ^= (n = 858993459 & (k >>> 2 ^ (A ^= n << -16))) << 2,
            k ^= n = 65535 & ((A ^= n) >>> -16 ^ k),
            k ^= (n = 1431655765 & (k >>> 1 ^ (A ^= n << -16))) << 1,
            k ^= n = 16711935 & ((A ^= n) >>> 8 ^ k),
            n = (k ^= (n = 1431655765 & (k >>> 1 ^ (A ^= n << 8))) << 1) << 8 | (A ^= n) >>> 20 & 240,
            k = A << 24 | A << 8 & 16711680 | A >>> 8 & 65280 | A >>> 24 & 240,
            A = n;
            for (var T = 0; T < C.length; T++)
                C[T] ? (k = k << 2 | k >>> 26,
                A = A << 2 | A >>> 26) : (k = k << 1 | k >>> 27,
                A = A << 1 | A >>> 27),
                A &= -15,
                e = a[(k &= -15) >>> 28] | s[k >>> 24 & 15] | o[k >>> 20 & 15] | r[k >>> 16 & 15] | c[k >>> 12 & 15] | l[k >>> 8 & 15] | u[k >>> 4 & 15],
                i = d[A >>> 28] | h[A >>> 24 & 15] | p[A >>> 20 & 15] | f[A >>> 16 & 15] | v[A >>> 12 & 15] | m[A >>> 8 & 15] | g[A >>> 4 & 15],
                n = 65535 & (i >>> 16 ^ e),
                y[w++] = e ^ n,
                y[w++] = i ^ n << 16
        }
        return y
    }(t), F = 0, I = e.length, B = 0, j = 32 == S.length ? 3 : 9;
    p = 3 == j ? i ? new Array(0,32,2) : new Array(30,-2,-2) : i ? new Array(0,32,2,62,30,-2,64,96,2) : new Array(94,62,-2,32,64,2,30,-2,-2),
    2 == s ? e += "        " : 1 == s ? i && (c = 8 - I % 8,
    e += String.fromCharCode(c, c, c, c, c, c, c, c),
    8 === c && (I += 8)) : s || (e += "\0\0\0\0\0\0\0\0");
    var z = ""
      , O = "";
    for (1 == n && (f = a.charCodeAt(F++) << 24 | a.charCodeAt(F++) << 16 | a.charCodeAt(F++) << 8 | a.charCodeAt(F++),
    m = a.charCodeAt(F++) << 24 | a.charCodeAt(F++) << 16 | a.charCodeAt(F++) << 8 | a.charCodeAt(F++),
    F = 0); F < I; ) {
        for (d = e.charCodeAt(F++) << 24 | e.charCodeAt(F++) << 16 | e.charCodeAt(F++) << 8 | e.charCodeAt(F++),
        h = e.charCodeAt(F++) << 24 | e.charCodeAt(F++) << 16 | e.charCodeAt(F++) << 8 | e.charCodeAt(F++),
        1 == n && (i ? (d ^= f,
        h ^= m) : (v = f,
        g = m,
        f = d,
        m = h)),
        d ^= (c = 252645135 & (d >>> 4 ^ h)) << 4,
        d ^= (c = 65535 & (d >>> 16 ^ (h ^= c))) << 16,
        d ^= c = 858993459 & ((h ^= c) >>> 2 ^ d),
        d ^= c = 16711935 & ((h ^= c << 2) >>> 8 ^ d),
        d = (d ^= (c = 1431655765 & (d >>> 1 ^ (h ^= c << 8))) << 1) << 1 | d >>> 31,
        h = (h ^= c) << 1 | h >>> 31,
        r = 0; r < j; r += 3) {
            for (b = p[r + 1],
            y = p[r + 2],
            o = p[r]; o != b; o += y)
                l = h ^ S[o],
                u = (h >>> 4 | h << 28) ^ S[o + 1],
                c = d,
                d = h,
                h = c ^ (_[l >>> 24 & 63] | x[l >>> 16 & 63] | A[l >>> 8 & 63] | L[63 & l] | C[u >>> 24 & 63] | w[u >>> 16 & 63] | k[u >>> 8 & 63] | T[63 & u]);
            c = d,
            d = h,
            h = c
        }
        h = h >>> 1 | h << 31,
        h ^= c = 1431655765 & ((d = d >>> 1 | d << 31) >>> 1 ^ h),
        h ^= (c = 16711935 & (h >>> 8 ^ (d ^= c << 1))) << 8,
        h ^= (c = 858993459 & (h >>> 2 ^ (d ^= c))) << 2,
        h ^= c = 65535 & ((d ^= c) >>> 16 ^ h),
        h ^= c = 252645135 & ((d ^= c << 16) >>> 4 ^ h),
        d ^= c << 4,
        1 == n && (i ? (f = d,
        m = h) : (d ^= v,
        h ^= g)),
        O += String.fromCharCode(d >>> 24, d >>> 16 & 255, d >>> 8 & 255, 255 & d, h >>> 24, h >>> 16 & 255, h >>> 8 & 255, 255 & h),
        512 == (B += 8) && (z += O,
        O = "",
        B = 0)
    }
    if (z = (z += O).replace(/\0*$/g, ""),
    !i) {
        if (1 === s) {
            var E = 0;
            (I = z.length) && (E = z.charCodeAt(I - 1)),
            E <= 8 && (z = z.substring(0, I - E))
        }
        z = decodeURIComponent(escape(z))
    }
    return z
}

//修改函数名为mydecode
function   mydecode(t) {
                var e = (t = String(t).replace(f, "")).length;
                e % 4 == 0 && (e = (t = t.replace(/==?$/, "")).length),
                (e % 4 == 1 || /[^+a-zA-Z0-9/]/.test(t)) && l("Invalid character: the string to be decoded is not correctly encoded.");
                for (var n, r, i = 0, o = "", a = -1; ++a < e; )
                    r = c.indexOf(t.charAt(a)),
                    n = i % 4 ? 64 * n + r : r,
                    i++ % 4 && (o += String.fromCharCode(255 & n >> (-2 * i & 6)));
                return o
            }


二、查漏补全JS代码

这里我们依旧是借助execjs库来执行JS代码,执行代码如下

import execjs
import json
import requests

def get_encrypt_data(url):
    header = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36'}
    r = requests.get(url, headers=header)
    return r.json()['encrypt_data']


def load_jscode(js_path):
    with open(js_path, 'r', encoding='utf8') as f:
        jscode = f.read()
    return jscode


if __name__ == '__main__':
    url = 'https://vipapi.qimingpian.com/DataList/productListVip'
    encrypt_data = get_encrypt_data(url)
    jscode = load_jscode('c:/Users/dell/Desktop/tech.js')
    rst = execjs.compile(jscode).call('o', encrypt_data)
    data = json.loads(rst)
    print(data)

执行结果如下,分析可知参数f未定义,接下来就到了"查漏补缺"的时候了

在这里插入图片描述
通过分析上述JS代码可知,参数f是在decode函数中的。在11282处打下断点,刷新页面,将鼠标放置f上可得到/[\t\n\f\r ]/g(或者在console控制台输入f亦可得到,注意:这里需要将之前打过的断点删除,否则不会有参数显示!)

在这里插入图片描述
将参数f加入之前的mydecode函数,如下所示

function   mydecode(t) {
				var f = '/[\t\n\f\r ]/g'  //添加f的定义
                var e = (t = String(t).replace(f, "")).length;
                e % 4 == 0 && (e = (t = t.replace(/==?$/, "")).length),
                (e % 4 == 1 || /[^+a-zA-Z0-9/]/.test(t)) && l("Invalid character: the string to be decoded is not correctly encoded.");
                for (var n, r, i = 0, o = "", a = -1; ++a < e; )
                    r = c.indexOf(t.charAt(a)),
                    n = i % 4 ? 64 * n + r : r,
                    i++ % 4 && (o += String.fromCharCode(255 & n >> (-2 * i & 6)));
                return o
            }

再次执行代码,结果如下,可知参数c尚未定义

在这里插入图片描述
同理,找到参数c的位置后(依然是在decode函数下),打断点分析,可知参数cABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/.将参数c加入之前的mydecode函数,如下所示

function   mydecode(t) {
				var f = '/[\t\n\f\r ]/g'  //添加f的定义
				var c = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' //添加c的定义
                var e = (t = String(t).replace(f, "")).length;
                e % 4 == 0 && (e = (t = t.replace(/==?$/, "")).length),
                (e % 4 == 1 || /[^+a-zA-Z0-9/]/.test(t)) && l("Invalid character: the string to be decoded is not correctly encoded.");
                for (var n, r, i = 0, o = "", a = -1; ++a < e; )
                    r = c.indexOf(t.charAt(a)),
                    n = i % 4 ? 64 * n + r : r,
                    i++ % 4 && (o += String.fromCharCode(255 & n >> (-2 * i & 6)));
                return o
            }

再次执行代码,结果如下

在这里插入图片描述

已成功返回数据!

三、全部代码

将得到的json字符串,整理为Dataframe格式,全部代码如下

import execjs
import json
import requests
import pandas as pd

def get_encrypt_data(url):
    header = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36'}
    r = requests.get(url, headers=header)
    return r.json()['encrypt_data']


def load_jscode(js_path):
    with open(js_path, 'r', encoding='utf8') as f:
        jscode = f.read()
    return jscode

def save_data(data):
    df = []
    for content in data['list']:
        item = content['product']
        business = content['yewu']
        industry = content['hangye1']
        loc = content['province']
        period = content['jieduan']
        invest_time = content['time']
        invest_money = content['money']
        investor = [investor['investor'] for investor in content['investor_info']]
        df.append([item,business,industry,loc,period,invest_time,invest_money,investor])
    df1 = pd.DataFrame(df,columns=['项目','业务','行业','地区',
                                   '投资阶段','投资时间','投资金额','投资方'])
    df1.to_csv('c:/users/dell/Desktop/company.csv',index=False,encoding='gbk')
    print('数据保存成功')
    
if __name__ == '__main__':
    url = 'https://vipapi.qimingpian.com/DataList/productListVip'
    encrypt_data = get_encrypt_data(url)
    jscode = load_jscode('c:/Users/dell/Desktop/tech.js')
    rst = execjs.compile(jscode).call('o', encrypt_data)
    data = json.loads(rst)
    save_data(data)

爬取数据如下

在这里插入图片描述
以上就是本次分享的全部内容~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JS逆向进阶案例 的相关文章

  • scipy 将一个稀疏矩阵的所有行附加到另一个稀疏矩阵

    我有一个 numpy 矩阵 想在其中附加另一个矩阵 这两个矩阵的形状为 m1 shape 2777 5902 m2 shape 695 5902 我想将 m2 附加到 m1 以便新矩阵的形状为 m new shape 3472 5902 当
  • 如何以“正确”的方式处理带有空字节的 Python unicode 字符串?

    Question PyWin32 似乎很乐意将 null 终止的 unicode 字符串作为返回值 我想以 正确 的方式处理这些字符串 假设我得到一个像这样的字符串 u C Users Guest MyFile asy x00 x00sy
  • 为什么删除临时文件时出现WindowsError?

    我创建了一个临时文件 向创建的文件添加了一些数据 已保存 然后尝试将其删除 但我越来越WindowsError 编辑后我已关闭该文件 如何检查哪个其他进程正在访问该文件 C Documents and Settings Administra
  • Pandas:GroupBy 到 DataFrame

    参考这个关于 groupby 到 dataframe 的非常流行的问题 https stackoverflow com questions 10373660 converting a pandas groupby object to dat
  • Python - 来自 .进口

    我第一次尝试图书馆 我注意到解决图书馆内导入问题的最简单方法是使用如下结构 from import x from some module import y 我觉得这件事有些 糟糕 也许只是因为我不记得经常看到它 尽管公平地说我还没有深入研究
  • Python 中的流式传输管道

    我正在尝试使用 Python 将 vmstat 的输出转换为 CSV 文件 因此我使用类似的方法转换为 CSV 并将日期和时间添加为列 vmstat 5 python myscript py gt gt vmstat log 我遇到的问题是
  • 如果未引发异常,则通过 Python 单元测试

    在Python中unittest框架 是否有一种方法可以在未引发异常的情况下通过单元测试 否则会因 AssertRaise 而失败 如果我正确理解你的问题 你could做这样的事情 def test does not raise on va
  • 没有名为 StringIO 的模块

    我有Python 3 6 我想从另一个名为 run py 的 python 文件执行名为 operation py 的 python 文件 In operation py I do from cStringIO import StringI
  • 如何使用文本相似性删除 pandas 数据框中相似(不重复)的行?

    我有数千个数据 这些数据可能相似也可能不相似 使用 python 的默认函数 drop duplicates 并没有真正的帮助 因为它们只检测相似的数据 例如 如果我的数据包含类似以下内容怎么办 嗨 早上好 嗨 早上好 Python 不会将
  • Emacs 24.x 上的 IPython 支持

    我对 IPython 与 Emacs 的集成感到困惑 从 Emacs 24 开始 Emacs 附带了自己的python el 该文件是否支持 IPython 还是仅支持 Python 另外 维基百科 http emacswiki org e
  • 结构差异 sudo() run('sudo 命令')

    我想知道函数之间有什么区别sudo 和函数run sudo u user smth 文档上有 sudo 在所有运行方式上都是相同的 除了它总是换行 调用 sudo 程序中的给定命令以提供超级用户 特权 但有几次 sudo cmd 提示我输入
  • 如果在等待“read -s”时中断,在子进程中运行 bash 会破坏 tty 的标准输出吗?

    正如 Bakuriu 在评论中指出的那样 这基本上与BASH 输入期间按 Ctrl C 会中断当前终端 https stackoverflow com questions 31808863 bash ctrlc during input b
  • Django send_mail SMTPSenderRefused 530 与 gmail

    一段时间以来 我一直在尝试使用 Django 从我正在开发的网站接收电子邮件 现在 我还没有部署它 并且我正在使用Django开发服务器 我不知道这是否会影响它 这是我的 settings py 配置 EMAIL BACKEND djang
  • 用 python 编写的数学语法检查器

    我需要的只是使用 python 检查字符串是否是有效的数学表达式 为了简单起见 假设我只需要 运算符 也作为一元 带有数字和嵌套括号 为了完整性 我还添加了简单的变量名称 所以我可以这样测试 test 3 2 1 valid test 3
  • ANTLR 获取并拆分词法分析器内容

    首先 对我的英语感到抱歉 我还在学习 我为我的框架编写 Python 模块 用于解析 CSS 文件 我尝试了 regex ply python 词法分析器和解析器 但我发现自己在 ANTLR 中 第一次尝试 我需要解析 CSS 文件中的注释
  • 返回表示每组内最大值的索引的一系列数字位置

    考虑一下这个系列 np random seed 3 1415 s pd Series np random rand 100 pd MultiIndex from product list ABDCE list abcde One Two T
  • 在 keras 中保存和加载权重

    我试图从我训练过的模型中保存和加载权重 我用来保存模型的代码是 TensorBoard log dir output model fit generator image a b gen batch size steps per epoch
  • Mac OSX 10.6 上的 Python mysqldb 不工作

    我正在使用 Python 2 7 并尝试让 Django 项目在 MySQL 后端运行 我已经下载了 mysqldb 并按照此处的指南进行操作 http cd34 com blog programming python mysql pyth
  • Django Admin 中的反向内联

    我有以下 2 个型号 现在我需要将模型 A 内联到模型 B 的页面上 模型 py class A models Model name models CharField max length 50 class B models Model n
  • 混淆矩阵不支持多标签指示符

    multilabel indicator is not supported是我在尝试运行时收到的错误消息 confusion matrix y test predictions y test is a DataFrame其形状为 Horse

随机推荐

  • Java常用类 学习记录

    String类 关于Java JDK中内置的一个类 java lang String 1 String表示字符串类型 不属于基本数据类型 2 用双引号括起来的 例如 abc def hello world 这3个是String对象 3 双引
  • JDBC(mysql)显式设置serverTimezone的原因和方法

    TOC设置原因和方法 参 自 设置原因和方法 serverTimezone GMT 2B8 jdbc url jdbc mysql localhost 3306 demo serverTimezone UTC characterEncodi
  • python一共有多少代码_Python项目可以有多大?最多可以有多少行代码?

    导读 总是看到有人说 动态一时爽 重构火葬场 然而这世界上有的是著名的开源项目 也有像 Github Instagram 这样流量巨大的知名网站是基于动态语言开发的 经过了这么多年重构 也未听说哪个作者进了火葬场的 不明白这些人是真的不知道
  • 使用腾讯云DNSPod实现动态域名解析DDNS(测试可以用)

    使用原理 DDNS Dynamic Domain Name Server 是动态域名服务的缩写 是将用户的动态IP地址映射到一个固定的域名解析服务上 用户每次连接网络的时候客户端程序就会通过信息传递把该主机的动态IP地址传送给位于服务商主机
  • Unity中实现退出游戏功能

    我们要实现在编辑器环境下退出编辑器 在非编译器环境下退出游戏 提问 如何判断是否在编辑器环境中 如何退出编辑模式 如何退出程序 回答 使用预处理判断当前的环境 常用的预处理标识符 标识符 解释 UNITY EDITOR 只在编辑器中编译 U
  • mysql根据日期倒序_mysql记录根据日期字段倒序输出

    我们知道倒序输出是很简单的 select from table order by id desc 直接这样就可以 那么现在的问题在于日期字段怎么来倒序输出 这里我们用到cast 来将指定的字段转换为我们需要的类型 如下是实际项目中的sql语
  • C/C++项目:谁都爱玩的4399小游戏黄金矿工教程

    黄金矿工中文版 是一款休闲益智小游戏 游戏中你需要看准时机出钩子勾取金子或者砖石来获得金钱的累加 达到一定的金钱数才能够闯关成功 游戏十分经典 强烈推荐大家学会编写这款游戏 休闲时没网也能自己玩哦 黄金矿工道具说明 金块 按大小区分 越大越
  • Robot Framework 企业级自动化测试实战

    一 Robot Framework 变量使用 1 变量简介 变量是Robot Framework的一个不可或缺的特性 它们可以在测试数据的大多数地方使用 最常见的是 它们用于测试用例表和关键字表中关键字的参数 但所有设置都允许在其值中使用变
  • pthread信号

    信号是典型的异步事件 内核在某个信号出现时有三种处理方式 忽略信号 除了SIGKILL和SIGSTOP信号不能忽略外 其他大部分信号都可以被忽略 捕捉信号 也就是在信号发生时调用一个用户函数 注意不能捕捉SIGKILL和SIGSTOP 执行
  • 【生成模型新方向】score-based generative models

    这里写目录标题 0 前言 1 介绍 2 The score function score based models and score matching 3 Langevin dynamics朗之万动力学 4 朴素的 Naive score
  • blockly for android app 安装闪退

    java lang RuntimeException Unable to start activity ComponentInfo app robo com roboapp app robo com roboapp MainActivity
  • 上海链节科技:企业链改的价值是什么?

    企业链改并不是盲目的 它应该至少满足两个条件 第一 区块链技术是否与该行业真的契合 是否能工利用区块链和互联网的技术 完成自身系统的改造 提高自身的公信力 提供一系列对于企业当前出现的实际问题的必要回答 这样的依托于区块链改造的 基于特定公
  • 使用R语言中的epiDisplay包进行数据分析和可视化是一种常见的方法

    使用R语言中的epiDisplay包进行数据分析和可视化是一种常见的方法 epiDisplay包提供了丰富的函数和工具 用于描述性统计分析和制作各种图形 其中的summ函数可以帮助我们计算数据框中指定变量在不同分组变量下的描述性统计汇总信息
  • java自定义枚举数组转String类型转换器

    代码如下 public class LotteryActivityTypeConverter implements AttributeConverter
  • Windows中杀死占用某个端口的进程

    最近写项目 总是出现端口被占用的问题 原来傻傻的把电脑重启一下 终于有一天受不了了 想要想办法解决 刚开始从网上找了好多教程 发现不行 开始自己尝试 终于 成功的将占用端口的进程杀掉 在此记录下过程 以8080端口为例 第一步 打开cmd命
  • NLP--BPE、WordPiece、ULM、SentencePiece子词分词器总结【原理】

    序言 当我们在做英语文本任务时 机器无法理解文本 当我们将句子序列送入模型时 模型仅仅能看到一串字节 它无法知道一个词从哪里开始 到哪里结束 所以也不知道一个词是怎么组成的 所以 为了帮助机器理解文本 我们需要 将文本分成一个个小片段 然后
  • leetcode目录

    最近写的题目还没有填到本目录中 可以在去文章列表查看 本目录正在持续更新中 题目 考点 时间 分值 最大利润 贪心算法 2023 Q1 100 施肥问题 逻辑推理 2023 Q1 100 组装数组 深度优先搜索 2023 Q1 200 开租
  • android Button背景高度被拉伸问题--解决方案

    接入第三方SDK后 发现SDK提供的弹窗里 有两个按钮的高度呈被拉伸状态 而 第三方提供的demo内 这两个按钮均呈正常状态 对于第一次接触Android的菜鸟来说 这个问题颇为难解 第三方在尝试了几种方法之后 也宣告失败 这种奇葩问题 让
  • element项目中遇到的小问题总结

    在用element UI框架做项目时遇到的问题 现在总结记录下来 此文档持续更新中 1 日期选择器el date picker赋值后再次修改时页面不回显
  • JS逆向进阶案例

    前情回顾 有道翻译参数破解 百度翻译参数破解 之前 我们介绍了两种基础的JS逆向案例 今天 就继续来分享一个稍微复杂的JS逆向案例吧 目录 一 寻找加密源码 二 查漏补全JS代码 三 全部代码 爬取网址 某网站 本次爬取仅供学习 无任何商业