爬虫网易易盾滑块及轨迹算法案例:某乎

news2024/10/5 15:25:05

声明:
该文章为学习使用,严禁用于商业用途和非法用途,违者后果自负,由此产生的一切后果均与作者无关

一、滑块初步分析
  1. js运行 atob(‘aHR0cHM6Ly93d3cuemhpaHUuY29tL3NpZ25pbg==’) 拿到网址,浏览器打开网站,F12打开调试工具,清除cookie、storage,刷新页面
    在这里插入图片描述

  2. 在Network中找到api/v2/getconf、v3/d请求,后续扣代码会用到响应结果返回的值,这两个请求中只有v3/d中的d参数是需要扣代码的,api/v2/getconf中的id是网站id,每个网站是唯一的,写固定即可
    在这里插入图片描述在这里插入图片描述

  3. 输入账号密码点击登录,找到v3/b、api/v3/get请求,其中v3/b请求中的d参数是需要解密的,api/v3/get请求中的acToken、fp、cb等参数是需要解密的,api/v3/get返回的是图片信息
    在这里插入图片描述在这里插入图片描述

  4. 验证滑块找到api/v3/check请求,该请求中data、cb等参数是需要解密的,验证成功validate是有值的,后续登录会用到会用到响应结果中的值
    在这里插入图片描述在这里插入图片描述

  5. 根据上面分析破解滑块需要解密这些请求api/v2/getconf、v3/d、v3/b、api/v3/get、api/v3/check中的参数,其中api/v2/getconf是没有加密参数的,鼠标右击请求找到Copy>Copy as cUrl(cmd),打开网站:https://spidertools.cn/#/curl2Request,把拷贝好的curl转成python代码,新建 yiduSlider.py,把代码复制到该文件
    在这里插入图片描述

  6. 修改yiduSlider.py吧request请求替换成requestSession请求,并把id参数单独拿出来,点击运行yiduSlider.py,请求响应成功
    在这里插入图片描述

二、分析api/v3/get加密cb参数
  1. 新建getCb.js文件,用于放扣下的js代码
  2. 清除cookie、storage,刷新页面,随便输入账号密码登录,找到api/v3/get请求,从请求堆栈中找到第一个文件点击进去,搜索cb":,搜到的地方全部下断点
    在这里插入图片描述在这里插入图片描述
  3. 刷新滑块,会进入其中一个断点,而且在断点位置处会发现很多请求参数,说明参数生成的的逻辑都在该文件
    在这里插入图片描述
  4. ast编译js文件,自己随便写的ast,就不贴代码了,如果没有ast编译,可忽略此步骤;该文件加载时候后面有个时间戳,是会动态改变的,时间戳改变js回重新加载,所以要把时间戳值固定下来,找到load.min.js,本地替换下搜索script:,会找到时间戳赋值的地方,我这里改成了1,刷新页面,输入账号密码登录,找到api/v3/get请求会发现该文件加载是时间戳已变为1;点击进去该文件,右击文件名点击Override content本地替换文件,把编译好的ast代码替换该文件,文件替换之后需要刷新页面,刷新页面后如果滑块图片不能正常加载,说明ast加载有问题;如果没问题,就找到之前的位置下断点
    在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
  5. 刷新滑块会进入该断点,在断点处会发现,cb是n2()调用生成的,鼠标悬浮到n2,找到该方法,分析方法内部nl经过nz处理并return出去,而nl是一个uuid方法生成,且参数是32,在return处断点,并把代码拷贝到getCb.js;未混肴的js,鼠标悬浮到对应位置可查看具体信息
    在这里插入图片描述在这里插入图片描述在这里插入图片描述
  6. 点击跳过断点,会进入刚才的断点,鼠标悬浮到nk[“uuid”]、nz会在找到方法,方法拷贝到getCb.js,并在uuid内部断点
    在这里插入图片描述在这里插入图片描述在这里插入图片描述
  7. 调用getUuid(32),执行getCb.js会发现无报错;如果是未经过ast转换,这里是会报错,函数内部经过G函数调用获取n的值,虽然最上面n已赋值,但是在红圈圈的地方n值又重新排序,这些都是文件记载时初始化的,把正确的n值、G函数拷贝到getCb.js即可
    在这里插入图片描述在这里插入图片描述
  8. 调用getCb,执行getCb.js会发现报nZ的错误,在nG方法内部断点
    在这里插入图片描述在这里插入图片描述
  9. 点击跳过断点,会进入该断点,鼠标悬浮到nZ,会发现该方法是B函数调用,把B拷贝到getCb.js;B方法内部基本也是经过G函数调用获取的n中的值;再运行getCb.js,会发现window的错误window[“encodeURIComponent”],这里可以直接使用encodeURIComponent©做替换
    在这里插入图片描述在这里插入图片描述在这里插入图片描述
  10. 再运行getCb.js会发现报了D错误,在函数B函数内部断点
    在这里插入图片描述在这里插入图片描述
  11. 点击跳过断点,会进入刚才的断点,鼠标悬浮D,找到该函数,把该函数拷贝到getCb.js,运行getCb.js,报的其他错误说明nZ已扣成功
    在这里插入图片描述在这里插入图片描述
  12. 就这样重复运行getCb.js,按照报错的提示把代码扣完即可;每个函数都要点进去查看,有时候可能扣到了该函数,但是调用的时候,可能不是该函数,因为可能会在其他地方重新命名该函数,要注意上下文代码
    在这里插入图片描述
