machuhai 发表于 2024-9-14 11:16

python同花顺i问财处理及获取hexin-v值

本帖最后由 machuhai 于 2024-9-14 11:19 编辑

这是自用的程序,如有不妥请联系我删除
GUI界面是用吾爱大神wxpython可视化编辑器写的,简直爱不释手。
使用程序要先获取cookie,看图

问财与程序功能对应



python源码,需要第三方库
wx库
pip install wxPython
requests库
pip install requests
execjs库
pip install pyexecjs
# -*- coding:utf-8 -*-
import wx
import json
import requests,re
import execjs
class Frame(wx.Frame):
    def __init__(self):
      wx.Frame.__init__(self, None, title='i问财', size=(805, 662),name='frame',style=wx.DEFAULT_FRAME_STYLE^wx.MAXIMIZE_BOX)
      self.启动窗口 = wx.Panel(self)
      self.Centre()
      self.combo = wx.ComboBox(self.启动窗口, size=(300, 200), pos=(130, 200))
      # 绑定事件
      self.combo.Bind(wx.EVT_COMBOBOX, self.on_select)
      self.combo2 = wx.ComboBox(self.启动窗口, size=(150, 100), pos=(93, 347))
      self.combo3 = wx.ComboBox(self.启动窗口, size=(150, 100), pos=(93, 385))


      self.编辑框1 = wx.TextCtrl(self.启动窗口,size=(400, 106),pos=(29, 44),value='',name='text',style=wx.TE_MULTILINE)
      self.编辑框2 = wx.TextCtrl(self.启动窗口, size=(332, 563), pos=(442, 44), value='', name='text',style=wx.TE_MULTILINE | wx.TE_WORDWRAP)
      self.编辑框3 = wx.TextCtrl(self.启动窗口, size=(402, 86), pos=(27, 239), value='', name='text',style=wx.TE_MULTILINE)
      self.编辑框4 = wx.TextCtrl(self.启动窗口, size=(403, 104), pos=(26, 502), value='', name='text', style=wx.TE_MULTILINE)

      self.标签1 = wx.StaticText(self.启动窗口,size=(113, 33),pos=(29, 4),label='cookie:',name='staticText',style=2321)
      标签1_字体 = wx.Font(20,74,90,400,False,'Microsoft YaHei UI',28)
      self.标签1.SetFont(标签1_字体)
      self.标签2 = wx.StaticText(self.启动窗口, size=(113, 26), pos=(6, 212), label='搜索:', name='staticText',style=2321)
      标签2_字体 = wx.Font(16, 74, 90, 400, False, 'Microsoft YaHei UI', 28)
      self.标签2.SetFont(标签2_字体)
      self.标签3 = wx.StaticText(self.启动窗口, size=(77, 23), pos=(14, 351), label='保存到板块:', name='staticText',style=2321)
      self.标签4 = wx.StaticText(self.启动窗口, size=(62, 22), pos=(23, 390), label='搜索板块:', name='staticText',style=2321)
      self.标签5 = wx.StaticText(self.启动窗口, size=(115, 26), pos=(437, 13), label='返回结果:', name='staticText',style=2321)
      标签5_字体 = wx.Font(14, 74, 90, 400, False, 'Microsoft YaHei UI', 28)
      self.标签5.SetFont(标签5_字体)


      self.多选框1 = wx.CheckBox(self.启动窗口,size=(74, 26),pos=(150, 13),name='check',label='保存',style=16384)
      self.多选框1.SetValue(True)
      多选框1_字体 = wx.Font(12,74,90,400,False,'Microsoft YaHei UI',28)
      self.多选框1.SetFont(多选框1_字体)
      self.多选框1.Bind(wx.EVT_CHECKBOX, self.coobao)

      self.按钮1 = wx.Button(self.启动窗口,size=(95, 39),pos=(10, 436),label='保存到自选',name='button')
      self.Bind(wx.EVT_BUTTON, self.baozixuan1, self.按钮1)
      按钮1_字体 = wx.Font(12,74,90,400,False,'Microsoft YaHei UI',28)
      self.按钮1.SetFont(按钮1_字体)
      self.按钮1.SetForegroundColour((255, 0, 0, 255))
      self.按钮1.SetOwnBackgroundColour((255, 255, 128, 255))
      self.按钮2 = wx.Button(self.启动窗口,size=(95, 39),pos=(120, 436),label='保存到板块',name='button')
      按钮2_字体 = wx.Font(12,74,90,400,False,'Microsoft YaHei UI',28)
      self.按钮2.SetFont(按钮2_字体)
      self.按钮2.SetForegroundColour((0, 128, 255, 255))
      self.按钮2.SetOwnBackgroundColour((255, 128, 0, 255))
      self.Bind(wx.EVT_BUTTON, self.baobankuai1, self.按钮2)

      self.按钮3 = wx.Button(self.启动窗口,size=(95, 39),pos=(230, 436),label='搜索板块',name='button')
      self.Bind(wx.EVT_BUTTON, self.sousuobankuai, self.按钮3)
      按钮3_字体 = wx.Font(12,74,90,400,False,'Microsoft YaHei UI',28)
      self.按钮3.SetFont(按钮3_字体)
      self.按钮4 = wx.Button(self.启动窗口,size=(95, 39),pos=(340, 436),label='搜索',name='button')
      按钮4_字体 = wx.Font(14,74,90,400,False,'Microsoft YaHei UI',28)
      self.Bind(wx.EVT_BUTTON, self.sousuo1, self.按钮4)
      self.按钮4.SetFont(按钮4_字体)
      self.按钮4.SetForegroundColour((255, 0, 255, 255))
      self.按钮4.SetOwnBackgroundColour((0, 255, 128, 255))

      self.按钮5 = wx.Button(self.启动窗口, size=(80, 35), pos=(350, 160), label='删除记录', name='button')
      按钮5_字体 = wx.Font(12, 74, 90, 400, False, 'Microsoft YaHei UI', 28)
      self.按钮5.SetFont(按钮5_字体)
      self.Bind(wx.EVT_BUTTON, self.删除历史记录, self.按钮5)

      self.按钮6 = wx.Button(self.启动窗口, size=(95, 60), pos=(260, 350), label='获取板块', name='button')
      self.Bind(wx.EVT_BUTTON, self.huoqubankuai, self.按钮6)
      按钮6_字体 = wx.Font(12, 74, 90, 400, False, 'Microsoft YaHei UI', 36)
      self.按钮6.SetFont(按钮6_字体)

      self.lujing = 'lishijilu.txt'
      self.coodu()
      self.读取历史记录()


    def hexin(self):
      #获取hexin-v
      with open("wen.js", "r", encoding="utf-8") as f:
            js = f.read()
      JS = execjs.compile(js)# 读取时间拼接进入js代码中
      hexin = JS.call("rt.update")
      return hexin


    def on_select(self, event):
      # 获取选中的值
      selected = self.combo.GetValue().rstrip('\n')
      self.编辑框3.SetValue(selected)


    def cook(self):
      #处理hexin-v
      try:
            hexin = self.hexin()
            cook = re.search('(.*)v=', self.编辑框1.GetValue()).group(1)
            coo = f"{cook}v={hexin}"
            self.编辑框1.SetValue(f"{coo}")
            return hexin
      except:
            self.编辑框2.AppendText("无cookie数据!!\n")


    def pachong(self,url,**kwargs):
      #post框架
      hexin = self.cook()
      data = kwargs
      headers = {
            'cookie': self.编辑框1.GetValue(),
            'hexin-v': hexin,
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 Edg/128.0.0.0'
      }
      r = requests.request(method='POST', url=url, json=data, headers=headers,timeout=30)
      r.encoding = 'utf8'
      rr = r.text
      return rr


    def huoqubankuai(self, event):
      #获取板块按钮的函数
      url = 'https://www.iwencai.com/unifiedwap/self-stock/plate/list'
      rr = self.pachong(url,stocks=0,ths=0)
      json_data = json.loads(rr)
      self.my_dict = {}
      if json_data['success'] == True:
            for row in json_data['data']:
                self.my_dict] = row['sn']
                if self.combo2.GetValue() or self.combo3.GetValue():
                  pass
                else:
                  self.combo2.Append(row['ln'])
                  self.combo3.Append(row['ln'])
                  self.编辑框2.AppendText(f"{row['ln']},板块加载完成!!\n")
            self.combo2.SetValue(json_data['data']['ln'])
            self.combo3.SetValue(json_data['data']['ln'])
      else:
            pass


    def sousuo1(self,event,block_list=None):
      #搜索按钮的函数
      self.保存历史记录()
      self.coobao(event)
      url = "https://www.iwencai.com/customized/chart/get-robot-data"
      add_info = "{\"urp\":{\"scene\":1,\"company\":1,\"business\":1},\"contentType\":\"json\",\"searchInfo\":true}"
      log_info = "{\"input_type\":\"typewrite\"}"
      page = 1
      perpage = 100
      question = self.编辑框3.GetValue()
      secondary_intent = 'stock'
      source = 'Ths_iwencai_Xuangu'
      version = '2.0'
      rr = self.pachong(url,add_info=add_info,log_info=log_info,page=page,perpage=perpage,question=question,secondary_intent=secondary_intent,source=source,version=version,block_list=block_list,query_area=None)
      try:
            json_data = json.loads(rr)
            aa = json_data['data']['answer']['txt']['content']['components']['data']['datas']
            self.co = ''
            self.计数 = 0
            for row in aa:
                self.chuli(row)
            self.编辑框2.AppendText(f"数量:{self.计数}\n")
            self.编辑框4.SetValue(f"{self.co}")
            ii = 1
            for i in range(20):
                ii += 1
                hexin = self.cook()
                iii = self.page(self.编辑框1.GetValue(),hexin,ii)
                if iii == 1:
                  self.编辑框2.AppendText(f"总数{ii-1}页,全部加载完成!!\n")
                  break
      except:
            self.编辑框2.AppendText("搜索无数据!!\n")

    def chuli(self,row):
      #处理数据
      #只选择0.3.6开头的其他过滤掉
      if row['code'] == '0' or row['code'] == '3':
            self.编辑框2.AppendText(f"{row['股票简称']} {row['code']}\n")
            self.co += f"{row['code']}_33|"
            self.计数 += 1
      if row['code'] == '6':
            if row['code'] == '688':#这是过滤688开头的
                pass
            else:
                self.编辑框2.AppendText(f"{row['股票简称']} {row['code']}\n")
                self.co += f"{row['code']}_17|"
                self.计数 += 1


    def page(self,cookie,hexin,ii):
      #处理分页
      url = 'http://www.iwencai.com/gateway/urp/v7/landing/getDataList'

      data = {'perpage': 100, 'page': ii, 'source': 'Ths_iwencai_Xuangu',
                'query': self.编辑框3.GetValue(), 'urp_sort_way': 'asc',
                'comp_id': 6836372, 'uuid': 24087}
      headers = {
            'cookie': cookie,
            'hexin-v': hexin,
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 Edg/128.0.0.0'
      }
      r = requests.request(method='POST', url=url, data=data, headers=headers, timeout=30)
      # r.encoding = 'unicode_escape'
      rr = r.text
      json_data = json.loads(rr)
      if json_data['answer']['components']['data']['datas'] == []:
            return 1
      else:
            for row in json_data['answer']['components']['data']['datas']:
                self.chuli(row)
            self.编辑框2.AppendText(f"第{ii}页加载成功!!\n")
            self.编辑框2.AppendText(f"数量:{self.计数}\n")
            self.编辑框4.SetValue(f"{self.co}")



    def block(self):
      #需要搜索的板块
      selected = self.combo3.GetValue()
      return self.my_dict,selected


    def snn(self):
      #需要保存到的板块
      selected = self.combo2.GetValue()
      return self.my_dict,selected

    def sousuobankuai(self, event):
      #搜索板块按钮的函数
      try:
            block,lu = self.block()
            url = "https://www.iwencai.com/customized/chart/get-robot-data"
            add_info = "{\"urp\":{\"scene\":1,\"company\":1,\"business\":1},\"contentType\":\"json\",\"searchInfo\":true}"
            log_info = "{\"input_type\":\"typewrite\"}"
            page = 1
            perpage = 200
            question = self.编辑框3.GetValue()
            secondary_intent = 'stock'
            source = 'Ths_iwencai_Xuangu'
            version = '2.0'
            rr = self.pachong(url, add_info=add_info, log_info=log_info, page=page, perpage=perpage, question=question,
                              secondary_intent=secondary_intent, source=source, version=version, block_list=block,
                              query_area=None)

            json_data = json.loads(rr)
            aa = json_data['data']['answer']['txt']['content']['components']['data']['datas']
            self.co = ''
            self.计数 = 0
            for row in aa:
                self.chuli(row)

            self.编辑框2.AppendText(f"数量:{self.计数}\n")
            self.编辑框4.SetValue(f"{self.co}")
      except:
            self.编辑框2.AppendText("搜索无数据!!\n")



    def baobankuai1(self,event):
      #保存到板块按钮的函数
      try:
            sn,lu = self.snn()
            url = "https://www.iwencai.com/iwencai/userinfo/iwc/userinfo/self-stock/plate/add"
            codes = self.编辑框4.GetValue()
            type = 2

            rr = self.pachong(url,sn=sn,codes=codes,type=type)
            json_data = json.loads(rr)
            rr = json_data
            shu = rr['result']['addedNum']
            if rr['status_msg'] == 'OK':
                self.编辑框2.AppendText(f"数量:{shu},保存至【{lu}】板块成功!!\n")
      except:
            self.编辑框2.SetValue("无数据!!\n")


    def baozixuan1(self,event):
      #保存自选按钮的函数
      try:
            url = "https://www.iwencai.com/iwencai/userinfo/iwc/userinfo/self-stock/index/add"
            codes = self.编辑框4.GetValue()
            type = 2
            r = self.pachong(url,codes=codes,type=type)
            json_data = json.loads(r)
            rr = json_data
            shu = rr['result']['addedNum']
            if rr['status_msg'] == 'OK':
                self.编辑框2.AppendText(f"数量:{shu},保存至自选成功!!\n")
      except:
            self.编辑框2.SetValue("无数据!!\n")



    def coobao(self,event):
      #保存cookie
      try:
            if self.多选框1.GetValue() == True:
                with open('cookie.txt', 'w', encoding='utf-8') as f:
                  f.write(self.编辑框1.GetValue())
      except:
            pass

    def coodu(self):
      #读取cookie
      try:
            with open('cookie.txt', 'r', encoding='utf-8') as f:
                text = f.read()
            self.编辑框1.SetValue(f"{text}")
      except:
            pass


    def 读取历史记录(self):
      #读取搜索历史记录
      try:
            with open(self.lujing, 'r') as file:
                # 逐行读取
                for line in file:
                  if line != '':
                        self.combo.Append(line)
      except:
            pass


    def 保存历史记录(self):
      # 保存搜索历史记录
      sdd = self.编辑框3.GetValue().rstrip('\n')
      with open(self.lujing, 'a') as f:
            f.write(f"{sdd}\n")
      self.combo.Append(self.编辑框3.GetValue())


    def 删除历史记录(self,event):
      #删除搜索记录按钮的函数
      with open(self.lujing, 'r') as file:
            lines = file.readlines()

      with open(self.lujing, 'w') as file:
            for i, line in enumerate(lines, 1):
                if line != self.combo.GetValue():
                  if line != '':
                        file.write(line)
      self.combo.Delete(self.combo.GetSelection())



