ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [python][대신증권] cybos 자동로그인
    IT/python 2022. 1. 4. 15:37

    대신증권 api를 이용하여 로그인 하는 방법은 키움증권과는 다른 점이 많았다.

     

    키움증권의 경우 별도의 로그인 툴을 제공해주기 때문에 로그인 자체에 대해 신경 쓸게 없다.

     

    또한 해당 api가 연동된 프로그램이 종료되면 자동으로 로그아웃이 되기 때문에 추후에 로그인을 할 경우

     

    기존의 로그인 상태와 충돌될 일이 없었다. (중복 로그인의 경우 알아서 체크해주고 에러창까지 띄워준다.)

     

    하지만 대신증권의 경우 별도로 제공되는 로그인 툴이 없기 때문에 코드 상에서 id와 pwd를 입력하여 로그인 해야한다.

     

    때문에 보안에 취약할 수 있다는 단점이 있다.

     

    # 필요 라이브러리

    ########################################################################################

    python 3.7 version (32bit)

    win32com.client (pip install pywin32==301)

    Name: pywin32
    Version: 301
    Summary: Python for Window Extensions
    Home-page: https://github.com/mhammond/pywin32
    Author: Mark Hammond (et al)
    Author-email: mhammond@skippinet.com.au
    License: PSF
    Location: c:\programdata\anaconda3\envs\py37_32bit\lib\site-packages
    Requires:
    Required-by: web3, pywinauto, jupyter-core

     

    pywinauto (pip install pywinauto==0.6.8)

    Name: pywinauto
    Version: 0.6.8
    Summary: A set of Python modules to automate the Microsoft Windows GUI
    Home-page: http://pywinauto.github.io/
    Author: Mark Mc Mahon and Contributors
    Author-email: pywinauto-users@lists.sourceforge.net
    License: BSD 3-clause
    Location: c:\programdata\anaconda3\envs\py37_32bit\lib\site-packages
    Requires: comtypes, pywin32, six
    Required-by: hwpconv

    ###################################################################################

     

    # 코드

    ###################################################################################

    import os
    import win32com.client
    from pywinauto import application
    import time
    
    
    def connect(reconnect=True):
        # 재연결이라면 기존 연결을 강제로 kill
        if reconnect:
            try:
                os.system('taskkill /IM ncStarter* /F /T')
                os.system('taskkill /IM CpStart* /F /T')
                os.system('taskkill /IM DibServer* /F /T')
                os.system('wmic process where "name like \'%ncStarter%\'" call terminate')
                os.system('wmic process where "name like \'%CpStart%\'" call terminate')
                os.system('wmic process where "name like \'%DibServer%\'" call terminate')
            except:
                pass
    
        CpCybos = win32com.client.Dispatch("CpUtil.CpCybos")
    
        if CpCybos.IsConnect:
            print('already connected.')
    
        else:
            app = application.Application()
            app.start(
                'C:\Daishin\Starter\\ncStarter.exe /prj:cp /id:{id} /pwd:{pwd} /pwdcert:{pwdcert} /autostart'.format(
                    id='아이디', pwd='패스워드', pwdcert='공인인증서패스워드')
            )
            # 연결 될때까지 무한루프
            while True:
                if CpCybos.IsConnect:
                    break
                time.sleep(1)
    
            print('connected.')
        return CpCybos
    
    
    # 이미 연결되어있다면 재연결 x
    CpCybos = connect(False)

    ###################################################################################

     

    # 실행화면

    ###################################################################################

    다음과 같은 공지사항이 뜨면 로그인이 되었다고 보면 된다.

    숨겨진 아이콘에서 [DibServer]를 클릭했을 때 다음과 같이 연결중 으로 되어있으면 끝.

     

    ###################################################################################

Designed by Tistory.