easytrader icon indicating copy to clipboard operation
easytrader copied to clipboard

银河证券运行报错

Open pentcn opened this issue 5 years ago • 2 comments

env

OS: win7/ win10 / mac / linux PYTHON_VERSION: 3.x EASYTRADER_VERSION: 0.xx.xx BROKER_TYPE: gj / ht / xq / xxx

problem

源代码: user = easytrader.use('ths') user.connect(r'f:\双子星金融终端-中国银河证券\xiadan.exe')

错误信息: File "C:\Users\pentcn\AppData\Local\Programs\Python\Python38-32\lib\site-packages\pywinauto\findwindows.py", line 87, in find_element raise ElementNotFoundError(kwargs) pywinauto.findwindows.ElementNotFoundError: {'control_id': 1012, 'class_name': 'Static', 'top_level_only': False, 'parent': <win32_element_info.HwndElementInfo - '网上股票交易系统5.0', AfxFrameOrView42s, 1121748>, 'backend': 'win32'}

是我使用不对吗 我先运行"f:\双子星金融终端-中国银河证券\xiadan.exe"
登录成功后,再运行easytrader的程序

how to repeat

pentcn avatar Jul 15 '20 08:07 pentcn

我的类似错误:

环境:

python 3.7.3 win7

代码

import easytrader

user = easytrader.use('yh_client') # 银河

user.prepare('./yh.json')

#银河不支持
#user.balance

user.entrust

已经正常打开银行客户端,并且自动识别验证码登陆, 底层运行到这里报错

          def _switch_window_to_normal_mode(self):
        self._app.top_window().child_window(
            control_id=32812, class_name="Button"
        ).click() #这里报错

错误:

F:\Anaconda32\python.exe F:/pyworks/testtrade/main.py
Traceback (most recent call last):
  File "F:\Anaconda32\lib\site-packages\pywinauto\application.py", line 256, in __resolve_control
    criteria)
  File "F:\Anaconda32\lib\site-packages\pywinauto\timings.py", line 458, in wait_until_passes
    raise err
pywinauto.timings.TimeoutError

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "F:/pyworks/testtrade/main.py", line 5, in <module>
    user.prepare('./yh.json')
  File "F:\Anaconda32\lib\site-packages\easytrader\clienttrader.py", line 540, in prepare
    **kwargs
  File "F:\Anaconda32\lib\site-packages\easytrader\yh_clienttrader.py", line 81, in login
    self._switch_window_to_normal_mode()
  File "F:\Anaconda32\lib\site-packages\easytrader\yh_clienttrader.py", line 85, in _switch_window_to_normal_mode
    control_id=32812, class_name="Button"
  File "F:\Anaconda32\lib\site-packages\pywinauto\application.py", line 362, in __getattribute__
    ctrls = self.__resolve_control(self.criteria)
  File "F:\Anaconda32\lib\site-packages\pywinauto\application.py", line 259, in __resolve_control
    raise e.original_exception
  File "F:\Anaconda32\lib\site-packages\pywinauto\timings.py", line 436, in wait_until_passes
    func_val = func(*args, **kwargs)
  File "F:\Anaconda32\lib\site-packages\pywinauto\application.py", line 220, in __get_ctrl
    ctrl = self.backend.generic_wrapper_class(findwindows.find_element(**ctrl_criteria))
  File "F:\Anaconda32\lib\site-packages\pywinauto\findwindows.py", line 87, in find_element
    raise ElementNotFoundError(kwargs)
pywinauto.findwindows.ElementNotFoundError: {'control_id': 32812, 'class_name': 'Button', 'top_level_only': False, 'parent': <win32_element_info.HwndElementInfo - '', Internet Explorer_Hidden, 395700>, 'backend': 'win32'}

Process finished with exit code 1

yourchanges avatar Jul 16 '20 01:07 yourchanges

个人测试,可能是因为版本升级,使用yh_client需要简单修改:

yh_clienttrader.py第58行由:

    self._app.top_window()["确定" if is_xiadan else "登录"].click()

替换为:

    self._app.top_window().Edit3.type_keys('{ENTER}')

可实现自动登陆,或者可以手动登陆后再运行Python程序,但是下单程序运行后,需要还原为有标题栏模式,否则会找不到主窗口。

运行时使用:

    user = easytrader.use('yh_client', False)

    user.prepare(user='user',
 password='pass', exe_path=r'C:\双子星-中国银河证券\xiadan.exe'
 )
    user.balance

keshunchen avatar Sep 01 '20 11:09 keshunchen