class myApp(wx.App):
    defOnInit(self):
      self.frame = Frame()
      self.frame.Show(True)
      return True

if __name__ == '__main__':
    app = myApp()
    app.MainLoop()

下面是获取hexin-v值js代码,文件保存为wen.js,不能改别的名字
var TOKEN_SERVER_TIME = 0
var document = {}
var window = {}
second = \\P", "___", "le", "th", "prototype", "base_f", 8, "\\R5Z\\R\x14@^Q3G", "ZV%PgQ?Y]S%", 67, "r", "length", "0", 16, "12", "\u2576\u095f\u0979\u09d5\u0995\u091b\u09a9\u09f9\u09bd\u09f7\u0989\u09fd\u09f5\u09f3\u09f9\u0a41\u0a4d\u098f\u0999\u0905\u0975\u09cb\u09a9\u09a9\u099d\u0927\u0933\u0913\u0a6b\u0999\u09a3\u0937\u098b\u09f5\u0933\u0a7b\u091b\u09b1\u0a63\u095f\u09fb\u094d\u0993\u0943\u092b\u0949\u09a3\u09e7\u09cb\u0925\u0993\u09ab\u09f0\u092c\u092c\u0942\u0950\u09c8\u0944\u09c6\u0990\u0944\u09cb\u098e", "i,", "\u2505\u092f", 12, 56, "20", "1000", 2, 5, "11111111", "encode", "\u255b\u0972\u0959", "\u2519", "s", "WY$PYS", "ystate", "1111101000", / /g, ",", "\u250d", '^".*"$', "edoc_sutats", "status_code", "location", "redirect_url", "href", "4294967295", "j", "1200000", "script", "src", "onreadystatechange", "read", "loaded", "readyState", "complete", "interactive", "onload", "undefined", "\\.com\\.cn$|\\.com\\.hk$", ".", "getServerTime", 'YY7YAD?FjD"', "strhash", "random", "getRootDomain", "booleanToDecimal", "timeNow", "\u2559\u253e", "eventBind", "onwh", "\u255b", 46, "DOMM", "cl", "T^5^", "div", "onmousewheel", "mousewheel", 51, "keydown", "clientY", "getKeyDown", "ch", "plu", "\u2543\u252b", "ouc", "art", "^i", "Po", "callPhantom", "max", "Hei", "ActiveXObject", "nd", "yG&Y]\x17\x15ZUG#A]Ez\x15qY5\x1b", "\u2576\u097e\u094e\u09f8\u09a6\u0938\u09b6\u09fe\u0996\u09d7\u09a7\u09d2\u09cc", "Maxthon", "Q", "opr", "chrome", "BIDUBrowser", "QQBro", "C|\x18", "webgl2", "platform", "name", "^Win32", "^MacIntel", "^Linux \\d+", "^BlackBerry", "language", "getPlatform", "getBrowserIndex", "1", "10", 4, 9, "1100", "\t\0", "3c", 256, "w", "TTP", "et", "c", "al", "\u255e", "base", "\u2569\u0975\u094e\u09e5\u09a0\u092e\u09d1\u09ed\u09ce", "target", "fh%PTQr", "#", "\u255f\u097c\u0949\u09f9", 97, "rg", "tnemelEcrs", "fn_Ws", "parentNode", "tagName", "A", "submit", "PX%", "me", "host", "\\.?", "d\x19", "Fri, 01 Feb 2050 00:00:00 GMT", "]E%", "toString", "", "headers", 83, "&", encodeURIComponent, "open", "getAllResponseHeaders", "4", "tseuqeRpttHLMX", "Window", "\u2564\u095e", "RI", "\u2550\u0953", "(YaZ", "_", "_str", "V587"]
first = ["", 9527, String, Boolean, "eh", "ad", "Bu", "ileds", "1", "\b", Array, "7", "base", "64De", "\u2543\u252b", "etatS", "pa", "e", "FromUrl", "getOrigi", "nFromUrl", "\u255b\u253e", "b?\x18q)", "ic", "k", "sted", "he", "wser", "oNo", "ckw", "ent", "hst", "^And", "RM", "systemL", 5, "\u255f\u0978\u095b\u09f5", "TR8", "!'", "gth", "er", "TP", 83, "r", !0, "v", "v-nixeh", RegExp, "thsi.cn", 'K\x19"]K^xVV', "KXxAPD?\x1b^`{|}~]", "base_fileds", "255", 10, "10", 39, "\u2547\u2535\u255a\u252e\u2541\u2535\u254c\u253c\u2559", 8, "4", "3", "de", 3, "11", 2, "203", "22", "111111", "3f", 16, "\x0f", "\u2506\u2537\u2507\u2537", "11111111", "base64Encode", "v\x1d", "ati", "WY", "te", "bo", "rs", "getHost", Date, "{DF", ":", "^{.*}$", "WU<P+)", "i", "\u256c\u252c\u2516\u254b", "@", "ready", "change", "dy", 7, "protocol", "//s.thsi.cn/js/chameleon/time.1", "onerror", "2000", "readyState", null, "^(\\d+\\.)+\\d+$", "^\\s*(?:(https?:))?\\/{2,}([^\\/\\?\\#\\\\]+)", ".", "strToBytes", "isIPAddr", "serverTimeNow", "addEventListener", "th", "wh", "Scro", "mousemove", 55, "evomhcuot", "[[?PVC\x0e", "getMouseMove", '_R"xWB%Po_3YT', "getMouseClick", "ght", "gin", "msD", "ack", "\u2556\u096b\u095f", "Nativ", "^A", "MozSettingsEvent", "safari", "ActiveXObject", "postMessage", "Uint8Array", "WeakMap", "Google Inc.", "vendor", "chrome", "python", "sgAppName", "JX", 6, "me", "LBBROWSER", "w4", "2345Explorer", "TheWorld", "\u2544", 40, "tTr", "\u2506", "navigator", "webdriver", "languages", "taborcA|FDP", "\u2541\u097c\u0949", 95, "1e0", "e Cli", "iso-8859-1", "defaultCharset", "localStorage", "^Win64", "^Linux armv|Android", "^iPhone", "^iPad", "B_{VV", "getPluginNum", "getBrowserFeature", "12", "16", "sE", "10000", "17", "\u2542\u2532\u2556\u2537\u2543\u2526", "\x1cx`R", 2333, "XMLH", "ers", "0", "lo", 57, "ylppa", "error", "target", "click", "unload", "HE9AWT9Y", "\\.", "c?", "$", "/", "fetch", "prototype", "url", "\u2556\u0971\u0956\u09fe\u09a7", "headers", "\u256b\u2554", 79, "?", "^(.*?):[ \\t]*([^\\r\\n]*)\\r?$", "gm", "s", "src", "analysisRst", "\u255e\u0973\u0949\u09f4\u09a2\u0929\u09ac\u09d4\u0992\u09d2\u09b0\u09d4", "appendChild", "Y", "jsonp_ignore", "^", 70, "421", "XH>a", "\u2574\u253c\u257d\u2530\u2575\u2539\u257c\u2533\u257d\u2522\u256e\u2521\u2560\u2524\u2561\u2525", "CHAMELEON_LOADED"]