三、分析api/v3/get加密fp参数
  1. 新建getFp.js,用于放扣下的代码
  2. 刷新滑块,找到cb断点处,会发现fp=na,na=nU[“fingerprint”],鼠标悬浮nU[“fingerprint”]查看值,并把cookie输出到控制台会发现取得是cookie中的gdxidpyhxdE
    在这里插入图片描述
  3. 使用油猴创建hook并开启,拦截cookie
    在这里插入图片描述在这里插入图片描述
  4. 清除cookie,刷新页面,会进入油猴拦截cookie的断点,点击跳过断点,直到看到val有值,点击跳过当前函数执行,看到类似cookie的值后停下,分析代码会发现gdxidpyhxdE = Go,而Go=GI,GI的生成依赖与GY,GY在上面赋值了一个空数组,说明Go的生成就在GY = []到G0 = GI;这段代码,只要把这段代码中的相关逻辑扣出来就行
    在这里插入图片描述在这里插入图片描述在这里插入图片描述
  5. 扣代码的方法和按照扣cb参数时的方法就行,其中大部分都在初始化生成,直接复制到getFp.js文件即可
    在这里插入图片描述在这里插入图片描述
四、分析api/v3/get加密acToken参数
  1. 新建acToken.js用于放扣下的js代码
  2. 刷新滑块,找到cb断点处,在断点处的下面会看到,acToken = G7,而G7,是由getToen方法生成,鼠标悬浮getToken,找到该方法
    在这里插入图片描述
  3. 进入该方法后,会看到另外getToken方法,这其中传了一个参数bid、函数,函数返回值T就是acTokken,把值在bid在控制台输出,在Network中搜索一下会发现这个值是api/v2/getconf请求响应结果,那么只要分析出这个getToken方法就可以,鼠标悬浮到acToken会找到该方法位置,然后遇到函数就在函数处下断点,直到找到真正生成acToken的位置
    在这里插入图片描述在这里插入图片描述
  4. 经过几次断点调试,会发现r.prototype.ka函数,函数内部的pE({C: u,ma: d})就是生成acToken的位置,其中传的参数中的u、d是在r.prototype.ka函数内部生成的,d是f布尔值fasle不用管,u是kE函数生成的,直接扣到js文件就行
    在这里插入图片描述
  5. 鼠标悬浮到PE方法,会找到PE函数,分析里面代码会发现是return是经过OE方法调用的结果,而OE参数是经过JSON.stringify转换的E,把E输出到控制台,会发现E里面有三个值r、b、d,其中b是之前的u,复制d的值在Network中搜索会发现d是v3/d请求返回的,这里会发现虽然在最初传了bid参数,但是在最终生成acToken中并没有用到,r是固定值
    在这里插入图片描述在这里插入图片描述
  6. 扣完acToken.js代码部分示例,除了b、d都是固定的值
    在这里插入图片描述在这里插入图片描述
  7. 修改yiduSlider.py,初步验证api/v3/get请求,会发现图片已经获取成功
    在这里插入图片描述在这里插入图片描述
五、分析v3/d加密d参数
  1. 新建getD.js,用于放扣下的代码
  2. 添加xhr,拦截v3/d请求
    在这里插入图片描述
  3. 清除缓存刷新页面,会进入xhr断点
    在这里插入图片描述
  4. 一直点击跳过当前函数执行,看见类似下图代码在r =行下个断点
    在这里插入图片描述
  5. 清除缓存刷新页面,会进入刚才的断点,控制台输出r的值,并复制给test
    在这里插入图片描述
  6. 在Network中找到v3/d请求,把参数复制到控制台并赋值给test1,控制台输出 test == test1,会发现返回true,说明刚才的断点就是d参数生成的位置
    在这里插入图片描述
  7. 清除缓存刷新页面,再出进入刚才的断点,分析代码会发现生成加密方法的参数传了 a.concat(r, t),其中a=f()、t=o(!0),而 r 是JE(u, Z[8]) 回调函数返回过来的,把分析得代码,复制到getD.js,先把a=f()、t=o(!0)代码补全,再去扣JE(u, Z[8])
    在这里插入图片描述
  8. 运行getD.js,会发现报wa[h[420]][Y[75]],在f()函数内断点,清除缓存刷新页面找到f()断点,把wa[h[420]][Y[75]]在控制台输出,会发现包含很多信息,在文件内搜索productNumber会找到这个json信息赋值得地方,在赋值得地方打上断点
    在这里插入图片描述在这里插入图片描述在这里插入图片描述
  9. 清除缓存刷新页面,会进入刚才得断点,把E在控制台输出,在Network中找到api/v2/getconf请求,对比请求响应结果会发现E中得有些字段是请求中返回,这些字段不能写死,除了这些字段其他都是固定的值
    在这里插入图片描述在这里插入图片描述
  10. o(!0) 写死就行,断点调试的时候,会发现里面的函数调用返回的都是固定值,只不过取值的时候顺序是随机返回的,把t值替换成固定的,清除缓存刷新页面查看v3/d请求会发现一样可以请求成功
    在这里插入图片描述
  11. RE(iE, Z[678], void 0),断点调试时会发现E.apply(a, arguments),其实是执行了iE,而参数是a.concat(r, t)合并后的数组,所以只把iE扣出来就行,IE函数中没什么特别注意的,直接断点扣就行
    在这里插入图片描述
  12. JE(u, Z[8]) 和 o(!0) 情况类似,写死就行,还有一种验证方法就是,取两次值,排序后对比下会发现值都是一样的只是顺序不一样,排序方法:r.sort()
    在这里插入图片描述在这里插入图片描述在这里插入图片描述
  13. 修改yiduSlider.py,替换v3/d请求中的d参数会发现依然可以请求获取成功
    在这里插入图片描述
