3
0
lizongze 2 жил өмнө
parent
commit
bee305a817

+ 130 - 0
FworkSpider/untils/ali_slide_verify.py

@@ -0,0 +1,130 @@
+# -*- coding: utf-8 -*-
+"""
+Created on 2023-08-17 
+---------
+@summary: 阿里滑块验证 acw_sc__v3 acw_sc__v2
+---------
+@author: Lzz
+"""
+import sys
+from selenium.webdriver import ActionChains
+sys.path.append('/app/spiders/sword_feapder/FworkSpider')
+from feapder.utils.webdriver import WebDriver
+from feapder.utils.log import log
+from untils.cookie_pool import PageCookiePool
+import re
+import execjs
+
+
+
+def get_acw_sc_v2(html):
+    try:
+        arg1 = "".join(re.findall("arg1='(.*?)'", html))
+        if arg1:
+            js_script = '''
+                function getAcw_sc__v2(obt_arg1) {
+                    String["prototype"]["hexXor"] = function (_0x4e08d8) {
+                        var _0x5a5d3b = '';
+                        for (var _0xe89588 = 0x0; _0xe89588 < this["length"] && _0xe89588 < _0x4e08d8["length"]; _0xe89588 += 2) {
+                            var _0x401af1 = parseInt(this["slice"](_0xe89588, _0xe89588 + 2), 16);
+                            var _0x105f59 = parseInt(_0x4e08d8["slice"](_0xe89588, _0xe89588 + 2), 16);
+                            var _0x189e2c = (_0x401af1 ^ _0x105f59)["toString"](16);
+                            if (_0x189e2c["length"] == 1) {
+                                _0x189e2c = '0' + _0x189e2c;
+                            }
+                            _0x5a5d3b += _0x189e2c;
+                        }
+                        return _0x5a5d3b;
+                    };
+                    String["prototype"]["unsbox"] = function () {
+                        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];
+                        var _0x4da0dc = [];
+                        var _0x12605e = '';
+                        for (var _0x20a7bf = 0x0; _0x20a7bf < this["length"]; _0x20a7bf++) {
+                            var _0x385ee3 = this[_0x20a7bf];
+                            for (var _0x217721 = 0; _0x217721 < _0x4b082b["length"]; _0x217721++) {
+                                if (_0x4b082b[_0x217721] == _0x20a7bf + 1) {
+                                    _0x4da0dc[_0x217721] = _0x385ee3;
+                                }
+                            }
+                        }
+                        _0x12605e = _0x4da0dc["join"]('');
+                        return _0x12605e;
+                    };
+    
+                    var _0x5e8b26 = "3000176000856006061501533003690027800375";
+                    // var arg1 = "0A5F01F50F9BC66FB28038F18B99B7B10CFF4667"
+                    var arg1 = obt_arg1
+                    var _0x23a392 = arg1["unsbox"]();
+                    arg2 = _0x23a392["hexXor"](_0x5e8b26);
+                    return arg2
+                }
+            '''
+            ctx = execjs.compile(js_script)
+            arg2 = ctx.call('getAcw_sc__v2', arg1)
+            return {"acw_sc__v2": arg2}
+        else:
+            return {}
+    except:
+        return {}
+
+
+class WebCookiePool(PageCookiePool):
+    def __init__(self, redis_key, page_url=None, proxies=None, **kwargs):
+        super(WebCookiePool, self).__init__(redis_key, page_url=None,
+                                           min_cookies=10000, must_contained_keys=(), keep_alive=False, **kwargs)
+        self.page_url = page_url
+        self.proxies = proxies
+        self._kwargs = kwargs
+        self._kwargs.setdefault("load_images", False)
+        self._kwargs.setdefault("headless", True)
+        self._kwargs.setdefault("usages_local_driver", True)  # 是否加载本地驱动
+        # self._kwargs.setdefault("executable_path", "D:\\geckodriver.exe")
+        self._kwargs.setdefault("driver_type", "FIREFOX")
+        self._kwargs.setdefault("proxy", proxies)
+
+
+    def create_cookie(self):
+
+        with WebDriver(**self._kwargs) as driver_pool:
+            import time
+            try:
+                cookies = {}
+                js = "return navigator.userAgent"
+                driver_pool.execute_script(js)
+                driver_pool.get(self.page_url)
+                time.sleep(5)
+
+                arg2 = get_acw_sc_v2(driver_pool.page_source)
+                if arg2:
+                    cookies.update(arg2)
+
+                for i in range(3):
+                    try:
+                        slider = driver_pool.find_element_by_xpath("//span[contains(@class, 'nc_iconfont btn_slide')]")
+                        if slider.is_displayed():
+                            ActionChains(driver_pool).click_and_hold(on_element=slider).perform()
+                            ActionChains(driver_pool).move_by_offset(xoffset=252, yoffset=0).perform()
+                            ActionChains(driver_pool).pause(1).release().perform()
+
+                            cookies.update(driver_pool.cookies)
+                    except Exception as e:
+                        log.info(e)
+                    time.sleep(2)
+
+                    if 'nc_iconfont btn_slide' in driver_pool.page_source:
+                        continue
+                    else:
+                        break
+
+                return cookies
+            except Exception as e:
+                log.error(f"获取cookie失败,{e}")
+
+
+# if __name__ == '__main__':
+#     cookie_pool =WebCookiePool(redis_key='gdcookie',page_url="https://sourcing.lecaiyun.com/luban/bidding/newest?tradeModel=BIDDING")
+#     cookies = cookie_pool.get_cookie()
+#     log.debug(cookies)
+
+