var r, e, a , n;
      r = e = a = n = first;
      var u, c, s , t;
      u = c = s = t = second;

function serverTimeNow(){
    return parseInt(TOKEN_SERVER_TIME);
}



function v() {
    var n = arguments];
    if (!n)
      return r;
    for (var t = u, o = a, i = c; i < n.length; i++) {
      var v = n.charCodeAt(i)
          , f = v ^ o;
      o = v,
      t += e.fromCharCode(f)
    }
    return t
}

function ot() {
    var n, t, e , c;
    n = t = e = c = second;
    var a, o, i , r;
    a = o = i = r = first;
    var u = arguments];
    if (!u)
      return o;
    for (var s = a, v = n, f = o, l = t; l < u.length; l++) {
      var p = u.charCodeAt(l);
      f = (f + t) % v.length,
      p ^= v.charCodeAt(f),
      s += i.fromCharCode(p)
    }
    return s
}




var qn = function() {
    var n, t, r , a;
    n = t = r = a = first;
    var e, o, i , s;
    e = o = i = s = second;
    var u = o
      , c = o
      , f = e;
    function l(r) {
      var a = o
          , i = e;
      this] = r;
      for (var u = t, c = r["length"]; u < c; u++)
            this = t
    }
    l.prototype.toBuffer = function() {
      for (var a = "base_f", u = this["base_fileds"], c = [], s = -e, v = o, f = u]; v < f; v++)
            for (var l = this, p = u, d = s += p; c = l & parseInt(t, n),
            --p != r; )
                --d,
                l >>= parseInt(n, i);
      return c
    };

    l.prototype.decodeBuffer = function(n) {
      for (var r = e, a = this, e)], o = t, u = e, s = a; u < s; u++) {
            var v = a
            , l = i;
            do {
                l = (l << t) + n
            } while (--v > t);
            this = l >>> i
      }
    };

    return l;
}()

      function at() {
            var n, t, r;
            n = t = r = u;
            var a, o, i;
            a = o = i = e;
            var c = arguments];
            if (!c)
                return t;
            for (var s = o, v = o, f = a; f < c.length; f++) {
                var l = c.charCodeAt(f)
                  , p = l ^ v;
                v = v * f % n + o,
                s += i.fromCharCode(p)
            }
            return s
      }

