栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python爬虫系列之得物最新滑块sessionid算法

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python爬虫系列之得物最新滑块sessionid算法

Python爬虫系列之得物最新滑块sessionid算法 如有疑问> 点击这里与我交流 < 微信请扫描下方二维码

代码仅供学习交流,请勿用于非法用途

# -*- coding:utf-8 -*-
import requests
import execjs
import hashlib
import json
import cv2
import os
import random
from selenium import webdriver
import configparser
import base64
import numpy as np

# ----------- 浏览器模块 -----------
options = webdriver.ChromeOptions()
options.add_argument("--headless")
options.add_argument("log-level=2")
# ----------- 配置模块 -----------
cf = configparser.ConfigParser()
try:
    cf.read(os.getcwd() + "/conf.ini", encoding="utf-8-sig")
except Exception as e:
    print("程序目录下不存在conf.ini配置文件~")
    exit(0)


def getConf(sec, key):
    try:
        return cf.get(sec, key)
    except Exception as e:
        print(e)
        print("未得到以下配置:" + sec + " - " + key)
        exit(0)


chromeDriverPath = getConf("app-sys", "chromeDriverPath")

js = '''
'''

ctx = execjs.compile(js)


def decrypt(resp, a, c):
    '''
    解密函数
    :param resp:
    :param a:
    :param c:
    :return:
    '''
    return ctx.call("decrypt", resp, a, c)


def encrypt(params, method):
    '''
    加密函数
    :param params:
    :param method:
    :return:
    '''
    return ctx.call("encrypt", params, method)


def getSignalBrowser():
    try:
        options = webdriver.ChromeOptions()
        options.add_argument("--headless")
        options.add_argument("log-level=2")
        browser = webdriver.Chrome(chrome_options=options,
                                   executable_path=chromeDriverPath)
        return browser
    except Exception as e:
        pass


def quitSignalBrowser(browser):
    try:
        browser.close()
    except Exception as e:
        pass
    try:
        browser.quit()
    except Exception as e:
        pass


def getHash(s):
    m = hashlib.md5()
    m.update(s.encode("utf-8"))
    return m.hexdigest()


def getSign(param, secretKey):
    return getHash(signStr)


def getDEndata(sessionID, shumeiId, sk):
    browser = getSignalBrowser()
    try:
        js = '''
        '''
        res = browser.execute_script(js)
        quitSignalBrowser(browser)
        return res
    except Exception as e:
        quitSignalBrowser(browser)


def getDEngjData(shumeiId, sessionID, sk, width, x, xys):
    browser = getSignalBrowser()
    try:
        js = '''
        '''
        res = browser.execute_script(js)
        quitSignalBrowser(browser)
        return res
    except Exception as e:
        quitSignalBrowser(browser)

def getCaptcha(sessionID, shumeiId, sk):
    url = "https://app.dewu.com/api/v1/h5/risk-stone-captcha/captcha/call"
    data = getDEndata(sessionID, )
    resp = requests.post(url, data=json.dumps(data), timeout=20, headers=headers)
    res = resp.json()
    return {"target": res['data']['image'].replace("data:image/png;base64,", ""), "background": res['data']['bgImage'].replace("data:image/png;base64,", "")}

def base64_cv2(base64_str):
    image_str = base64.b64decode(base64_str)
    str_array = np.fromstring(image_str, np.uint8)
    cv2_image = cv2.imdecode(str_array, cv2.IMREAD_COLOR)
    return cv2_image

def identify_gap(captcha):
    # 读取背景图片和缺口图片
    bg_img = base64_cv2(captcha['background'])  # 背景图片
    tp_img = base64_cv2(captcha['target'])  # 缺口图片
    bg_edge = cv2.Canny(bg_img, 100, 200)
    tp_edge = cv2.Canny(tp_img, 100, 200)
    tp_pic = cv2.cvtColor(tp_edge, cv2.COLOR_GRAY2RGB)
    # 缺口匹配
    res = cv2.matchTemplate(bg_pic, tp_pic, cv2.TM_CCOEFF_NORMED)
    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
    # 返回缺口的X坐标
    return tl[0]


def getXys(captcha):
    qkxm= identify_gap(captcha)
    y = 757
    xyList = []
    currentX = qkwm
    xyList.append()
        
    return "".join(xyList), qkx, bgw


def passCaptcha(shumeiId, sessionID, sk):
    # 获取滑块
    captcha = getCaptcha(sessionID, shumeiId, sk)
    print("获取验证码-------------------------------------------------------------")
    print(captcha)
    print("获取验证码-------------------------------------------------------------")
    # 获取参数
    xys, x, width = getXys(captcha)
    print("获取参数--------------------------------------------------------")
    print(xys, x, width)
    print("获取参数--------------------------------------------------------")
    data = getDEngjData(shumeiId, sessionID, sk, width, x, xys)
    resp = requests.post(url, data=json.dumps(data), timeout=20, headers=headers)
    print("请求结束")
    print(resp.status_code)
    print(resp.json())


if __name__ == '__main__':
    passCaptcha(shumeiId, sessionID, sk)

   ,
附运行截图


如有疑问> 点击这里与我交流 <
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/757007.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号