网络爬虫-tx滑块验证码

仅供研究学习使用。

目标站点 --> 腾讯防水墙官网


在这里插入图片描述

首先打开Fiddler,刷新下页面完成一组操作,发现主要请求有这几个

在这里插入图片描述
去除加载的js与log上传,真正的一组操作有三个:

1是初始化验证码。详细请求为

GET https://t.captcha.qq.com/cap_union_prehandle?aid=2100049389&protocol=https&accver=1&showtype=popup&ua=TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgNi4xOyBXT1c2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzk0LjAuNDYwNi43MSBTYWZhcmkvNTM3LjM2IENvcmUvMS45NC4xNzguNDAwIFFRQnJvd3Nlci8xMS4yLjUxNzAuNDAw&noheader=1&fb=1&aged=0&enableAged=0&enableDarkMode=0&grayscale=1&clientype=2&cap_cd=&uid=&lang=zh-cn&entry_url=https%3A%2F%2F007.qq.com%2F&elder_captcha=0&js=%2Ftcaptcha-frame.32287577.js&login_appid=&wb=2&subsid=1&callback=_aq_139895&sess= HTTP/1.1
Host: t.captcha.qq.com
Connection: keep-alive
sec-ch-ua: ";Not A Brand";v="99", "Chromium";v="94"
sec-ch-ua-mobile: ?0
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36 Core/1.94.178.400 QQBrowser/11.2.5170.400
sec-ch-ua-platform: "Windows"
Accept: */*
Sec-Fetch-Site: same-site
Sec-Fetch-Mode: no-cors
Sec-Fetch-Dest: script
Referer: https://007.qq.com/
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Q-UA2: PR=PC&CO=WBK&QV=3&PL=WIN&PB=GE&PPVN=11.2.0.5170&COVC=049400&CHID=44786&RL=1920*1080&MO=QB&VE=GA&BIT=64&OS=6.1.7601
Q-GUID: 12eb8448974e4152c6b727b2377988cb

参数的详细介绍(猜想),仅仅介绍需要变动的参数,不介绍的固定就可以:

aid:项目的ID,不同网站的aid不同

asig:这个验证码请求的id,每次验证码不同。这个asig在前面几个http请求中,网站都会返回

ua:浏览器的user-agent,进行了base64编码

uid:登录账号,在有些网站可能这个需要

其他参数固定就可以。

返回内容为:

_aq_139895({"state":1,"ticket":"","capclass":"1","subcapclass":"10052","src_1":"cap_union_new_show","src_2":"template/new_placeholder.html","src_3":"template/new_slide_placeholder.html","sess":"s0VOw_97_vJctxxc0EL1-vmZBsw4fmYz92h2Bv--q8qaMCLtr0W8E40yrPjWUfV_zdQby0l39fEFyFlTqdTMojXyhZUfmhzX_KVSvBPjQP9s8CQa32ZKxdGgyx2ojb6F2f1hCmDT4rKWzVE-pz0YBf8U71zoRMKjKr4AB-iQRcCsdxw77XNU5iCSuKUgW_TIomdN0HTMAssyUEKpIexy6VYe5aoVcuQs12H-5isrqaQeaELIiMNbfSLKSZiWJzeZkIFMCYfJVM-CTxOSGEUxgp7_6L35DwSjoel7mlQYzoTBsgLMnnGC9repeBl_I6U0Xj6cLzk1FahbHItPj260STXA**","randstr":"","sid":"6994123938815057921","log_js":"","data":{"comm_captcha_cfg":{"tdc_path":"/tdc.js?app_data=6994123938815057921&t=1285156112","feedback_url":"https://support.qq.com/products/304457","pow_cfg":{"prefix":"6a76ff402b053df2#","md5":"f2c7789f216268808b8bc756ed6d2ab9"}},"dyn_show_info":{"lang":"zh-cn","instruction":"拖动下方滑块完成拼图","bg_elem_cfg":{"sprite_pos":[0,0],"size_2d":[672,480],"img_url":"/cap_union_new_getcapbysig?img_index=1&image=0244270000ff480900000009da2592502ec5&sess=s04lpAPNzBKI8cwN98XCyGgnjPdbywlD4HclpSZywBCWDAh9CWYWGKVdykKdBheaInUw5bgs2K5jZYP3qr5AjkbNOD-WRmMWNy1oYRLZYyQL01_SV3vVMqksWoMd0836aU-kdzOL5FAYUQut92w5J2QAAGYRbQHLlVC6fKUv-PY_Cx1XtAn-O8TxS4dXhjpWCpjxiUP1G5IcxaATKd6b-jN4UcIEGW73vbQvVRbMFMW57yRE37ycnj31Se3fj8UxHiyp3Z0Lsn3-V4QNjzZmDDGCrjTXmgMYr9uQi1NI1Gz_wsUHTSzCKKfgK_V71ygzcVotfdss4prXxTWkzJEPqSmg**"},"fg_elem_list":[{"id":3,"sprite_pos":[0,422],"size_2d":[672,32],"init_pos":[0,422]},{"id":1,"sprite_pos":[140,490],"size_2d":[120,120],"init_pos":[50,69],"move_cfg":{"track_limit":"x>=50&&x<=552","move_factor":[1,0],"data_type":["DynAnswerType_POS"]}},{"id":2,"sprite_pos":[0,490],"size_2d":[130,70],"init_pos":[45,402],"move_cfg":{"track_limit":"x>=50&&x<=552","move_factor":[1,0]},"type":"slider"}],"fg_binding_list":[{"master":1,"slave":2,"bind_type":"DynBindType_DX_DX","bind_factor":1},{"master":2,"slave":1,"bind_type":"DynBindType_DX_DX","bind_factor":1}],"sprite_url":"/cap_union_new_getcapbysig?img_index=0&image=0244270000ff480900000009da2592502ec5&sess=s04lpAPNzBKI8cwN98XCyGgnjPdbywlD4HclpSZywBCWDAh9CWYWGKVdykKdBheaInUw5bgs2K5jZYP3qr5AjkbNOD-WRmMWNy1oYRLZYyQL01_SV3vVMqksWoMd0836aU-kdzOL5FAYUQut92w5J2QAAGYRbQHLlVC6fKUv-PY_Cx1XtAn-O8TxS4dXhjpWCpjxiUP1G5IcxaATKd6b-jN4UcIEGW73vbQvVRbMFMW57yRE37ycnj31Se3fj8UxHiyp3Z0Lsn3-V4QNjzZmDDGCrjTXmgMYr9uQi1NI1Gz_wsUHTSzCKKfgK_V71ygzcVotfdss4prXxTWkzJEPqSmg**","color_scheme":"#1A65FF"}},"uip":"125.86.119.41"})

都是验证码需要的一些参数,后面会用到


2是验证码的获取 获取之后可以计算出滑块的距离 这个我们可以通过ddddocr来进行识别

GET https://t.captcha.qq.com/cap_union_new_getcapbysig?img_index=1&image=0244270000ff480900000009da2592502ec5&sess=s04lpAPNzBKI8cwN98XCyGgnjPdbywlD4HclpSZywBCWDAh9CWYWGKVdykKdBheaInUw5bgs2K5jZYP3qr5AjkbNOD-WRmMWNy1oYRLZYyQL01_SV3vVMqksWoMd0836aU-kdzOL5FAYUQut92w5J2QAAGYRbQHLlVC6fKUv-PY_Cx1XtAn-O8TxS4dXhjpWCpjxiUP1G5IcxaATKd6b-jN4UcIEGW73vbQvVRbMFMW57yRE37ycnj31Se3fj8UxHiyp3Z0Lsn3-V4QNjzZmDDGCrjTXmgMYr9uQi1NI1Gz_wsUHTSzCKKfgK_V71ygzcVotfdss4prXxTWkzJEPqSmg** HTTP/1.1
Host: t.captcha.qq.com
Connection: keep-alive
sec-ch-ua: ";Not A Brand";v="99", "Chromium";v="94"
sec-ch-ua-mobile: ?0
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36 Core/1.94.178.400 QQBrowser/11.2.5170.400
sec-ch-ua-platform: "Windows"
Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: no-cors
Sec-Fetch-Dest: image
Referer: https://t.captcha.qq.com/template/drag_ele.html
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Q-UA2: PR=PC&CO=WBK&QV=3&PL=WIN&PB=GE&PPVN=11.2.0.5170&COVC=049400&CHID=44786&RL=1920*1080&MO=QB&VE=GA&BIT=64&OS=6.1.7601
Q-GUID: 12eb8448974e4152c6b727b2377988cb

在这里插入图片描述
在这里插入图片描述

这里提供一个参考方法

import ddddocrdef get_gap(target_img:bytes, background_img:bytes):det = ddddocr.DdddOcr(det=False, ocr=False, show_ad=False)res = det.slide_match(target_img, background_img,simple_target=True)print(res)return res["target"][0]

3是提交验证码获取ticket

POST https://t.captcha.qq.com/cap_union_new_verify HTTP/1.1
Host: t.captcha.qq.com
Connection: keep-alive
Content-Length: 2621
sec-ch-ua: ";Not A Brand";v="99", "Chromium";v="94"
Accept: application/json, text/javascript, */*; q=0.01
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
sec-ch-ua-mobile: ?0
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36 Core/1.94.178.400 QQBrowser/11.2.5170.400
sec-ch-ua-platform: "Windows"
Origin: https://t.captcha.qq.com
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: https://t.captcha.qq.com/template/drag_ele.html
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Q-UA2: PR=PC&CO=WBK&QV=3&PL=WIN&PB=GE&PPVN=11.2.0.5170&COVC=049400&CHID=44786&RL=1920*1080&MO=QB&VE=GA&BIT=64&OS=6.1.7601
Q-GUID: 12eb8448974e4152c6b727b2377988cbcollect=uJ6zP0Gw%2BhnLR8DozwV%2BRpXsJ6YCiqIRf%2BkFkPM2CIrexkCfC%2FMdkZgaT5%2BtWYACqu2vJyjtif0X%2BoF%2BBn35nOHsWo7OGfyNFIsjoawaPVLG%2F3U1pTQVoAqOf%2Bh0u0NotNdjfYrJ9oVPgdTp4Zjz%2FkFO0WxGlKi%2FER8BZGVMEHIKuC7BGBfxbVjyE%2FFRYMynoGQcQ1Z0qJ%2B5HvG21Z2AGVEY3XnGzXC6SIGqRvhRqmf0E8ZHvOFLLPQTxke84UssKE4yroEcpiC8ffcOHH7fURxNVQsmmuqExqBt119VSRMvbr7421C1LOTVyaDUFifarZC8UCdCZ8nVCt1wPD2YDFGXbdu1IlTGeExiBuBpOI3umeXccNt79WBXxRZn0xf9n4xNqenpb8daJdqHxVP1SFlsst15cOi%2FmOR4lYWlt9xScClwZuGkA75hIbJ%2FNFVyxKugQG7KlI1HrySuN9qsoN92QfvbOOIpeNxvFBrscFTyW44IwrDzLINGuD%2F%2Bs7j3nheUL5Fs3Lgqtz4A9wTsaNhXWaTTxDULENtr12eOtLqiMXbvJo8kvUX0WGdN2JqOIFzPkGvWU2KC4Kzyz95zTdyVbHj2XJNhMAqCzjUXS6lNzTUl01qyJK32ZIgkorhFvOSvppGHZPURwQkyrO3GgOwF9qTg8dF9cBbx99F2dgOPV73GotDnPHpzc9Z2Qcng2ZDmN7D1agxD5crIraRB2zSUYuP%2FAQn9m4jEpDSOU8UdabE0cvIhdET0DmttqIvWcWh0pZdrmFyLIPga9d7CiDd1qECRYoHAPfJeVlRq2SQfrT05c82SrdXeM%2BAL781zzfPlyd3Nq5Lsg4%2B3B3QTWgo3iRP%2FFbg%2BdwXAVgE%2Fe1A2t02sCpNm0x51mrpfNw0zr5SMfpUcYr7V3jPgC%2B%2FNc1lsst15cOi%2FTbQQkZSOfp1%2B3Z3UG2Brjs6Ut%2FwK2ZvXQttkazg2Wmg%2FX5MTa66FhGcTeq5CHnqQfae2J2500iq6NQUH7rZek27rBVAQYCONY3WIHr11pD5VxBl%2Bp8qhDkPthg8Nu2UhH609OXPNkq2qBVitH15P3gD19rJCDlqQppdcm0cbFIX0E8ZHvOFLLPQTxke84UsswtwRLTB%2BGOFlfoPRegaQfnjDk9aM1Bwbou%2FCYEaZ665FP5%2FTXPV7V7Lf4IrdWFUXs21TT5OA4GW8Sq5HmuIuUrUo0BOh55ZvaJRfV%2BUPO9OSUOXRfQRJJdijZPdPzB0QpRZPrXc5U%2B8phML34yVLpEB4uGzhRp3TEkP5vMZa%2FWR2zZdwq60OZWlhpKH4a9I23hCIqF%2BY6i9lS6Olr22Q%2BLzyYEDwqrRNvAL2GLzDUt0%2BxIDkZxbDYrNtU0%2BTgOBlvyDXoQXg6IzF%2F3cvmI0QI42OdnT0eGCq5JX3Q8yzAKVglnK7YqzrgtqhnTE6PWaMzyG68ralf5iH5QfaR2QOQuEChJF00ecgFj1Nqvf42IbvUPe5d1PCqJtkl9Y13xcrZUejJh%2BEVP6aMXPYlD35FbNodN%2FkxO7jBGdLs8FBMQEjiaU2RXO4eQUFkoQwNNXllH8ncK2oNZFeUinwmsXcjxtZunEzNMVJU86u7Mf0zF8N0jIvDmQhNHG5BuW5HZb4uSAWR05uUrNrCTVKAge2DZUseCnuYly%2F9BPGR7zhSyz0E8ZHvOFLLPQTxke84UsshovKdPcq7atiCwS%2BHJ36PU77qB2g5uDADb6KqBARtEIjeIDgKij1wQ%3D%3D&tlg=1752&eks=yw7zybDLv%2FBiP48QZl1s8awLr775AKQThnRNaDm2Jc4XtOueigsUUgxqPmjufduUDC7dF5NUEHIsqQR2xOfz6vZ7rdUdiEtiQXZrPqZE%2FWRSeQZVKw6fl2BiQkUWJGMKeLkvJPv7BMzBEgSgH9zqw4UCenQRTLApvfsQOVrfdNG95aohTys5vYKaXH8XpQyp9CZet9wGZsIUSYOdE8e%2FDaDcKTngQx8XpYkygJ7%2FpNg%3D&sess=s0VOw_97_vJctxxc0EL1-vmZBsw4fmYz92h2Bv--q8qaMCLtr0W8E40yrPjWUfV_zdQby0l39fEFyFlTqdTMojXyhZUfmhzX_KVSvBPjQP9s8CQa32ZKxdGgyx2ojb6F2f1hCmDT4rKWzVE-pz0YBf8U71zoRMKjKr4AB-iQRcCsdxw77XNU5iCSuKUgW_TIomdN0HTMAssyUEKpIexy6VYe5aoVcuQs12H-5isrqaQeaELIiMNbfSLKSZiWJzeZkIFMCYfJVM-CTxOSGEUxgp7_6L35DwSjoel7mlQYzoTBsgLMnnGC9repeBl_I6U0Xj6cLzk1FahbHItPj260STXA**&ans=%5B%7B%22elem_id%22%3A1%2C%22type%22%3A%22DynAnswerType_POS%22%2C%22data%22%3A%22431%2C69%22%7D%5D&pow_answer=6a76ff402b053df2%238036&pow_calc_time=52
参数分析:
ans为滑块缺口坐标
主要参数就是eks 和 collect这两个参数,eks对应 TDC.getInfo, collect 对应 TDC.getData