var zn
!function(n) {
    var t = s
      , o = c
      , i = r
      , f = r
      , l = s
      , d = r
      , h = r;
    function g(n, a, o, i, u) {
      for (var c = s, v = r, f = n]; a < f; )
            o = n ^ u & parseInt(c + v + t + "11", r),
            u = ~(u * parseInt(e, e))
    }
    function w(n) {
      for (var t = c, i = r, v = n], f = []; i < v; ) {
            var l = n << parseInt("1" + t, c) | n << e | n;
            f.push(m.charAt(l >> parseInt(e, e)), m.charAt(l >> parseInt(s, e) & parseInt(a, r)), m.charAt(l >> u & parseInt("6" + o, a)), m.charAt(l & parseInt(a, u)))
      }
      return f.join(e)
    }
    for (var m = at(u, s), I = {}, y = u; y < parseInt(i + "0", e); y++)
      I = y;
    function O(n) {
      var t, r, e;
      t = r = e = s;
      var o, i, u;
      o = i = u = a;
      for (var c = ot(i), l = e, p = n], d = []; l < p; ) {
            var h = I << parseInt(at(t), u) | I << parseInt(v(t, u, e), o) | I << t | I;
            d.push(h >> parseInt(e, t), h >> parseInt(t, r) & parseInt(f + b + c, t), h & parseInt(o, u))
      }
      return d
    }
    function D(n) {
      var t = O(n);
      if (rn,
      p,
      t] != h)
            return error = T + B + l,
            void 0;
      var a = t]
          , o = [];
      return g(t, +parseInt(e, c), o, +u, a),
      x(o) == a ? o : void 0
    }
    function x(n) {
      var t = o;
      t = Vn;
      for (var e = c, i = a, u = n]; i < u; i++)
            e = (e << s) - e + n;
      return e & parseInt(s, r)
    }
    function N(n) {
      var r = x(n)
          , e = ;
      return g(n, +a, e, +a, r),
      //t = "co", 出问题
      w(e)
    }
    n["base64Encode"] = w,
    n["base64Decode"] = O,
    n["encode"] = N,
    n["decode"] = D
}(zn || (zn = {}));



