easytrader
easytrader copied to clipboard
银河证券运行报错
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
我的类似错误:
环境:
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
个人测试,可能是因为版本升级,使用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