加密参数分析

collect:

在这里插入图片描述

部分还原代码

function r(t, n) {var e = (65535 & t) + (65535 & n);return (t >> 16) + (n >> 16) + (e >> 16) << 16 | 65535 & e
}function o(t, n, e, o, u, f) {return r(function (t, n) {return t << n | t >>> 32 - n}(r(r(n, t), r(o, f)), u), e)
}function u(t, n, e, r, u, f, a) {return o(n & e | ~n & r, t, n, u, f, a)
}function f(t, n, e, r, u, f, a) {return o(n & r | e & ~r, t, n, u, f, a)
}function a(t, n, e, r, u, f, a) {return o(n ^ e ^ r, t, n, u, f, a)
}function i(t, n, e, r, u, f, a) {return o(e ^ (n | ~r), t, n, u, f, a)
}function c(t, n) {var e, o, c, l, s;t[n >> 5] |= 128 << n % 32, t[14 + (n + 64 >>> 9 << 4)] = n;var d = 1732584193, p = -271733879, g = -1732584194, _ = 271733878;for (e = 0; e < t.length; e += 16) o = d, c = p, l = g, s = _, p = i(p = i(p = i(p = i(p = a(p = a(p = a(p = a(p = f(p = f(p = f(p = f(p = u(p = u(p = u(p = u(p, g = u(g, _ = u(_, d = u(d, p, g, _, t[e], 7, -680876936), p, g, t[e + 1], 12, -389564586), d, p, t[e + 2], 17, 606105819), _, d, t[e + 3], 22, -1044525330), g = u(g, _ = u(_, d = u(d, p, g, _, t[e + 4], 7, -176418897), p, g, t[e + 5], 12, 1200080426), d, p, t[e + 6], 17, -1473231341), _, d, t[e + 7], 22, -45705983), g = u(g, _ = u(_, d = u(d, p, g, _, t[e + 8], 7, 1770035416), p, g, t[e + 9], 12, -1958414417), d, p, t[e + 10], 17, -42063), _, d, t[e + 11], 22, -1990404162), g = u(g, _ = u(_, d = u(d, p, g, _, t[e + 12], 7, 1804603682), p, g, t[e + 13], 12, -40341101), d, p, t[e + 14], 17, -1502002290), _, d, t[e + 15], 22, 1236535329), g = f(g, _ = f(_, d = f(d, p, g, _, t[e + 1], 5, -165796510), p, g, t[e + 6], 9, -1069501632), d, p, t[e + 11], 14, 643717713), _, d, t[e], 20, -373897302), g = f(g, _ = f(_, d = f(d, p, g, _, t[e + 5], 5, -701558691), p, g, t[e + 10], 9, 38016083), d, p, t[e + 15], 14, -660478335), _, d, t[e + 4], 20, -405537848), g = f(g, _ = f(_, d = f(d, p, g, _, t[e + 9], 5, 568446438), p, g, t[e + 14], 9, -1019803690), d, p, t[e + 3], 14, -187363961), _, d, t[e + 8], 20, 1163531501), g = f(g, _ = f(_, d = f(d, p, g, _, t[e + 13], 5, -1444681467), p, g, t[e + 2], 9, -51403784), d, p, t[e + 7], 14, 1735328473), _, d, t[e + 12], 20, -1926607734), g = a(g, _ = a(_, d = a(d, p, g, _, t[e + 5], 4, -378558), p, g, t[e + 8], 11, -2022574463), d, p, t[e + 11], 16, 1839030562), _, d, t[e + 14], 23, -35309556), g = a(g, _ = a(_, d = a(d, p, g, _, t[e + 1], 4, -1530992060), p, g, t[e + 4], 11, 1272893353), d, p, t[e + 7], 16, -155497632), _, d, t[e + 10], 23, -1094730640), g = a(g, _ = a(_, d = a(d, p, g, _, t[e + 13], 4, 681279174), p, g, t[e], 11, -358537222), d, p, t[e + 3], 16, -722521979), _, d, t[e + 6], 23, 76029189), g = a(g, _ = a(_, d = a(d, p, g, _, t[e + 9], 4, -640364487), p, g, t[e + 12], 11, -421815835), d, p, t[e + 15], 16, 530742520), _, d, t[e + 2], 23, -995338651), g = i(g, _ = i(_, d = i(d, p, g, _, t[e], 6, -198630844), p, g, t[e + 7], 10, 1126891415), d, p, t[e + 14], 15, -1416354905), _, d, t[e + 5], 21, -57434055), g = i(g, _ = i(_, d = i(d, p, g, _, t[e + 12], 6, 1700485571), p, g, t[e + 3], 10, -1894986606), d, p, t[e + 10], 15, -1051523), _, d, t[e + 1], 21, -2054922799), g = i(g, _ = i(_, d = i(d, p, g, _, t[e + 8], 6, 1873313359), p, g, t[e + 15], 10, -30611744), d, p, t[e + 6], 15, -1560198380), _, d, t[e + 13], 21, 1309151649), g = i(g, _ = i(_, d = i(d, p, g, _, t[e + 4], 6, -145523070), p, g, t[e + 11], 10, -1120210379), d, p, t[e + 2], 15, 718787259), _, d, t[e + 9], 21, -343485551), d = r(d, o), p = r(p, c), g = r(g, l), _ = r(_, s);return [d, p, g, _]
}function l(t) {var n, e = "";for (n = 0; n < 32 * t.length; n += 8) e += String.fromCharCode(t[n >> 5] >>> n % 32 & 255);return e
}function s(t) {var n, e = [];for (e[(t.length >> 2) - 1] = void 0, n = 0; n < e.length; n += 1) e[n] = 0;for (n = 0; n < 8 * t.length; n += 8) e[n >> 5] |= (255 & t.charCodeAt(n / 8)) << n % 32;return e
}function d(t) {var n, e, r = "0123456789abcdef", o = "";for (e = 0; e < t.length; e += 1) n = t.charCodeAt(e), o += r.charAt(n >>> 4 & 15) + r.charAt(15 & n);return o
}function p(t) {return unescape(encodeURIComponent(t))
}function g(t) {return function (t) {return l(c(s(t), 8 * t.length))}(p(t))
}function _(t, n) {return function (t, n) {var e, r, o = s(t), u = [], f = [];for (u[15] = f[15] = void 0, o.length > 16 && (o = c(o, 8 * t.length)), e = 0; e < 16; e += 1) u[e] = 909522486 ^ o[e], f[e] = 1549556828 ^ o[e];return r = c(u.concat(s(n)), 512 + 8 * n.length), l(c(f.concat(r), 640))}(p(t), p(n))
}function v(t, n, e) {return n ? e ? _(n, t) : function (t, n) {return d(_(t, n))}(n, t) : e ? g(t) : function (t) {return d(g(t))}(t)
}
function get_ans (t, n) {for (var e = t.nonce, r = t.target, o = +new Date, u = 0, f = "number" == typeof n ? n : 3e4; v("" + e + u) !== r&& (u += 1, !(+new Date - o > f));) ;// console.log(t);console.log(u);return u
}get_ans({target: '29acdd2524943c824aaf0d0f38daa2c9', nonce: '80b6d873c59ffb74#'})
function md5(n, t, r) {return t ? r ? m(t, n) : s(t, n) : r ? C(n) : A(n)
}function cdata(y) {if ("string" == typeof y && "" != y) {var r = 0;y = y.replace(/&quot;/g, '"'), y = y.replace(/&apos;/g, "'");var n;try {n = eval('(' + y + ')')} catch (e) {};if ("object" == typeof n && "string" == typeof n.randstr && ("string" == typeof n.M || "number" == typeof n.M) && "string" == typeof n.ans) {n.ans = n.ans.toLowerCase(), n.M = parseInt(n.M);for (var s = 0; s < n.M && s < 1e3; s++) {var i = n.randstr + s, c = md5(i);if (n.ans == c.toLowerCase()) {r = s;return r;}}}}
};function rnd() {return Math.floor(1e6 * Math.random())
};function random() {return +new Date();
};