function strhash(n) {
    var t, e, a;
    t = e = a = s = second;
    var o, i, u;
    o = i = u = r = first;
    n = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36"
    for (var c = u, v = a, f = n]; v < f; v++)
      c = (c << a) - c + n.charCodeAt(v),
      c >>>= o;
    return c
}


function getBrowserFeature() {
    return 3812;
}

function getPlatform() {
    return 7;
}

function getBrowserIndex(){
    return 10;
}

function getPluginNum(){
    return 5;
}

function timeNow(){
    return time = s.now(),
    time / parseInt(c, a) >>> c
}


var En = a
var An = v(a, s)
var Vn = 0
var Un = s
var rt={};
!function(n) {
    var t = e, o = a, i = e, f = s, l = r, p = s, d = parseInt(c, u), h = e, g = u, w = u, m = e, I = parseInt(t + En, c), y = parseInt(a, a), _ = c, C = parseInt(a, e), E = parseInt(o + i, r), A = parseInt(u, s), b = parseInt(f + An, s), T = parseInt(r, s), B = parseInt(ot(s, e), r), R = parseInt(e, u), k = parseInt(e, a), S;
    function P() {
      var n = s
          , t = r
          , e = parseInt(u, c)
          , a = s;
      S = new qn();
      S = serverTimeNow();
      M(),
            S = Vn;
            S = Un;
            S = c;
            S = strhash();
            S = getBrowserFeature();
            S = getPlatform();
            S = getBrowserIndex();
            S = getPluginNum();
    }
    function M() {//阅读后发现可以偷懒没直接使用random返回
      S = Math.random() * parseInt(u, r) >>> r
      }

    function O() {
      S++,
      S = serverTimeNow(),
      S = timeNow(),
      S = Vn,
      S = 0,
      S = 0,
      S = 0,
      S = 0,
      S = 0,
      S = 0;
      var n = S.toBuffer();
      console.log(n);
      return zn.encode(n)
    }
    //n] = P;
    P();
    function D() {
      return O()
    }
    n["update"] = D
}(rt);
result = rt.update();
console.log(result);