六、分析api/v3/check加密data、cb参数
  1. 分析api/v3/check加密cb和分析api/v3/get加密cb,过程一样找到api/v3/check请求,通过请求栈进入js文件,搜索cb":,在搜索到的地方全部打断点,然后验证滑块,会进入其中一个断点,会发现这个cb参数和api/v3/get一样同样调用的是n2方法生成,而data = G5,G5=ne[“data”]
    在这里插入图片描述
  2. 在文件内搜索"data":,找到带有d赋值的data打断点,并把JSON[“stringify”]生成的data值用赋值给window.test用于测试给位置是否是生成data的位置,把之前的G5替换成window.test,拖动滑块验证,会进入断点,到G5断点的时候,在控制台把G5的值赋值给test1,点击跳过断点,会发现api/v3/check请求成功,在控制台对比test1、window.test中d的值 JSON.parse(test1).d == JSON.parse(window.test).d 会发现是一样的,说明data参数就是在刚才的断点生成,然后还原之前window.test代码
    在这里插入图片描述在这里插入图片描述在这里插入图片描述
  3. 再次拖动滑块验证,会进入data生成的断点,会发现几个关键的值this[“ s t o r e " ] [ " s t a t e " ] [ " t o k e n " ] 、 t h i s [ " t r a c e D a t a " ] 、 t h i s [ " a t o m T r a c e D a t a " ] 、 t h i s [ " store"]["state"]["token"]、this["traceData"]、this["atomTraceData"]、this[" store"]["state"]["token"]this["traceData"]this["atomTraceData"]this["jigsaw”][“style”][“left”]、this[“mouseDownCounts”]、this[“width”],其中this[“ s t o r e " ] [ " s t a t e " ] [ " t o k e n " ] 是 a p i / v 3 / g e 请求响应成功中的 t o k e n 、 t h i s [ " a t o m T r a c e D a t a " ] 轨迹、 t h i s [ " t r a c e D a t a " ] 是轨迹经过处理后的字符串、 t h i s [ " m o u s e D o w n C o u n t s " ] 固定值 1 、 t h i s [ " w i d t h " ] 是图片宽、 t h i s [ " store"]["state"]["token"]是api/v3/ge请求响应成功中的token、this["atomTraceData"]轨迹、this["traceData"]是轨迹经过处理后的字符串、this["mouseDownCounts"]固定值1、this["width"]是图片宽、this[" store"]["state"]["token"]api/v3/ge请求响应成功中的tokenthis["atomTraceData"]轨迹、this["traceData"]是轨迹经过处理后的字符串、this["mouseDownCounts"]固定值1this["width"]是图片宽、this["jigsaw”][“style”][“left”]是滑动的距离,而这些值生成的地方分别在onMouseMove、onMouseMoving方法中,其中轨迹可以暂时写死,通过滑块距离模拟出来就行,在扣代码时候会发现很多和cb一样的函数,这时候可以直接在getCb.js中扣代码,这里为了更好识别文件可以把getCb.js换成getCorePar.js,需要注意的是扣代码时要确定已经在getCb.js扣过的函数是否和正在扣的一样,如果函数名一样,就要确定函数内部逻辑是否不同,如果不一样需要重新命名歌函数名,避免和之前的冲突
    在这里插入图片描述
七、计算距离与轨迹
  1. 距离计算:可采用PIL、opencv等库,也可以自己搞个训练模型
  2. 距离计算:https://github.com/sml2h3/ddddocr,可使用ddddocr开源库
  3. 距离计算:https://zhuce.jfbym.com,可以使用打码平台,如:云码
  4. 轨迹计算,要模拟轨迹,轨迹中包含移动距离x、鼠标上下偏移y、移动时间,拖动的大概过程:开始拖动的时候一般速度会很快,越接近目标点会越慢,而且到最后可能还有细小的移动调整,在松开手的时候也许会出现停顿的情况,这时候的x是一样的;按照这个思路写代码即可,最好能找几组验证成功的数据使用折线图表现出来更直观些,时间为x轴,移动的距离为y轴;下面是我自己写的一个,虽然轨迹虽然不是太相似,但是能验证通过
import ddddocr
import random
from matplotlib import pyplot

slide = ddddocr.DdddOcr(det=False, ocr=False)


def get_dis():
    with open('./img/yd_front.jpg', 'rb') as f:
        target_bytes = f.read()

    with open('./img/yd_bg.jpg', 'rb') as f:
        background_bytes = f.read()

    res = slide.slide_match(target_bytes, background_bytes, simple_target=True)
    return res['target'][0]