最终成品代码图

在这里插入图片描述


Ending

如有权益问题可以发私信联系我删除

联系方式: 442891187 企鹅

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

验证码识别登录:使用超级鹰(验证码识别第三方包)识别超级鹰网站登录

验证码识别超级鹰网址&#xff1a;超级鹰验证码识别-专业的验证码云端识别服务,让验证码识别更快速、更准确、更强大 (chaojiying.com) 注册并微信扫码即可获得1000积分&#xff0c;首先做如图操作生成ID 然后下载其第三方开发api python文件 点击下载即可&#xff0c;将下载…

selenium 超级鹰 通过携程滑块和汉字验证码

大概流程 1、进入页面点击同意按钮。 2、得到滑块和滑块区域的xpath 3、定位滑块&#xff0c;设置按住事件&#xff0c;进行拖动 4、xpath定位汉字图片&#xff0c;获取屏幕截图&#xff0c;保存本地 5、超级鹰识别图片返回汉字对应的坐标&#xff0c;移动至坐标位置进行点击。…

面试中经常问到的几个问题,快来看看能答对几道吧

写在前面 CSDN话题挑战赛第1期 活动详情地址&#xff1a;https://marketing.csdn.net/p/bb5081d88a77db8d6ef45bb7b6ef3d7f 参赛话题&#xff1a;前端面试宝典 话题描述&#xff1a;欢迎各位加入话题创作得小伙伴&#xff0c;如果我没有猜错得话&#xff0c;我觉得你是应该同…

