ali_slide_verify.py 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. # -*- coding: utf-8 -*-
  2. """
  3. Created on 2023-08-17
  4. ---------
  5. @summary: 阿里滑块验证 acw_sc__v3 acw_sc__v2
  6. ---------
  7. @author: Lzz
  8. """
  9. import sys
  10. from selenium.webdriver import ActionChains
  11. sys.path.append('/app/spiders/sword_feapder/FworkSpider')
  12. from feapder.utils.webdriver import WebDriver
  13. from feapder.utils.log import log
  14. from untils.cookie_pool import PageCookiePool
  15. import re
  16. import execjs
  17. def get_acw_sc_v2(html):
  18. try:
  19. arg1 = "".join(re.findall("arg1='(.*?)'", html))
  20. if arg1:
  21. js_script = '''
  22. function getAcw_sc__v2(obt_arg1) {
  23. String["prototype"]["hexXor"] = function (_0x4e08d8) {
  24. var _0x5a5d3b = '';
  25. for (var _0xe89588 = 0x0; _0xe89588 < this["length"] && _0xe89588 < _0x4e08d8["length"]; _0xe89588 += 2) {
  26. var _0x401af1 = parseInt(this["slice"](_0xe89588, _0xe89588 + 2), 16);
  27. var _0x105f59 = parseInt(_0x4e08d8["slice"](_0xe89588, _0xe89588 + 2), 16);
  28. var _0x189e2c = (_0x401af1 ^ _0x105f59)["toString"](16);
  29. if (_0x189e2c["length"] == 1) {
  30. _0x189e2c = '0' + _0x189e2c;
  31. }
  32. _0x5a5d3b += _0x189e2c;
  33. }
  34. return _0x5a5d3b;
  35. };
  36. String["prototype"]["unsbox"] = function () {
  37. var _0x4b082b = [15, 35,29, 24, 33, 16, 1, 38, 10, 9, 19, 31, 40, 27, 22, 23, 25, 13, 6, 11, 39, 18, 20, 8, 14, 21, 32, 26, 2, 30, 7, 4, 17, 5, 3, 28, 34, 37, 12, 36];
  38. var _0x4da0dc = [];
  39. var _0x12605e = '';
  40. for (var _0x20a7bf = 0x0; _0x20a7bf < this["length"]; _0x20a7bf++) {
  41. var _0x385ee3 = this[_0x20a7bf];
  42. for (var _0x217721 = 0; _0x217721 < _0x4b082b["length"]; _0x217721++) {
  43. if (_0x4b082b[_0x217721] == _0x20a7bf + 1) {
  44. _0x4da0dc[_0x217721] = _0x385ee3;
  45. }
  46. }
  47. }
  48. _0x12605e = _0x4da0dc["join"]('');
  49. return _0x12605e;
  50. };
  51. var _0x5e8b26 = "3000176000856006061501533003690027800375";
  52. // var arg1 = "0A5F01F50F9BC66FB28038F18B99B7B10CFF4667"
  53. var arg1 = obt_arg1
  54. var _0x23a392 = arg1["unsbox"]();
  55. arg2 = _0x23a392["hexXor"](_0x5e8b26);
  56. return arg2
  57. }
  58. '''
  59. ctx = execjs.compile(js_script)
  60. arg2 = ctx.call('getAcw_sc__v2', arg1)
  61. return {"acw_sc__v2": arg2}
  62. else:
  63. return {}
  64. except:
  65. return {}
  66. class WebCookiePool(PageCookiePool):
  67. def __init__(self, redis_key, page_url=None, proxies=None, **kwargs):
  68. super(WebCookiePool, self).__init__(redis_key, page_url=None,
  69. min_cookies=10000, must_contained_keys=(), keep_alive=False, **kwargs)
  70. self.page_url = page_url
  71. self.proxies = proxies
  72. self._kwargs = kwargs
  73. self._kwargs.setdefault("load_images", False)
  74. self._kwargs.setdefault("headless", True)
  75. self._kwargs.setdefault("usages_local_driver", True) # 是否加载本地驱动
  76. # self._kwargs.setdefault("executable_path", "D:\\geckodriver.exe")
  77. self._kwargs.setdefault("driver_type", "FIREFOX")
  78. self._kwargs.setdefault("proxy", proxies)
  79. def create_cookie(self):
  80. with WebDriver(**self._kwargs) as driver_pool:
  81. import time
  82. try:
  83. cookies = {}
  84. js = "return navigator.userAgent"
  85. driver_pool.execute_script(js)
  86. driver_pool.get(self.page_url)
  87. time.sleep(5)
  88. arg2 = get_acw_sc_v2(driver_pool.page_source)
  89. if arg2:
  90. cookies.update(arg2)
  91. for i in range(3):
  92. try:
  93. slider = driver_pool.find_element_by_xpath("//span[contains(@class, 'nc_iconfont btn_slide')]")
  94. if slider.is_displayed():
  95. ActionChains(driver_pool).click_and_hold(on_element=slider).perform()
  96. ActionChains(driver_pool).move_by_offset(xoffset=252, yoffset=0).perform()
  97. ActionChains(driver_pool).pause(1).release().perform()
  98. cookies.update(driver_pool.cookies)
  99. except Exception as e:
  100. log.info(e)
  101. time.sleep(2)
  102. if 'nc_iconfont btn_slide' in driver_pool.page_source:
  103. continue
  104. else:
  105. break
  106. return cookies
  107. except Exception as e:
  108. log.error(f"获取cookie失败,{e}")
  109. # if __name__ == '__main__':
  110. # cookie_pool =WebCookiePool(redis_key='gdcookie',page_url="https://sourcing.lecaiyun.com/luban/bidding/newest?tradeModel=BIDDING")
  111. # cookies = cookie_pool.get_cookie()
  112. # log.debug(cookies)