def get_track(dis=0):
    dis = dis or get_dis()
    track = []
    x = random.randint(0, 10)  # 移动X坐标
    y = random.randint(-5, 5)  # 移动y坐标
    pass_time = random.randint(10, 90)  # 移动时间
    move_dis = x  # 移动距离
    track.append([x, y, pass_time])

    # 模拟开始拖动时会产生0-3个类似的x相同的轨迹
    for _ in range(random.randint(0, 3)):
        pass_time += random.randint(2, 5)  # 移动时间
        y = random.randint(-1, 1)
        track.append([x, y, pass_time])

    # 开始模拟轨迹,一般开始拖动时会很快,越接近目标点越慢
    while move_dis < dis:
        if move_dis > dis * 0.95:
            offset = random.randint(-1, 1)  # 模拟快到目标点时调整滑块时的轨迹,一般会左右移动几下对齐
        elif move_dis > dis * 0.85:
            offset = random.randint(0, 1)
        elif move_dis > dis * 0.75:
            offset = random.randint(1, 2)
        elif move_dis > dis * 0.6:
            offset = random.randint(2, 4)
        else:
            offset = random.randint(5, 8)

        pass_time += random.randint(30, 48)
        move_dis += offset
        y = random.choice([y, random.randint(-5, 5)])  # 移动y坐标
        track.append([move_dis, y, pass_time])

    # 模拟停止时会产生0-3个类似的x相同的轨迹
    for _ in range(random.randint(0, 3)):
        pass_time += random.randint(2, 5)  # 移动时间
        y = random.randint(-1, 1)
        track.append([move_dis, y, pass_time])

    return track, dis


def draw_line_chart(track):
    x_axis = [info[2] for info in track]
    y_axis = [info[0] for info in track]
    pyplot.plot(x_axis, y_axis)
    pyplot.show()