速卖通大卖不会告诉你的技巧,学会这招出单很简单

如今&#xff0c;无论是在实体店还是在网上&#xff0c;“流量”一词都很熟悉&#xff0c;流量越大&#xff0c;交易量自然就越大。从事国内电商的朋友都知道&#xff0c;要把网店做好&#xff0c;首先要做好店铺信誉&#xff0c;这样才能有更多的流量。尽管速卖通是一个重产品…

速卖通新手卖家入门知识问答

美国有亚马逊&#xff0c;中国有速卖通。我们都知道“十年一剑速卖通”&#xff0c;自2010年速卖通成立并高速发展&#xff0c;至今已覆盖全球220个国家和地区&#xff0c;支持18种语言&#xff0c;支持全球51个国家的当地支付方式&#xff0c;海外成交卖家突破1.5亿。速卖通已…

速卖通正式推出全托管,卖家竞争进入新阶段

全托管来了&#xff0c;卖家就能安心做甩手掌柜吗&#xff1f; 正式推出全托管 显而易见&#xff0c;越来越多的平台正在转向全托管模式。 近日&#xff0c;速卖通在2023年度商家峰会上&#xff0c;正式推出了全托管服务模式。官方表示&#xff0c;托管是对速卖通平台商家服…

【速卖通】 AliExpress(速卖通)关键词搜索结果采集

