首先我们要查看相关的链接比如:
到这里我们已经看到了链接 请求参数 和 返回内容 开始写代码
# 首先我们先构建一下需要的参数 根据我的观察 参数的主要变化 在 "t" "sign" 和 "data"中的nkey urldata = { 'jsv': "2.5.1", 'appKey': 24815441, 't': tim, 'sign': sign, 'api': "mtop.relationrecommend.AliexpressRecommend.recommend", 'v': "1.0", 'type': "jsonp", 'dataType': "jsonp", 'callback': 'mtopjsonp10', 'data': '{"appId":18390,"params":"{\\"query\\":\\"' + str(nkey) + '\\",\\"userMemberSeq\\":\\"\\",\\"language\\":\\"es\\",\\"site\\":\\"esp\\",\\"shipToCountry\\":\\"US\\",\\"shipToCity\\":\\"\\",\\"clientType\\":\\"pc\\",\\"cookieId\\":\\"YRsUF5pqAkgCAbegKYZu6mi2\\",\\"statusOfUsingPrivacy\\":\\"\\"}"}', } # 链接是这样的 from urllib.parse import urlencode nurl = 'https://acs.aliexpress.com/h5/mtop.relationrecommend.aliexpressrecommend.recommend/1.0/?' + urlencode(urldata) # 好的 这个时候我们构建我们的请求头 我发现这个请求下 只要带 三个参数就可以 这里构建了两个还要带一个cookies Headers = { 'referer': 'https://es.aliexpress.com/', 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36' } # cookies 的构建 其中cookise 构建中 主要是 '_m_h5_tk' 和 '_m_h5_tk_enc' 参数 其他的请求一次 # 首页的 链接就可以获取 Cookies = { 'acs_usuc_t': 'x_csrf=__0k270ux3o4&acs_rt=f562c439078c43d2acbdfbd3b7b8e3a8', 'aep_usuc_f': 'site=esp&c_tp=EUR®ion=CN&b_locale=es_ES', 'ali_apache_id': '11.134.216.25.1591593362612.216173.7', 'intl_common_forever': 'heBSREitqKC8WPb/iKHwfcN7FsgWoV4+96wqRRzSa3vV7DZwrzDWMQ==', 'intl_locale': 'es_ES', 'xman_f': 'nUnPy5ggUBRUf2Tl0SgyHkKxkYHqoVwVihs99/cZ1eZPM7BsDol2HQYEpcDBMpfBmPEoCol19jx5d3EUm0jGXN/1KWZfKiDxCM6SaRLSOm9u2rR6qgXwhA==', 'xman_t': 'nYK387MYVfRBNgTcRS1WT2V8JRQaIv5dzZaJxIJP7TYK28++X6DxfH5ZszSYx8Xs', 'xman_us_f': 'x_locale=es_ES&x_l=1&x_c_chg=1&x_as_i={"aeuCID":"","cookieCacheEffectTime":1591593662622,"isCookieCache":"Y","ms":"0"}&acs_rt=f562c439078c43d2acbdfbd3b7b8e3a8', # 以上的cookies 是访问 requests.get('https://es.aliexpress.com/') 获取的 '_m_h5_tk': '52ba79e8346419e689a1ace28bdde23a_1591766715829', '_m_h5_tk_enc': '437fa68b6379b4bf35c01a03c0b1adca' } # 完是具备 开始请求 response = requests.request("POST", nurl, headers=Headers, cookies=Cookies) # 查看返回结果 print(response.text)好的主要的程序已经写完啦 接下来 获取相关的参数哦
# 主要参数就是那个 sign ,而这个sign 是js形成的 首先要找到这个sign 形成的js 代码段
我们已经找到了代码段 这个代码段 是静态的 copy 了下来 保存成了Crack.js 文件
// const url = require("url"); function getkey(key,token){ var o = '//acs.aliexpress.com/h5/mtop.relationrecommend.aliexpressrecommend.recommend/1.0/', // data = '{"appId":18390,"params":"{\"query\":\"2\",\"userMemberSeq\":\"\",\"language\":\"es\",\"site\":\"esp\",\"shipToCountry\":\"US\",\"shipToCity\":\"\",\"clientType\":\"pc\",\"cookieId\":\"YRsUF5pqAkgCAbegKYZu6mi2\",\"statusOfUsingPrivacy\":\"\"}"}', // data = {"appId":18390,"params":"{\"query\":\"8000w\",\"userMemberSeq\":\"\",\"language\":\"es\",\"site\":\"esp\",\"shipToCountry\":\"US\",\"shipToCity\":\"\",\"clientType\":\"pc\",\"cookieId\":\"YRsUF5pqAkgCAbegKYZu6mi2\",\"statusOfUsingPrivacy\":\"\"}"}, data = "{\"appId\":18390,\"params\":\"{\\\"query\\\":\\\"" + key + "\\\",\\\"userMemberSeq\\\":\\\"\\\",\\\"language\\\":\\\"es\\\",\\\"site\\\":\\\"esp\\\",\\\"shipToCountry\\\":\\\"US\\\",\\\"shipToCity\\\":\\\"\\\",\\\"clientType\\\":\\\"pc\\\",\\\"cookieId\\\":\\\"YRsUF5pqAkgCAbegKYZu6mi2\\\",\\\"statusOfUsingPrivacy\\\":\\\"\\\"}\"}", a = 24815441, s = (new Date).getTime(), // s = 1591249873585, // e = '"c5ad33fbd21234fa0556e4be4d61bc9e&'+ s +'&24815441&{"appId":18390,"params":"{"query":"8000","userMemberSeq":"","language":"es","site":"esp","shipToCountry":"US","shipToCity":"","clientType":"pc","cookieId":"YRsUF5pqAkgCAbegKYZu6mi2","statusOfUsingPrivacy":""}"}"' // e = 'c5ad33fbd21234fa0556e4be4d61bc9e&1591241438839&24815441&{"appId":18390,"params":"{\"query\":\"8000w\",\"userMemberSeq\":\"\",\"language\":\"es\",\"site\":\"esp\",\"shipToCountry\":\"US\",\"shipToCity\":\"\",\"clientType\":\"pc\",\"cookieId\":\"YRsUF5pqAkgCAbegKYZu6mi2\",\"statusOfUsingPrivacy\":\"\"}"}' // e = '5a39ba523aa53eeb829192f9a84ff118&'+ String(s) +'&24815441&{"appId":18390,"params":"{"query\":\"2\",\"userMemberSeq\":\"\",\"language\":\"es\",\"site\":\"esp\",\"shipToCountry\":\"US\",\"shipToCity\":\"\",\"clientType\":\"pc\",\"cookieId\":\"YRsUF5pqAkgCAbegKYZu6mi2\",\"statusOfUsingPrivacy\":\"\"}"}', // t = 'c5ad33fbd21234fa0556e4be4d61bc9e&1591241438839&24815441&{"appId":18390,"params":"{\"query\":\"8000w\",\"userMemberSeq\":\"\",\"language\":\"es\",\"site\":\"esp\",\"shipToCountry\":\"US\",\"shipToCity\":\"\",\"clientType\":\"pc\",\"cookieId\":\"YRsUF5pqAkgCAbegKYZu6mi2\",\"statusOfUsingPrivacy\":\"\"}"}' c = function(e) { function t(e, t) { return e << t | e >>> 32 - t } function n(e, t) { var n, i, r, o, a; return r = 2147483648 & e, o = 2147483648 & t, a = (1073741823 & e) + (1073741823 & t), (n = 1073741824 & e) & (i = 1073741824 & t) ? 2147483648 ^ a ^ r ^ o : n | i ? 1073741824 & a ? 3221225472 ^ a ^ r ^ o : 1073741824 ^ a ^ r ^ o : a ^ r ^ o } function i(e, i, r, o, a, s, c) { return e = n(e, n(n(function(e, t, n) { return e & t | ~e & n }(i, r, o), a), c)), n(t(e, s), i) } function r(e, i, r, o, a, s, c) { return e = n(e, n(n(function(e, t, n) { return e & n | t & ~n }(i, r, o), a), c)), n(t(e, s), i) } function o(e, i, r, o, a, s, c) { return e = n(e, n(n(function(e, t, n) { return e ^ t ^ n }(i, r, o), a), c)), n(t(e, s), i) } function a(e, i, r, o, a, s, c) { return e = n(e, n(n(function(e, t, n) { return t ^ (e | ~n) }(i, r, o), a), c)), n(t(e, s), i) } function s(e) { var t, n = "", i = ""; for (t = 0; 3 >= t; t++) n += (i = "0" + (e >>> 8 * t & 255).toString(16)).substr(i.length - 2, 2); return n } var c, l, u, d, p, h, f, m, g, v; for (v = function(e) { for (var t, n = e.length, i = n + 8, r = 16 * ((i - i % 64) / 64 + 1), o = new Array(r - 1), a = 0, s = 0; n > s;) a = s % 4 * 8, o[t = (s - s % 4) / 4] = o[t] | e.charCodeAt(s) << a, s++; return a = s % 4 * 8, o[t = (s - s % 4) / 4] = o[t] | 128 << a, o[r - 2] = n << 3, o[r - 1] = n >>> 29, o }(e = function(e) { e = e.replace(/\r\n/g, "\n"); for (var t = "", n = 0; n < e.length; n++) { var i = e.charCodeAt(n); 128 > i ? t += String.fromCharCode(i) : i > 127 && 2048 > i ? (t += String.fromCharCode(i >> 6 | 192), t += String.fromCharCode(63 & i | 128)) : (t += String.fromCharCode(i >> 12 | 224), t += String.fromCharCode(i >> 6 & 63 | 128), t += String.fromCharCode(63 & i | 128)) } return t }(e)), h = 1732584193, f = 4023233417, m = 2562383102, g = 271733878, c = 0; c < v.length; c += 16) l = h, u = f, d = m, p = g, h = i(h, f, m, g, v[c + 0], 7, 3614090360), g = i(g, h, f, m, v[c + 1], 12, 3905402710), m = i(m, g, h, f, v[c + 2], 17, 606105819), f = i(f, m, g, h, v[c + 3], 22, 3250441966), h = i(h, f, m, g, v[c + 4], 7, 4118548399), g = i(g, h, f, m, v[c + 5], 12, 1200080426), m = i(m, g, h, f, v[c + 6], 17, 2821735955), f = i(f, m, g, h, v[c + 7], 22, 4249261313), h = i(h, f, m, g, v[c + 8], 7, 1770035416), g = i(g, h, f, m, v[c + 9], 12, 2336552879), m = i(m, g, h, f, v[c + 10], 17, 4294925233), f = i(f, m, g, h, v[c + 11], 22, 2304563134), h = i(h, f, m, g, v[c + 12], 7, 1804603682), g = i(g, h, f, m, v[c + 13], 12, 4254626195), m = i(m, g, h, f, v[c + 14], 17, 2792965006), h = r(h, f = i(f, m, g, h, v[c + 15], 22, 1236535329), m, g, v[c + 1], 5, 4129170786), g = r(g, h, f, m, v[c + 6], 9, 3225465664), m = r(m, g, h, f, v[c + 11], 14, 643717713), f = r(f, m, g, h, v[c + 0], 20, 3921069994), h = r(h, f, m, g, v[c + 5], 5, 3593408605), g = r(g, h, f, m, v[c + 10], 9, 38016083), m = r(m, g, h, f, v[c + 15], 14, 3634488961), f = r(f, m, g, h, v[c + 4], 20, 3889429448), h = r(h, f, m, g, v[c + 9], 5, 568446438), g = r(g, h, f, m, v[c + 14], 9, 3275163606), m = r(m, g, h, f, v[c + 3], 14, 4107603335), f = r(f, m, g, h, v[c + 8], 20, 1163531501), h = r(h, f, m, g, v[c + 13], 5, 2850285829), g = r(g, h, f, m, v[c + 2], 9, 4243563512), m = r(m, g, h, f, v[c + 7], 14, 1735328473), h = o(h, f = r(f, m, g, h, v[c + 12], 20, 2368359562), m, g, v[c + 5], 4, 4294588738), g = o(g, h, f, m, v[c + 8], 11, 2272392833), m = o(m, g, h, f, v[c + 11], 16, 1839030562), f = o(f, m, g, h, v[c + 14], 23, 4259657740), h = o(h, f, m, g, v[c + 1], 4, 2763975236), g = o(g, h, f, m, v[c + 4], 11, 1272893353), m = o(m, g, h, f, v[c + 7], 16, 4139469664), f = o(f, m, g, h, v[c + 10], 23, 3200236656), h = o(h, f, m, g, v[c + 13], 4, 681279174), g = o(g, h, f, m, v[c + 0], 11, 3936430074), m = o(m, g, h, f, v[c + 3], 16, 3572445317), f = o(f, m, g, h, v[c + 6], 23, 76029189), h = o(h, f, m, g, v[c + 9], 4, 3654602809), g = o(g, h, f, m, v[c + 12], 11, 3873151461), m = o(m, g, h, f, v[c + 15], 16, 530742520), h = a(h, f = o(f, m, g, h, v[c + 2], 23, 3299628645), m, g, v[c + 0], 6, 4096336452), g = a(g, h, f, m, v[c + 7], 10, 1126891415), m = a(m, g, h, f, v[c + 14], 15, 2878612391), f = a(f, m, g, h, v[c + 5], 21, 4237533241), h = a(h, f, m, g, v[c + 12], 6, 1700485571), g = a(g, h, f, m, v[c + 3], 10, 2399980690), m = a(m, g, h, f, v[c + 10], 15, 4293915773), f = a(f, m, g, h, v[c + 1], 21, 2240044497), h = a(h, f, m, g, v[c + 8], 6, 1873313359), g = a(g, h, f, m, v[c + 15], 10, 4264355552), m = a(m, g, h, f, v[c + 6], 15, 2734768916), f = a(f, m, g, h, v[c + 13], 21, 1309151649), h = a(h, f, m, g, v[c + 4], 6, 4149444226), g = a(g, h, f, m, v[c + 11], 10, 3174756917), m = a(m, g, h, f, v[c + 2], 15, 718787259), f = a(f, m, g, h, v[c + 9], 21, 3951481745), h = n(h, l), f = n(f, u), m = n(m, d), g = n(g, p); console.log(h,f,m,g) return (s(h) + s(f) + s(m) + s(g)).toLowerCase() // 5a39ba523aa53eeb829192f9a84ff118 // c5ad33fbd21234fa0556e4be4d61bc9e // ab7c0fd1d18cc84cb31bee8f88f1269f // token }(token + "&" + s + "&" + a + "&" + data), l = { jsv: "2.5.1", appKey: a, t: s, sign: c }, u = { data: data, ua: 'ua' }; console.log(l); return l // urlen = url.parse(data) // console.log(urlen); }完善我们的代码:
# 读取js 文件 with open('Crack.js', 'r') as f: jsx = f.read() import execjs ctx = execjs.compile(jsx) try: signdic = ctx.call('getkey', str(nkey), '52ba79e8346419e689a1ace28bdde23a') except Exception as EX: print('Error:', repr(EX)) # {'jsv': '2.5.1', 'appKey': 24815441, 't': 1591256639545, 'sign': '38f13f6014daddc17e0388d227a2c847'} tim = signdic['t'] sign = signdic['sign'] #而这个的密钥 52ba79e8346419e689a1ace28bdde23a 我也不知道什么 最后我在cookies 中发现了它 #可以先用我这个示例中的先发一次请求 会返回这个的cookise和结果 Cookies : {'_m_h5_tk': '253ddddd57eed895a945c1e2658b9c7b_1593685254159', '_m_h5_tk_enc': '0cb269b96c1ae93d9c1dbc53670a7a79'} dajson : {'api': 'mtop.relationrecommend.aliexpressrecommend.recommend', 'data': {}, 'ret': ['FAIL_SYS_TOKEN_EXOIRED::令牌过期'], 'v': '1.0'} # 其中这个cookise 中会有 '_m_h5_tk' 和 '_m_h5_tk_enc' 把这个cookies 和 首页请求的cookise 相结合 # 然后提出 '_m_h5_tk': '253ddddd57eed895a945c1e2658b9c7b_1593685254159', 中 # 253ddddd57eed895a945c1e2658b9c7b 代替 52ba79e8346419e689a1ace28bdde23a 操作出 tim 和 sign完是具备 开始干活!
整体代码
import requests from urllib.parse import urlencode import execjs import time with open('Crack.js', 'r') as f: jsx = f.read() def T_R(nkey): # nkey = 'nb' ctx = execjs.compile(jsx) try: signdic = ctx.call('getkey', str( nkey), '253ddddd57eed895a945c1e2658b9c7b') except Exception as EX: print('Error:', repr(EX)) # {'jsv': '2.5.1', 'appKey': 24815441, 't': 1591256639545, 'sign': '38f13f6014daddc17e0388d227a2c847'} print(signdic) tim = signdic['t'] sign = signdic['sign'] urldata = { 'jsv': "2.5.1", 'appKey': 24815441, 't': tim, 'sign': sign, 'api': "mtop.relationrecommend.AliexpressRecommend.recommend", 'v': "1.0", 'type': "jsonp", 'dataType': "jsonp", 'callback': 'mtopjsonp10', 'data': '{"appId":18390,"params":"{\\"query\\":\\"' + str(nkey) + '\\",\\"userMemberSeq\\":\\"\\",\\"language\\":\\"es\\",\\"site\\":\\"esp\\",\\"shipToCountry\\":\\"US\\",\\"shipToCity\\":\\"\\",\\"clientType\\":\\"pc\\",\\"cookieId\\":\\"YRsUF5pqAkgCAbegKYZu6mi2\\",\\"statusOfUsingPrivacy\\":\\"\\"}"}', } nurl = 'https://acs.aliexpress.com/h5/mtop.relationrecommend.aliexpressrecommend.recommend/1.0/?' + \ urlencode(urldata) Headers = { 'referer': 'https://es.aliexpress.com/', 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36' } Cookies = { 'acs_usuc_t': 'x_csrf=__0k270ux3o4&acs_rt=f562c439078c43d2acbdfbd3b7b8e3a8', 'aep_usuc_f': 'site=esp&c_tp=EUR®ion=CN&b_locale=es_ES', 'ali_apache_id': '11.134.216.25.1591593362612.216173.7', 'intl_common_forever': 'heBSREitqKC8WPb/iKHwfcN7FsgWoV4+96wqRRzSa3vV7DZwrzDWMQ==', 'intl_locale': 'es_ES', 'xman_f': 'nUnPy5ggUBRUf2Tl0SgyHkKxkYHqoVwVihs99/cZ1eZPM7BsDol2HQYEpcDBMpfBmPEoCol19jx5d3EUm0jGXN/1KWZfKiDxCM6SaRLSOm9u2rR6qgXwhA==', 'xman_t': 'nYK387MYVfRBNgTcRS1WT2V8JRQaIv5dzZaJxIJP7TYK28++X6DxfH5ZszSYx8Xs', 'xman_us_f': 'x_locale=es_ES&x_l=1&x_c_chg=1&x_as_i={"aeuCID":"","cookieCacheEffectTime":1591593662622,"isCookieCache":"Y","ms":"0"}&acs_rt=f562c439078c43d2acbdfbd3b7b8e3a8', '_m_h5_tk': '253ddddd57eed895a945c1e2658b9c7b_1593685254159', '_m_h5_tk_enc': '0cb269b96c1ae93d9c1dbc53670a7a79', } response = requests.request("POST", nurl, headers=Headers, cookies=Cookies) return response.text