if __name__ == '__main__':
    # test_track = {
    #     260: [[4, 3, 8], [4, 3, 14], [4, 4, 23], [6, 5, 30], [6, 6, 38], [8, 7, 46], [9, 7, 54], [11, 8, 63],
    #           [13, 9, 68],
    #           [19, 9, 78], [24, 10, 84], [32, 10, 95], [40, 10, 100], [48, 9, 109], [60, 7, 117], [72, 4, 125],
    #           [84, 3, 134],
    #           [98, 0, 139], [112, -2, 147], [124, -3, 154], [136, -5, 164], [145, -5, 170], [155, -6, 179],
    #           [161, -6, 186],
    #           [167, -7, 196], [169, -7, 202], [171, -7, 209], [172, -8, 217], [174, -8, 225], [175, -8, 234],
    #           [177, -9, 241],
    #           [181, -9, 250], [187, -9, 257], [194, -9, 265], [202, -11, 272], [210, -11, 280], [218, -11, 286],
    #           [224, -11, 296], [230, -11, 302], [234, -11, 312], [237, -11, 318], [238, -11, 328], [239, -11, 335],
    #           [240, -11, 341], [240, -11, 467], [244, -11, 475], [245, -11, 480], [246, -11, 497], [248, -11, 641],
    #           [248, -9, 648], [249, -9, 657], [251, -8, 664], [252, -8, 676], [252, -7, 777], [253, -7, 789],
    #           [254, -7, 796],
    #           [256, -6, 1061], [256, -6, 1077], [257, -6, 1172], [258, -6, 1180], [259, -6, 1817], [260, -6, 1826],
    #           [260, -6, 1835]],
    #     197: [[5, -2, 68], [9, -3, 75], [13, -4, 83], [19, -4, 89], [24, -4, 99], [31, -4, 106], [36, -4, 115],
    #           [44, -5, 122], [53, -6, 131], [61, -6, 139], [87, -9, 173], [92, -10, 175], [94, -10, 183],
    #           [96, -10, 190],
    #           [99, -11, 198], [100, -11, 206], [102, -11, 213], [104, -11, 221], [105, -11, 229], [108, -11, 237],
    #           [110, -11, 245], [112, -11, 254], [116, -11, 261], [119, -11, 268], [120, -11, 276], [122, -11, 283],
    #           [124, -11, 291], [124, -11, 300], [125, -11, 307], [126, -11, 315], [127, -11, 335], [128, -11, 348],
    #           [129, -11, 356], [131, -12, 365], [135, -12, 372], [140, -12, 381], [146, -12, 388], [152, -12, 397],
    #           [157, -13, 405], [161, -13, 413], [164, -13, 420], [166, -13, 427], [168, -14, 435], [168, -15, 510],
    #           [169, -16, 522], [171, -16, 530], [172, -16, 538], [172, -16, 547], [172, -16, 554], [173, -16, 562],
    #           [174, -17, 634], [175, -17, 645], [176, -17, 655], [176, -17, 662], [176, -18, 671], [178, -18, 678],
    #           [179, -18, 686], [180, -18, 693], [182, -18, 701], [183, -18, 708], [184, -18, 717], [184, -18, 822],
    #           [185, -18, 836], [186, -18, 934], [187, -18, 954], [188, -18, 962], [188, -18, 978], [189, -18, 1001],
    #           [190, -18, 1012], [191, -18, 1070], [192, -18, 1077], [192, -18, 1086], [193, -18, 1093],
    #           [194, -18, 1103],
    #           [195, -18, 1109], [196, -18, 1270], [196, -18, 1581], [197, -18, 1836], [197, -19, 2746],
    #           [197, -20, 2753]],
    #     152: [[6, 0, 50], [9, 0, 58], [15, -1, 67], [20, -2, 76], [26, -4, 82], [34, -5, 89], [40, -6, 96],
    #           [45, -7, 105],
    #           [51, -8, 112], [56, -9, 121], [61, -10, 128], [65, -11, 137], [70, -12, 144], [73, -12, 153],
    #           [77, -13, 157],
    #           [80, -15, 166], [83, -16, 176], [85, -16, 183], [87, -16, 191], [88, -16, 198], [89, -16, 207],
    #           [91, -16, 213],
    #           [92, -16, 226], [92, -16, 256], [96, -16, 264], [100, -16, 272], [105, -16, 279], [111, -16, 290],
    #           [116, -16, 294], [122, -16, 303], [124, -16, 311], [126, -16, 320], [128, -15, 326], [128, -15, 346],
    #           [129, -15, 354], [130, -15, 362], [131, -15, 369], [132, -16, 377], [132, -16, 385], [133, -16, 393],
    #           [134, -16, 442], [137, -17, 462], [143, -18, 471], [148, -18, 478], [153, -18, 487], [159, -18, 493],
    #           [160, -18, 502], [160, -18, 615], [160, -17, 630], [159, -17, 770], [158, -17, 791], [157, -17, 804],
    #           [156, -17, 823], [156, -17, 835], [155, -17, 845], [154, -17, 870], [153, -17, 890], [152, -17, 920],
    #           [152, -18, 932], [151, -18, 940], [150, -18, 972], [151, -18, 1701], [152, -18, 1709], [152, -17, 1828]],
    #     243: [[6, 2, 50], [11, 2, 56], [16, 2, 64], [24, 2, 72], [34, 3, 79], [47, 3, 89], [63, 3, 95], [78, 3, 105],
    #           [92, 3, 112], [104, 2, 120], [115, 1, 128], [123, -1, 132], [129, -2, 145], [135, -3, 150],
    #           [140, -5, 158],
    #           [145, -7, 165], [151, -9, 175], [156, -11, 180], [163, -13, 189], [169, -15, 195], [175, -17, 205],
    #           [182, -19, 212], [187, -20, 220], [193, -21, 229], [198, -21, 236], [200, -22, 245], [202, -22, 252],
    #           [203, -22, 379], [205, -21, 387], [206, -21, 394], [207, -21, 401], [209, -20, 410], [210, -20, 417],
    #           [211, -19, 426], [214, -19, 433], [215, -18, 442], [217, -18, 448], [219, -18, 459], [219, -18, 465],
    #           [220, -18, 471], [221, -18, 482], [222, -18, 624], [223, -18, 648], [223, -18, 655], [225, -18, 663],
    #           [226, -18, 668], [227, -18, 679], [227, -18, 686], [228, -18, 729], [229, -17, 739], [230, -17, 748],
    #           [231, -17, 756], [232, -17, 765], [233, -17, 771], [234, -17, 781], [235, -17, 829], [235, -17, 836],
    #           [235, -16, 844], [237, -16, 852], [238, -16, 867], [238, -15, 875], [239, -15, 952], [239, -15, 972],
    #           [240, -15, 1076], [241, -14, 1304], [242, -13, 1382], [243, -13, 1401]],
    #     146: [[4, 5, 110], [6, 5, 118], [12, 5, 128], [21, 6, 135], [33, 6, 140], [46, 6, 150], [60, 6, 155],
    #           [72, 6, 167],
    #           [84, 6, 173], [94, 5, 182], [100, 5, 189], [105, 4, 198], [107, 4, 205], [108, 4, 210], [110, 3, 221],
    #           [112, 3, 235], [112, 3, 242], [113, 3, 257], [113, 2, 264], [114, 2, 279], [115, 2, 410], [116, 2, 425],
    #           [117, 2, 432], [119, 3, 442], [120, 3, 449], [122, 3, 458], [123, 4, 466], [124, 4, 475], [126, 5, 479],
    #           [127, 5, 488], [129, 5, 495], [131, 5, 504], [132, 5, 511], [134, 5, 520], [136, 5, 527], [136, 5, 535],
    #           [137, 5, 543], [138, 5, 554], [139, 5, 721], [140, 5, 731], [140, 5, 737], [141, 5, 837], [142, 5, 860],
    #           [143, 6, 1017], [144, 6, 1026], [144, 7, 1031], [145, 7, 1118], [146, 7, 1138], [146, 8, 1149],
    #           [147, 8, 1161],
    #           [147, 9, 1199], [148, 9, 1207], [148, 9, 1214], [149, 10, 1231], [148, 10, 1779], [148, 9, 1789],
    #           [148, 9, 1906], [147, 9, 1969], [146, 9, 1976], [146, 9, 1986]],
    #     264: [[4, 0, 41], [5, 0, 48], [12, 1, 57], [21, 1, 66], [33, 1, 74], [53, 1, 80], [75, 1, 88], [100, 3, 95],
    #           [123, 4, 105], [136, 5, 110], [149, 6, 120], [159, 8, 126], [164, 8, 136], [170, 9, 143], [173, 9, 149],
    #           [175, 9, 158], [176, 9, 166], [179, 9, 174], [182, 9, 181], [186, 8, 190], [192, 7, 198], [197, 4, 207],
    #           [203, 4, 210], [208, 4, 221], [212, 4, 227], [214, 3, 236], [215, 3, 242], [216, 3, 251], [217, 3, 258],
    #           [219, 3, 268], [220, 3, 273], [223, 3, 283], [226, 3, 290], [230, 3, 297], [233, 3, 307], [236, 3, 314],
    #           [238, 3, 321], [240, 3, 328], [240, 3, 338], [240, 2, 407], [242, 2, 412], [244, 1, 420], [244, 1, 428],
    #           [245, 1, 437], [246, 0, 528], [247, 0, 587], [248, 0, 595], [250, 1, 610], [251, 1, 617], [252, 2, 705],
    #           [252, 2, 712], [253, 3, 721], [254, 3, 833], [256, 4, 911], [256, 4, 922], [256, 4, 931], [257, 4, 1071],
    #           [258, 4, 1073], [258, 5, 1075], [259, 5, 1077], [260, 5, 1127], [260, 5, 1151], [261, 6, 1227],
    #           [262, 7, 1236],
    #           [263, 8, 1244], [264, 8, 1254], [264, 8, 1260]],
    #     133: [[8, 0, 75], [16, 0, 83], [24, 0, 93], [33, 0, 101], [44, -2, 108], [53, -3, 118], [61, -5, 124],
    #           [70, -6, 130],
    #           [76, -8, 142], [81, -10, 145], [87, -12, 154], [92, -14, 160], [97, -16, 167], [102, -17, 176],
    #           [106, -19, 184], [108, -20, 192], [111, -20, 200], [112, -21, 206], [112, -22, 214], [113, -22, 221],
    #           [114, -22, 250], [115, -22, 258], [116, -23, 265], [117, -23, 272], [118, -23, 288], [119, -23, 358],
    #           [120, -23, 376], [120, -23, 454], [121, -23, 465], [123, -23, 472], [124, -22, 480], [125, -22, 487],
    #           [126, -22, 640], [127, -21, 655], [128, -20, 759], [128, -20, 771], [129, -20, 779], [130, -20, 853],
    #           [131, -19, 869], [132, -19, 891], [132, -18, 932], [133, -18, 939], [133, -17, 947], [134, -17, 954],
    #           [135, -16, 961], [136, -16, 971], [135, -16, 1514], [135, -17, 1521], [134, -18, 1565], [134, -19, 1587],
    #           [133, -19, 1596]],
    #     153: [[5, 1, 45], [10, 1, 54], [17, 1, 63], [25, 1, 70], [33, 1, 78], [41, -2, 87], [49, -3, 94], [57, -4, 103],
    #           [66, -7, 108], [74, -7, 118], [80, -9, 125], [85, -10, 133], [91, -11, 141], [96, -12, 149],
    #           [98, -12, 157],
    #           [101, -13, 165], [104, -13, 173], [106, -14, 179], [108, -15, 187], [110, -15, 194], [112, -15, 204],
    #           [113, -15, 211], [115, -15, 219], [117, -15, 226], [117, -15, 236], [119, -15, 242], [120, -15, 250],
    #           [121, -16, 256], [121, -16, 265], [122, -16, 276], [123, -16, 286], [125, -16, 291], [128, -17, 302],
    #           [132, -17, 309], [137, -18, 315], [144, -19, 324], [149, -19, 331], [155, -19, 340], [158, -19, 347],
    #           [159, -19, 356], [160, -19, 371], [158, -19, 635], [157, -19, 642], [157, -19, 649], [156, -19, 656],
    #           [155, -19, 674], [155, -20, 945], [154, -21, 960], [153, -22, 972], [153, -22, 1060]],
    #     226: [[8, 2, 49], [15, 4, 58], [23, 4, 65], [31, 4, 73], [39, 4, 80], [47, 4, 90], [57, 3, 97], [65, 3, 106],
    #           [73, 1, 113], [81, -1, 122], [89, -3, 129], [97, -5, 136], [103, -7, 143], [110, -9, 150],
    #           [117, -11, 160],
    #           [125, -13, 167], [130, -15, 176], [136, -17, 183], [143, -18, 193], [150, -19, 198], [155, -19, 205],
    #           [160, -21, 214], [161, -21, 222], [161, -21, 229], [162, -21, 273], [164, -21, 292], [168, -22, 297],
    #           [173, -23, 308], [177, -23, 315], [181, -23, 323], [183, -23, 330], [185, -23, 337], [186, -23, 346],
    #           [187, -23, 353], [188, -23, 403], [189, -24, 414], [190, -24, 424], [191, -24, 430], [193, -24, 440],
    #           [193, -24, 450], [195, -24, 455], [197, -25, 462], [199, -25, 471], [201, -25, 475], [205, -25, 484],
    #           [206, -26, 493], [209, -26, 500], [210, -26, 509], [211, -26, 591], [213, -26, 602], [213, -27, 621],
    #           [214, -27, 628], [215, -27, 694], [216, -27, 702], [217, -27, 749], [217, -27, 764], [219, -27, 773],
    #           [220, -27, 789], [221, -27, 796], [222, -26, 995], [223, -25, 1263], [224, -25, 1283], [225, -25, 1290],
    #           [225, -24, 1793], [225, -23, 1800], [225, -23, 1808], [226, -23, 2165]],
    #     189: [[5, 2, 86], [13, 2, 97], [22, 3, 104], [33, 3, 113], [44, 3, 118], [54, 3, 123], [66, 4, 132],
    #           [74, 4, 142],
    #           [80, 4, 148], [85, 4, 157], [88, 4, 164], [88, 5, 174], [90, 5, 180], [91, 5, 187], [92, 5, 204],
    #           [95, 4, 211],
    #           [99, 4, 218], [104, 3, 227], [109, 3, 234], [116, 3, 244], [123, 3, 250], [128, 3, 258], [132, 3, 265],
    #           [135, 3, 274], [136, 3, 280], [136, 3, 332], [138, 3, 347], [144, 3, 354], [152, 3, 363], [160, 3, 371],
    #           [165, 3, 380], [167, 4, 389], [168, 5, 392], [168, 6, 553], [170, 6, 561], [171, 6, 568], [172, 6, 575],
    #           [173, 6, 678], [174, 7, 739], [175, 8, 750], [176, 8, 762], [176, 9, 837], [178, 10, 852], [180, 10, 860],
    #           [182, 10, 867], [184, 11, 875], [187, 11, 883], [188, 12, 892], [188, 13, 1070], [189, 13, 1080]]
    # }
    # for track in test_track.values():
    #     draw_line_chart(track)
    track, dis = get_track(260)
    draw_line_chart(track)