采集场景 在AliExpress(速卖通) 首页中 http://www.aliexpress.com 中输入关键词&#xff0c;采集关键词搜索后得到的商品列表信息。 采集字段 关键词、标题、商品id、商品图片地址、商品详情链接、价格、免费退送货、星级、已出售数量、店铺名 采集结果 采集结果可导出为E…

速卖通正在运营的店铺,流量突然下滑卖家该怎么做

现在速卖通卖家的生意多少都变差了&#xff0c;不管承不承认&#xff0c;这都是客观原因。人人都说速卖通正在转型&#xff0c;本来是打算给予精品店铺、风格化店铺一定的扶持&#xff0c;逐渐品牌化。而照现在看来之前的打算还没落实&#xff0c;又紧急推出大卖的天堂AE-MALL&…

121.Android 简单的人工智能聊天项目,chatAi,AI聊天项目,GPTAi

//首页xml布局代码&#xff1a; <?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"mat…

3 名离职员工窃取公司游戏源码,半年狂赚 1.5 亿,网友:“自立门户也不带这样玩的!”...

整理 | 朱珂欣 出品 | CSDN程序人生&#xff08;ID&#xff1a;coder_life&#xff09; 对于游戏公司而言&#xff0c;安全、抄袭问题总是「防不胜防」。 不仅要抵御黑客攻击、排查自身的安全漏洞&#xff0c;还要警惕员工拿着代码跑了&#xff01; 近日&#xff0c;据上海市…

