3
0

PYCCS_cookies.py 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. # -*- coding: utf-8 -*-
  2. """
  3. Created on 2023-09-08
  4. ---------
  5. @summary: 进入前检查浏览器 PYCCS
  6. ---------
  7. @author: Lzz
  8. """
  9. import re
  10. import execjs
  11. import requests
  12. def get_ck_by_js(*args):
  13. ex_js = '''
  14. function get_ck(a,b,c) {
  15. var x08c924 = parseInt(a);
  16. x08c924 = x08c924 * parseInt(b);
  17. x08c924 = x08c924 + parseInt(c);
  18. x08c924 = (x08c924 * 0x3 + 0x7);
  19. if (x08c924 < 0x7b)
  20. x08c924 = x08c924 + 0x929;
  21. if (x08c924 > 0x929)
  22. x08c924 = Math['floor'](x08c924 / 0x7b);
  23. return x08c924
  24. }
  25. '''
  26. a, b, c = args
  27. ctx = execjs.compile(ex_js)
  28. return ctx.call('get_ck', a, b, c)
  29. def get_ck_by_py(*args):
  30. a, b, c = args
  31. # 将输入转换为整数
  32. x08c924 = int(a)
  33. x08c924 *= int(b)
  34. x08c924 += int(c)
  35. # 执行运算
  36. x08c924 = x08c924 * 0x3 + 0x7 # 0x3是十六进制的3,0x7是十六进制的7
  37. # 条件判断
  38. if x08c924 < 0x7b: # 0x7b是十六进制的123
  39. x08c924 += 0x929 # 0x929是十六进制的2345
  40. if x08c924 > 0x929:
  41. x08c924 = x08c924 // 0x7b # 使用整数除法模拟Math.floor
  42. return x08c924
  43. def get_ck(*args, platform='py'):
  44. if platform == 'js':
  45. return get_ck_by_js(*args)
  46. else:
  47. return get_ck_by_py(*args)
  48. def find_pyccs(url, headers, proxies=None, platform=None):
  49. cookies = {}
  50. exception = None
  51. request_params = dict(headers=headers, timeout=60, verify=False)
  52. for i in range(3):
  53. with requests.Session() as session:
  54. session.proxies = proxies
  55. try:
  56. res = session.get(url, **request_params)
  57. pm_data = "".join(re.findall('\|function\|(.*?)\|version\|',res.text,re.S)).split('|')
  58. answer = get_ck(pm_data[1], pm_data[3], pm_data[-1], platform=platform)
  59. data = {"answer": f"{answer}"}
  60. url2 = url.split('?')[0]
  61. resp = session.post(url2, data=data, **request_params)
  62. cookies = session.cookies.get_dict()
  63. if re.findall('\|function\|(.*?)\|version\|', resp.text, re.S):
  64. print(f"请求解析异常!重试 {i + 1} 次")
  65. else:
  66. return cookies
  67. except Exception as e:
  68. print("cookies_PYCCS 获取失败!")
  69. exception = e
  70. break
  71. return cookies
  72. get_PYCCS_ck = find_pyccs
  73. if __name__ == "__main__":
  74. assert get_ck_by_py(1, 2, 3) == get_ck_by_js(1, 2, 3)