diff --git a/jd_slide/jd_slide/img/bg.png b/jd_slide/jd_slide/img/bg.png new file mode 100644 index 0000000..996a51d Binary files /dev/null and b/jd_slide/jd_slide/img/bg.png differ diff --git a/jd_slide/jd_slide/img/slider.png b/jd_slide/jd_slide/img/slider.png new file mode 100644 index 0000000..661ebaf Binary files /dev/null and b/jd_slide/jd_slide/img/slider.png differ diff --git a/jd_slide/jd_slide/jd.js b/jd_slide/jd_slide/jd.js new file mode 100644 index 0000000..b1cee1b --- /dev/null +++ b/jd_slide/jd_slide/jd.js @@ -0,0 +1,1244 @@ +function getCoordinate(c) { + var b = new Array(); + for (var e = 0; e < c.length; e++) { + if (e == 0) { + b.push(pretreatment(c[e][0] < 262143 ? c[e][0] : 262143, 3, true)); + b.push(pretreatment(c[e][1] < 16777215 ? c[e][1] : 16777215, 4, true)); + b.push(pretreatment(c[e][2] < 4398046511103 ? c[e][2] : 4398046511103, 7, true)) + } else { + var a = c[e][0] - c[e - 1][0]; + var f = c[e][1] - c[e - 1][1]; + var d = c[e][2] - c[e - 1][2]; + b.push(pretreatment(a < 4095 ? a : 4095, 2, false)); + b.push(pretreatment(f < 4095 ? f : 4095, 2, false)); + b.push(pretreatment(d < 16777215 ? d : 16777215, 4, true)) + } + } + return b.join("") +} +function pretreatment(d, c, b) { + var e = string10to64(Math.abs(d)); + var a = ""; + if (!b) { + a += (d > 0 ? "1" : "0") + } + a += prefixInteger(e, c); + return a +} +function prefixInteger(a, b) { + return (Array(b).join(0) + a).slice(-b) +} +function string10to64(d) { + var c = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-~".split("") + , b = c.length + , e = +d + , a = []; + do { + mod = e % b; + e = (e - mod) / b; + a.unshift(c[mod]) + } while (e); + return a.join("") +} +function generate_trace(w) { + let index = 0, slide = []; + let indexTime = (new Date().getTime().toString()).substr(0, 9); + for (let item of base_slide) { + index++ + item[2] = Number(indexTime + (item[2]).toString().substr(-4)) + console.log(item[2]) + if (item[0] >= (w + Number(base_slide[0][0]))) { + slide = base_slide.slice(0, index) + slide.push([(w + Number(base_slide[0][0])).toString(), item[1], item[2] + 700 + Math.ceil(Math.random() * 1000)]) + break; + } + } + let last = Number(slide[slide.length - 1][0]) + let pIndex = 0; + for (let item of sway_slide) { + let times; + if (pIndex === 0 || pIndex === sway_slide.length - 1) { + times = slide[slide.length - 1][2] + } else { + times = slide[slide.length - 1][2] + (sway_slide[pIndex + 1][2] - sway_slide[pIndex][2]) + } + slide.push([ + (item[0] + last).toString(), + '367', + times + ]); + pIndex++; + } + return getCoordinate(slide); +} +// 初始化滑动轨迹 +let base_slide = [ + [ + "944", + "341", + 1637921521380 + ], + [ + "967", + "369", + 1637921521380 + ], + [ + "967", + "369", + 1637921521382 + ], + [ + "968", + "369", + 1637921521481 + ], + [ + "968", + "369", + 1637921521497 + ], + [ + "969", + "369", + 1637921521505 + ], + [ + "970", + "369", + 1637921521521 + ], + [ + "971", + "369", + 1637921521537 + ], + [ + "972", + "369", + 1637921521545 + ], + [ + "973", + "369", + 1637921521561 + ], + [ + "974", + "369", + 1637921521569 + ], + [ + "976", + "369", + 1637921521577 + ], + [ + "976", + "369", + 1637921521585 + ], + [ + "978", + "369", + 1637921521593 + ], + [ + "979", + "369", + 1637921521601 + ], + [ + "980", + "369", + 1637921521609 + ], + [ + "981", + "369", + 1637921521617 + ], + [ + "982", + "369", + 1637921521625 + ], + [ + "984", + "369", + 1637921521633 + ], + [ + "985", + "369", + 1637921521641 + ], + [ + "987", + "369", + 1637921521657 + ], + [ + "988", + "369", + 1637921521665 + ], + [ + "990", + "369", + 1637921521673 + ], + [ + "991", + "369", + 1637921521681 + ], + [ + "992", + "369", + 1637921521689 + ], + [ + "993", + "369", + 1637921521697 + ], + [ + "995", + "369", + 1637921521705 + ], + [ + "996", + "369", + 1637921521713 + ], + [ + "999", + "369", + 1637921521721 + ], + [ + "1002", + "369", + 1637921521729 + ], + [ + "1004", + "369", + 1637921521737 + ], + [ + "1006", + "369", + 1637921521745 + ], + [ + "1008", + "369", + 1637921521753 + ], + [ + "1009", + "369", + 1637921521761 + ], + [ + "1012", + "369", + 1637921521769 + ], + [ + "1013", + "369", + 1637921521777 + ], + [ + "1015", + "369", + 1637921521785 + ], + [ + "1016", + "369", + 1637921521793 + ], + [ + "1018", + "369", + 1637921521801 + ], + [ + "1020", + "369", + 1637921521809 + ], + [ + "1022", + "369", + 1637921521817 + ], + [ + "1023", + "369", + 1637921521825 + ], + [ + "1026", + "369", + 1637921521833 + ], + [ + "1028", + "369", + 1637921521841 + ], + [ + "1030", + "369", + 1637921521849 + ], + [ + "1032", + "369", + 1637921521857 + ], + [ + "1036", + "369", + 1637921521865 + ], + [ + "1036", + "369", + 1637921521873 + ], + [ + "1040", + "369", + 1637921521881 + ], + [ + "1041", + "369", + 1637921521890 + ], + [ + "1044", + "369", + 1637921521897 + ], + [ + "1046", + "369", + 1637921521905 + ], + [ + "1048", + "369", + 1637921521914 + ], + [ + "1051", + "369", + 1637921521921 + ], + [ + "1052", + "369", + 1637921521930 + ], + [ + "1054", + "369", + 1637921521937 + ], + [ + "1055", + "369", + 1637921521945 + ], + [ + "1057", + "369", + 1637921521953 + ], + [ + "1059", + "369", + 1637921521961 + ], + [ + "1060", + "369", + 1637921521969 + ], + [ + "1064", + "369", + 1637921521978 + ], + [ + "1065", + "369", + 1637921521985 + ], + [ + "1067", + "369", + 1637921521993 + ], + [ + "1069", + "369", + 1637921522001 + ], + [ + "1072", + "369", + 1637921522009 + ], + [ + "1072", + "369", + 1637921522017 + ], + [ + "1076", + "369", + 1637921522025 + ], + [ + "1078", + "369", + 1637921522033 + ], + [ + "1079", + "369", + 1637921522041 + ], + [ + "1082", + "369", + 1637921522049 + ], + [ + "1084", + "369", + 1637921522057 + ], + [ + "1087", + "369", + 1637921522065 + ], + [ + "1089", + "369", + 1637921522073 + ], + [ + "1092", + "369", + 1637921522081 + ], + [ + "1095", + "369", + 1637921522089 + ], + [ + "1097", + "369", + 1637921522097 + ], + [ + "1100", + "369", + 1637921522105 + ], + [ + "1104", + "369", + 1637921522113 + ], + [ + "1104", + "369", + 1637921522121 + ], + [ + "1108", + "369", + 1637921522129 + ], + [ + "1109", + "369", + 1637921522137 + ], + [ + "1111", + "369", + 1637921522145 + ], + [ + "1114", + "369", + 1637921522153 + ], + [ + "1115", + "369", + 1637921522161 + ], + [ + "1116", + "369", + 1637921522169 + ], + [ + "1117", + "369", + 1637921522178 + ], + [ + "1119", + "369", + 1637921522185 + ], + [ + "1120", + "369", + 1637921522193 + ], + [ + "1121", + "369", + 1637921522201 + ], + [ + "1122", + "369", + 1637921522209 + ], + [ + "1124", + "369", + 1637921522217 + ], + [ + "1125", + "369", + 1637921522225 + ], + [ + "1126", + "369", + 1637921522233 + ], + [ + "1128", + "369", + 1637921522241 + ], + [ + "1128", + "369", + 1637921522249 + ], + [ + "1130", + "369", + 1637921522257 + ], + [ + "1131", + "369", + 1637921522265 + ], + [ + "1132", + "369", + 1637921522281 + ], + [ + "1134", + "369", + 1637921522289 + ], + [ + "1136", + "369", + 1637921522305 + ], + [ + "1138", + "369", + 1637921522321 + ], + [ + "1140", + "369", + 1637921522329 + ], + [ + "1141", + "369", + 1637921522337 + ], + [ + "1143", + "369", + 1637921522345 + ], + [ + "1144", + "369", + 1637921522353 + ], + [ + "1144", + "369", + 1637921522361 + ], + [ + "1146", + "369", + 1637921522369 + ], + [ + "1146", + "369", + 1637921522381 + ], + [ + "1147", + "369", + 1637921522385 + ], + [ + "1148", + "369", + 1637921522395 + ], + [ + "1148", + "369", + 1637921522401 + ], + [ + "1149", + "369", + 1637921522409 + ], + [ + "1150", + "369", + 1637921522417 + ], + [ + "1151", + "369", + 1637921522425 + ], + [ + "1152", + "369", + 1637921522433 + ], + [ + "1153", + "369", + 1637921522449 + ], + [ + "1155", + "369", + 1637921522457 + ], + [ + "1156", + "369", + 1637921522481 + ], + [ + "1156", + "369", + 1637921522513 + ], + [ + "1157", + "369", + 1637921522529 + ], + [ + "1158", + "369", + 1637921522537 + ], + [ + "1159", + "369", + 1637921522545 + ], + [ + "1160", + "369", + 1637921522561 + ], + [ + "1162", + "369", + 1637921522569 + ], + [ + "1164", + "369", + 1637921522609 + ], + [ + "1164", + "369", + 1637921522617 + ], + [ + "1165", + "369", + 1637921522633 + ], + [ + "1166", + "369", + 1637921522641 + ], + [ + "1167", + "369", + 1637921522649 + ], + [ + "1168", + "369", + 1637921522657 + ], + [ + "1170", + "369", + 1637921522665 + ], + [ + "1171", + "369", + 1637921522673 + ], + [ + "1172", + "369", + 1637921522681 + ], + [ + "1173", + "369", + 1637921522689 + ], + [ + "1174", + "369", + 1637921522697 + ], + [ + "1175", + "369", + 1637921522705 + ], + [ + "1176", + "369", + 1637921522753 + ], + [ + "1176", + "369", + 1637921522769 + ], + [ + "1177", + "369", + 1637921522777 + ], + [ + "1179", + "369", + 1637921522793 + ], + [ + "1180", + "369", + 1637921522809 + ], + [ + "1180", + "369", + 1637921522817 + ], + [ + "1181", + "369", + 1637921522825 + ], + [ + "1182", + "369", + 1637921522849 + ], + [ + "1183", + "369", + 1637921522873 + ], + [ + "1183", + "369", + 1637921522880 + ], + [ + "1184", + "369", + 1637921522897 + ], + [ + "1184", + "369", + 1637921522921 + ], + [ + "1185", + "369", + 1637921522945 + ], + [ + "1186", + "369", + 1637921522961 + ], + [ + "1188", + "369", + 1637921522985 + ], + [ + "1190", + "369", + 1637921522993 + ], + [ + "1192", + "369", + 1637921523001 + ], + [ + "1193", + "369", + 1637921523010 + ], + [ + "1196", + "369", + 1637921523017 + ], + [ + "1197", + "369", + 1637921523033 + ], + [ + "1199", + "369", + 1637921523049 + ], + [ + "1200", + "369", + 1637921523057 + ], + [ + "1200", + "369", + 1637921523065 + ], + [ + "1201", + "369", + 1637921523073 + ], + [ + "1202", + "369", + 1637921523081 + ], + [ + "1204", + "369", + 1637921523089 + ], + [ + "1204", + "369", + 1637921523097 + ], + [ + "1205", + "369", + 1637921523105 + ], + [ + "1207", + "369", + 1637921523113 + ], + [ + "1208", + "369", + 1637921523121 + ], + [ + "1208", + "369", + 1637921523145 + ], + [ + "1210", + "368", + 1637921523201 + ], + [ + "1211", + "368", + 1637921523249 + ], + [ + "1211", + "368", + 1637921523380 + ], + [ + "1211", + "368", + 1637921523481 + ] +] +// 晃动轨迹 +let sway_slide = [ //晃动 + [ + 0, + "160", + 1638111121463 + ], + [ + 1, + "160", + 1638111121467 + ], + [ + 2, + "160", + 1638111121486 + ], + [ + 3, + "160", + 1638111121498 + ], + [ + 3, + "159", + 1638111121499 + ], + [ + 4, + "159", + 1638111121511 + ], + [ + 4, + "159", + 1638111121520 + ], + [ + 5, + "159", + 1638111121523 + ], + [ + 6, + "159", + 1638111121532 + ], + [ + 7, + "159", + 1638111121538 + ], + [ + 8, + "159", + 1638111121547 + ], + [ + 8, + "159", + 1638111121551 + ], + [ + 9, + "159", + 1638111121555 + ], + [ + 9, + "158", + 1638111121558 + ], + [ + 10, + "158", + 1638111121564 + ], + [ + 11, + "158", + 1638111121570 + ], + [ + 11, + "157", + 1638111121572 + ], + [ + 12, + "157", + 1638111121589 + ], + [ + 12, + "157", + 1638111121644 + ], + [ + 13, + "157", + 1638111121677 + ], + [ + 14, + "157", + 1638111121714 + ], + [ + 14, + "157", + 1638111121715 + ], + [ + 15, + "157", + 1638111121719 + ], + [ + 16, + "157", + 1638111121732 + ], + [ + 16, + "156", + 1638111121735 + ], + [ + 16, + "156", + 1638111121737 + ], + [ + 17, + "156", + 1638111121741 + ], + [ + 17, + "155", + 1638111121745 + ], + [ + 18, + "155", + 1638111121758 + ], + [ + 19, + "155", + 1638111121765 + ], + [ + 20, + "155", + 1638111121782 + ], + [ + 19, + "155", + 1638111121903 + ], + [ + 18, + "155", + 1638111121916 + ], + [ + 17, + "155", + 1638111121925 + ], + [ + 16, + "155", + 1638111121931 + ], + [ + 16, + "155", + 1638111121939 + ], + [ + 15, + "155", + 1638111121947 + ], + [ + 14, + "155", + 1638111121953 + ], + [ + 13, + "155", + 1638111121970 + ], + [ + 12, + "155", + 1638111121975 + ], + [ + 12, + "155", + 1638111121983 + ], + [ + 12, + "156", + 1638111121994 + ], + [ + 11, + "156", + 1638111122009 + ], + [ + 10, + "156", + 1638111122013 + ], + [ + 9, + "157", + 1638111122039 + ], + [ + 8, + "157", + 1638111122053 + ], + [ + 8, + "157", + 1638111122059 + ], + [ + 7, + "157", + 1638111122074 + ], + [ + 7, + "157", + 1638111122078 + ], + [ + 6, + "157", + 1638111122079 + ], + [ + 5, + "157", + 1638111122092 + ], + [ + 4, + "157", + 1638111122123 + ], + [ + 4, + "158", + 1638111122128 + ], + [ + 4, + "158", + 1638111122165 + ], + [ + 3, + "158", + 1638111122240 + ], + [ + 2, + "158", + 1638111122255 + ], + [ + 2, + "159", + 1638111122298 + ], + [ + 1, + "159", + 1638111122337 + ], + [ + 0, + "159", + 1638111122438 + ], + [ + 0, + "160", + 1638111122444 + ], + [ + 0, + "160", + 1638111122489 + ], + [ + 0, + "160", + 1638111122858 + ] +] \ No newline at end of file diff --git a/jd_slide/jd_slide/main.py b/jd_slide/jd_slide/main.py new file mode 100644 index 0000000..46637b7 --- /dev/null +++ b/jd_slide/jd_slide/main.py @@ -0,0 +1,69 @@ +import requests,re,json,base64,ddddocr,execjs,time + +def get_image(): + url = 'https://iv.jd.com/slide/g.html' + params = { + 'appId':'1604ebb2287', + 'scene':'login', + 'product':'click-bind-suspend', + 'e':'QHIAPZR54JDJR3HFO24RNBFHOQ2GEJ5ANBMSD5NAD2X5RSIW5QRZUCQXXQTIKDH47BTS554AZOHML4LCG5ZDYXQVHY', + 'j':'', + 'lang':'zh_CN', + 'callback':'jsonp_029682545329833165', + } + header = { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36' + } + res = requests.get(url, headers=header,params=params).text + object_code = re.compile(r"\((?P.*)\)", re.S) + data_code = json.loads(object_code.search(res).group('data_code')) + challenge = data_code['challenge'] + backgroundImage = data_code['bg'] + sliderImage = data_code['patch'] + with open('img/bg.png', mode='wb') as f: + f.write(base64.b64decode(backgroundImage)) + with open('img/slider.png', mode='wb') as f: + f.write(base64.b64decode(sliderImage)) + return challenge +def get_distance(): + ocr = ddddocr.DdddOcr(det=False,ocr=False,show_ad=False) + f1 = open('img/bg.png', 'rb') + f2 = open('img/slider.png', 'rb') + result = ocr.slide_match(f2.read(),f1.read(),simple_target=True) + distance = result['target'][0] + distance = int(distance * 278 / 360 + 23) + return distance +def get_main(): + challenge = get_image() + distance = get_distance() + time.sleep(4) + with open('jd.js', 'r', encoding='utf-8') as f: + js = execjs.compile(f.read()) + d = js.call('generate_trace', distance) + url = 'https://iv.jd.com/slide/s.html' + params = { + "d": d, + "c": challenge, + "w": "278", + "appId": "1604ebb2287", + "scene": "login", + "product": "click-bind-suspend", + "e": "QHIAPZR54JDJR3HFO24RNBFHOQ2GEJ5ANBMSD5NAD2X5RSIW5QRZUCQXXQTIKDH47BTS554AZOHML4LCG5ZDYXQVHY", + "j": "", + "s": "6170118232277969400", + "o": "13334445555", + "o1": "0", + "u": "https://passport.jd.com/uc/login?ReturnUrl=https%3A%2F%2Forder.jd.com%2Fcenter%2Flist.action", + "lang": "zh_CN", + "callback": "jsonp_06060454087427964" + } + header = { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36' + } + res = requests.get(url, headers=header,params=params).text + object_code = re.compile(r"\((?P.*)\)", re.S) + data_code = json.loads(object_code.search(res).group('data_code')) + print(data_code) + +if __name__ == '__main__': + get_main() \ No newline at end of file