揭秘 “移动云杯”移动赛道——算网应用自定义创新子赛道

【赛事介绍】 随着我国“东数西算”工程的推进&#xff0c;算力网络正成为国家、社会、产业发展的战略要求&#xff0c;在数字中国建设进程中发挥着重要引擎作用。中国移动作为我国数字经济发展的“排头兵”&#xff0c;锚定“世界一流信息服务科技创新公司”核心定位&#xff…

揭秘“移动云杯”行业赛道——行业应用创新子赛道

【赛事介绍】 为助力中国移动算力网络的发展&#xff0c;加速移动云向算力网络演进过程&#xff0c;促进基于移动云产品能力的创新应用与解决方案的丰富&#xff0c;中国移动联合多家单位举办第二届“移动云杯”算力网络应用创新大赛&#xff0c;为算力网络的战略落实提供创新平…

国内下载谷歌插件的免费方法

插件功能让Chrome浏览器变得更加优秀&#xff0c;极大地提升了用户体验&#xff0c;给用户一种定制式的在线服务。但是在国内&#xff0c;用户无法登陆谷歌商店&#xff0c;在不能科学上网的情况下&#xff0c;想要下载插件的方法是使用第三方插件下载器。 扩展坞是一个很方便…

Android 点击 App icon 发生了什么?