八、验证结果

修改yiduSlider.py,验证滑块,其中dt参数是api/v2/getconf请求返回的,token是每次获取验证码api/v3/get时响应返回的。这里就不破解知乎的登录了,有兴趣的可以自己尝试下
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1372106.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【低照度图像增强系列(3)】EnlightenGAN算法详解与代码实现

前言 ☀️ 在低照度场景下进行目标检测任务&#xff0c;常存在图像RGB特征信息少、提取特征困难、目标识别和定位精度低等问题&#xff0c;给检测带来一定的难度。 &#x1f33b;使用图像增强模块对原始图像进行画质提升&#xff0c;恢复各类图像信息&#xff0c;再使用目标检…

如何降低成本,制作个性化电子产品宣传册呢

​随着科技的飞速发展&#xff0c;电子产品已经深入到我们生活的每一个角落。然而&#xff0c;如何让你的产品在众多竞争者中脱颖而出呢&#xff1f;制作一份个性化的宣传册&#xff0c;不仅可以吸引潜在客户&#xff0c;还能有效降低成本&#xff0c;提升销售效果。 一、明确目…

基于JAVA+SpringBoot的高校学术报告系统

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 智慧高校学术报告系统…

职场日常英语口语,成人英语培训学校,柯桥学英语推荐哪里