下面是源码的附件

gdp123gd 发表于 2024-9-14 14:28

感谢分析,我记得有个pywencai的模块可以问,但是这个保存到自己板块的功能不错。

kvttt_2021 发表于 2024-10-16 16:17

楼主你好,请问,能否详细讲讲同花顺问财的详细用法?另你软件中的下拉菜单是用什么条件实现的?这个自选股保存,是保存在同花顺网站上,还是保存在同花顺交易软件里?

我就是一小号 发表于 2024-9-14 11:20

支持一下,这个是存在同花顺的板块中?

52pojieyang2022 发表于 2024-9-14 12:07

大佬威武,看着很厉害的样子

machuhai 发表于 2024-9-14 12:46

我就是一小号 发表于 2024-9-14 11:20
支持一下,这个是存在同花顺的板块中?

是的,跟同花顺板块一样

bzever 发表于 2024-9-14 14:43

感谢分享,新手新手前来学习报道:lol

asa007 发表于 2024-9-14 15:16

能否打包为exe执行文件?

machuhai 发表于 2024-9-14 16:02

gdp123gd 发表于 2024-9-14 14:28
感谢分析,我记得有个pywencai的模块可以问,但是这个保存到自己板块的功能不错。

是啊,pywencai不能加自选,加板块,所以自己动手弄一个

milu1123 发表于 2024-9-14 16:34

学习一下GUI如何写,,,,,:lol

mytomsummer 发表于 2024-9-14 22:19

感谢分享学习了
页: [1] 2 3 4
查看完整版本: python同花顺i问财处理及获取hexin-v值