Gityuan – startActivity启动过程分析 点击桌面App图标&#xff0c;Launcher进程采用Binder IPC向system_server进程发起startActivity请求&#xff1b;system_server 进程接收到请求后&#xff0c;向 zygote 进程发送创建进程的请求&#xff1b;Zygote 进程 fork 出新的子进…

Android开发中app图标更换

最近学习Android开发 然后自己有点菜 一遇到问题就没办法自己解决只能百度解决 然后我在如何修改app图标遇到了一些问题 下面是我解决问题的一些过程 写下来以后自己好看 首先网上的教程是 复制一张图片&#xff08;png格式&#xff09;到资源文件夹下面的drawable目录下&am…

QT for Android设置APP应用图标和名称

APP应用图标 在工程目录中&#xff0c;创建一个Android_sources文件夹&#xff0c;与xxx.pro文件在同一目录下 在QT界面中&#xff0c;打开xxx.pro文件&#xff0c;在最后一行添加ANDROID_PACKAGE_SOURCE_DIR $$PWD/android-sources 在工程文件夹下的Android-build文件中&am…

直播推流方案

一、关键特性 1&#xff09;输入输出接口支持MIPI/BT1120/LVDS输入&#xff0c;MIPI/LVDS输出 2&#xff09;网络接口支持千兆网口、WiFi、4G/5G 3&#xff09;输入输出格式最高支持1080p60Hz&#xff08;RV1126最高4Kp30Hz&#xff09; 4&#xff09;视频编码支持H.264和H.26…