“玩手机”用英语怎么说&#xff1f;你的第一反应是不是&#xff1a;play the phone&#xff1f; 在英语中&#xff0c;play这个动词通常表示“玩耍、娱乐、操纵”等意思&#xff0c;而手机是一种工具&#xff0c;不是玩耍的对象。 换句话说&#xff0c;我们“玩手机”&#xf…

CUDA编程:执行模型

SM 在SM中&#xff0c;共享内存和寄存器是非常重要的资源。共享内存被分配在SM上的常驻线程 块中&#xff0c;寄存器在线程中被分配。线程块中的线程通过这些资源可以进行相互的合作和通 信。 WARP CUDA采用单指令多线程&#xff08;SIMT&#xff09;架构来管理和执行线程&am…

机器学习中的隐马尔可夫模型及Python实现示例

隐马尔可夫模型&#xff08;HMM&#xff09;是一种统计模型&#xff0c;用于描述观测序列和隐藏状态序列之间的概率关系。它通常用于生成观测值的底层系统或过程未知或隐藏的情况&#xff0c;因此它被称为“隐马尔可夫模型”。 它用于根据生成数据的潜在隐藏过程来预测未来的观…

跟我学java|Stream流式编程——并行流

什么是并行流 并行流是 Java 8 Stream API 中的一个特性。它可以将一个流的操作在多个线程上并行执行&#xff0c;以提高处理大量数据时的性能。 在传统的顺序流中&#xff0c;所有的操作都是在单个线程上按照顺序执行的。而并行流则会将流的元素分成多个小块&#xff0c;并在多…

【Java集合篇】 ConcurrentHashMap在哪些地方做了并发控制

ConcurrentHashMap在哪些地方做了并发控制 ✅典型解析✅初始化桶阶段&#x1f7e2;桶满了会自动扩容吗&#x1f7e0;自动扩容的时间频率是多少 ✅put元素阶段✅扩容阶段&#x1f7e0; 拓展知识仓&#x1f7e2;ConcurrentSkipListMap和ConcurrentHashMap有什么区别☑️简单介绍一…

2024年第九届计算机与通信系统国际会议(ICCCS2024) ,邀您相约西安!

会议官网: ICCCS2024 | Xian China 时间: 2024年4月19-22日 地点: 中国西安 会议简介&#xff1a; 近年来&#xff0c;信息通信在不断发展&#xff0c;为计算机网络的进步与发展提供了先进可靠的技术支持。随着计算机网络与通信技术的深入发展&#xff0c;计算机通信技术、数…

报错解决:RuntimeError: Error building extension ‘bias_act_plugin‘

系统&#xff1a; Ubuntu22.04&#xff0c; nvcc -V&#xff1a;11.8 &#xff0c; torch&#xff1a;2.0.0cu118 一&#xff1a;BUG内容 运行stylegan项目的train.py时遇到报错&#x1f447; Setting up PyTorch plugin "bias_act_plugin"... Failed! /home/m…

docker+jmeter实现windows作为主控机,linux作为负载机的分布式压测环境搭建

dockerjmeter实现windows作为主控机&#xff0c;linux作为负载机的分布式压测环境搭建 1、搭建环境说明2、windows主控机安装Jmeter3、linux负载机安装Jmeter3.1、安装docker环境3.2、使用docker安装jmeter 4、windows主控机分发测试任务 1、搭建环境说明 准备一台windows主机…

京东(天猫淘宝)数据分析工具-鲸参谋系统全功能解析——行业大盘、红蓝海市场、品牌分析、店铺分析、商品分析、竞品监控(区分自营和POP)

作为第三方电商数据平台&#xff0c;鲸参谋电商大数据系统能够为品牌方和商家提供包括行业趋势、热门品牌、店铺分析、单品分析在内的多个层面数据分析&#xff0c;帮助商家做出更加准确的经营决策&#xff0c;提升经营效率&#xff0c;实现精准营销。 下面&#xff0c;我们针…

YOLOv8优化策略:轻量化改进 | 超越RepVGG!浙大阿里提出OREPA:在线卷积重参数化

🚀🚀🚀本文改进:在线卷积重参数化巧妙的和YOLOV8结合,并实现轻量化 🚀🚀🚀YOLOv8改进专栏:http://t.csdnimg.cn/hGhVK 学姐带你学习YOLOv8,从入门到创新,轻轻松松搞定科研; 1.OREPA介绍 论文:https://arxiv.org/pdf/2204.00826.pdf 摘要:结构重新参数化在…

软件测试|Python Selenium 库安装使用指南

简介 Selenium 是一个用于自动化浏览器操作的强大工具&#xff0c;它可以模拟用户在浏览器中的行为&#xff0c;例如点击、填写表单、导航等。在本指南中&#xff0c;我们将详细介绍如何安装和使用 Python 的 Selenium 库。 安装 Selenium 库 使用以下命令可以通过 pip 安装…

内网渗透之CobaltStrike(CS)

目录 一、Cobalt Strike简介 二、Cobalt Strike基本用法 1、启动服务端 2、客户端连接 3、设置监听器&#xff08;Listeners&#xff09; 4、脚本管理器&#xff08;Script Manager&#xff09; 5、攻击&#xff08;最常用的是生成后门&#xff09; 6、CS上线 7、Beaco…

图神经网络 7大高效创新思路分享,附17篇最新顶会论文和代码

2024年了&#xff0c;图神经网络方向还好发论文吗&#xff1f;答案当然是能。 图神经网络在处理非欧空间数据和复杂特征方面具有明显的优势&#xff0c;且已成为了深度学习领域的热点&#xff0c;在学术界和工业界都有着广泛的研究和应用。不仅如此&#xff0c;图神经网络与CV…

如何在集简云中调用GPTs(Assistant) API

我们在OpenAI中创建了GPTs(Assistant)后&#xff0c;希望放到其它软件中使用&#xff0c;比如 抖音私信&#xff0c;抖音评论&#xff0c;微信公众号&#xff0c;钉钉&#xff0c;飞书&#xff0c;企业微信...... 要如何实现这样的功能呢&#xff1f; 您可以使用集简云的 “数…

科研上新 | 第3期:大模型推进科研边界;大模型的道德价值对齐;优化动态稀疏深度学习模型;十亿规模向量搜索的高效更新

者按&#xff1a;欢迎阅读“科研上新”栏目&#xff01;“科研上新”汇聚了微软亚洲研究院最新的创新成果与科研动态。在这里&#xff0c;你可以快速浏览研究院的亮点资讯&#xff0c;保持对前沿领域的敏锐嗅觉&#xff0c;同时也能找到先进实用的开源工具。 本期内容速览 01…

JavaScript日期和时间处理手册

&#x1f9d1;‍&#x1f393; 个人主页&#xff1a;《爱蹦跶的大A阿》 &#x1f525;当前正在更新专栏&#xff1a;《VUE》 、《JavaScript保姆级教程》、《krpano》 ​ ​ ✨ 前言 日期和时间在应用开发中是非常常用的功能。本文将全面介绍JavaScript中处理日期和时间的方…

vscode设置python脚本运行参数

1 添加配置文件 点击到你要配置的python文件&#xff0c;然后右上角点击 运行 &#xff0c;再点击 添加配置 再点击 “Pyhton文件” 选项&#xff08;其实就是在选择 当前的python文件 进行配置&#xff09; 接着就生成了配置文件 lanunch.json 2 参数配置 再上面代码的基础上…