不止直播:腾讯云直播MLVB 插件除了推流/拉流还有哪些亮眼功能

在之前几篇的文章中&#xff0c;我们介绍了腾讯云移动直播插件MLVB的一些基础概念&#xff08;&#xff09;以及移动直播控件可以拓展的直播场景&#xff08;&#xff09;&#xff0c;今天就来分享MLVB插件除了直播的基础推拉流功能以外还有哪些功能来帮助直播APP和小程序拉新和…

腾讯云直播开发日记(三) 聊天室-直播转码-连麦混流

腾讯云直播开发日记(三) 直播的时候,用户还是需要和主播互动的,我们当前的互动就只有刷礼物,那没钱说礼物怎么搞? 不得让他们吹水? 所以我们需要做一个聊天室, 这个话自己也能做, 系统上线迫在眉睫&#xff0c;工作刻不容缓&#xff0c;所以我们一致决定使用最强能力 买。 …

直播推流拉流概念介绍

先上图 推流&#xff0c;指的是把采集阶段封包好的内容传输到服务器的过程。介绍一下目前有主流的推送协议&#xff0c;以及各自的优缺点。 RTMP RTMP是Real Time Messaging Protocol&#xff08;实时消息传输协议&#xff09;的缩写&#xff0c;是Adobe公司为Flash/AIR平台和…