easytrader icon indicating copy to clipboard operation
easytrader copied to clipboard

同花顺防自动交易跟防贼似的,在持仓界面复制和保存都要验证码了

Open WilsonKoo1986 opened this issue 4 years ago • 8 comments

env

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

problem

how to repeat

WilsonKoo1986 avatar Oct 04 '21 17:10 WilsonKoo1986

借助外部程序识别验证码,大约80%以上的成功率

--- a/easytrader/grid_strategies.py
+++ b/easytrader/grid_strategies.py
@@ -97,7 +97,7 @@ class Copy(BaseStrategy):
     def _get_clipboard_data(self) -> str:
         if Copy._need_captcha_reg:
             if (
-                    self._trader.app.top_window().window(class_name="Static", title_re="验证码").exists(timeout=1)
+                    self._trader.app.top_window().window(class_name="Static", title_re=".*验证码.*").exists(timeout=1)
             ):
                 file_path = "tmp.png"
                 count = 5
@@ -108,17 +108,14 @@ class Copy(BaseStrategy):
                     ).capture_as_image().save(
                         file_path
                     )  # 保存验证码
-
                     captcha_num = captcha_recognize(file_path).strip()  # 识别验证码
                     captcha_num = "".join(captcha_num.split())
                     logger.info("captcha result-->" + captcha_num)
                     if len(captcha_num) == 4:
-                        self._trader.app.top_window().window(
-                            control_id=0x964, class_name="Edit"
-                        ).set_text(
-                            captcha_num
-                        )  # 模拟输入验证码
-
+                        editor = self._trader.app.top_window().child_window(control_id=0x964, class_name="Edit")
+                        editor.select()
+                        editor.type_keys(captcha_num)
+                        self._trader.app.top_window().set_focus()
                         self._trader.app.top_window().set_focus()
                         pywinauto.keyboard.SendKeys("{ENTER}")  # 模拟发送enter,点击确定
                         try:
@@ -184,6 +181,21 @@ class Xls(BaseStrategy):
         count = 10
         while count > 0:
             if self._trader.is_exist_pop_dialog():
+                if  self._trader._app.top_window().window(class_name="Static", title_re=".*验证码.*") != None:
+                    file_path = "tmp.png"
+                    self._trader.app.top_window().window(
+                            class_name="Static", control_id=0x965
+                            ).capture_as_image().save(file_path)
+                    captcha_num = captcha_recognize(file_path).strip()  # 识别验证码
+                    captcha_num = "".join(captcha_num.split())
+                    logger.info("captcha result-->" + captcha_num)
+                    if len(captcha_num) == 4:
+                        editor = self._trader.app.top_window().child_window(control_id=0x964, class_name="Edit")
+                        editor.select()
+                        editor.type_keys(captcha_num)
+                        self._trader.app.top_window().set_focus()
+                        pywinauto.keyboard.send_keys("{ENTER}")  # 模拟发送enter,点击确定
+                        self._trader.wait(1)
                 break
             self._trader.wait(0.2)
             count -= 1

zeze0556 avatar Oct 21 '21 04:10 zeze0556

就是,像防贼一样

baimengwei avatar Oct 21 '21 07:10 baimengwei

借助外部程序识别验证码,大约80%以上的成功率

--- a/easytrader/grid_strategies.py
+++ b/easytrader/grid_strategies.py
@@ -97,7 +97,7 @@ class Copy(BaseStrategy):
     def _get_clipboard_data(self) -> str:
         if Copy._need_captcha_reg:
             if (
-                    self._trader.app.top_window().window(class_name="Static", title_re="验证码").exists(timeout=1)
+                    self._trader.app.top_window().window(class_name="Static", title_re=".*验证码.*").exists(timeout=1)
             ):
                 file_path = "tmp.png"
                 count = 5
@@ -108,17 +108,14 @@ class Copy(BaseStrategy):
                     ).capture_as_image().save(
                         file_path
                     )  # 保存验证码
-
                     captcha_num = captcha_recognize(file_path).strip()  # 识别验证码
                     captcha_num = "".join(captcha_num.split())
                     logger.info("captcha result-->" + captcha_num)
                     if len(captcha_num) == 4:
-                        self._trader.app.top_window().window(
-                            control_id=0x964, class_name="Edit"
-                        ).set_text(
-                            captcha_num
-                        )  # 模拟输入验证码
-
+                        editor = self._trader.app.top_window().child_window(control_id=0x964, class_name="Edit")
+                        editor.select()
+                        editor.type_keys(captcha_num)
+                        self._trader.app.top_window().set_focus()
                         self._trader.app.top_window().set_focus()
                         pywinauto.keyboard.SendKeys("{ENTER}")  # 模拟发送enter,点击确定
                         try:
@@ -184,6 +181,21 @@ class Xls(BaseStrategy):
         count = 10
         while count > 0:
             if self._trader.is_exist_pop_dialog():
+                if  self._trader._app.top_window().window(class_name="Static", title_re=".*验证码.*") != None:
+                    file_path = "tmp.png"
+                    self._trader.app.top_window().window(
+                            class_name="Static", control_id=0x965
+                            ).capture_as_image().save(file_path)
+                    captcha_num = captcha_recognize(file_path).strip()  # 识别验证码
+                    captcha_num = "".join(captcha_num.split())
+                    logger.info("captcha result-->" + captcha_num)
+                    if len(captcha_num) == 4:
+                        editor = self._trader.app.top_window().child_window(control_id=0x964, class_name="Edit")
+                        editor.select()
+                        editor.type_keys(captcha_num)
+                        self._trader.app.top_window().set_focus()
+                        pywinauto.keyboard.send_keys("{ENTER}")  # 模拟发送enter,点击确定
+                        self._trader.wait(1)
                 break
             self._trader.wait(0.2)
             count -= 1

您好,请问您可以把您修改的文件grid_strategies.py完整上传吗?

jianglijs avatar Oct 23 '21 03:10 jianglijs

请问有人可以提供援助吗,目前卡这儿了

jianglijs avatar Oct 23 '21 03:10 jianglijs

借助外部程序识别验证码,大约80%以上的成功率

--- a/easytrader/grid_strategies.py
+++ b/easytrader/grid_strategies.py
@@ -97,7 +97,7 @@ class Copy(BaseStrategy):
     def _get_clipboard_data(self) -> str:
         if Copy._need_captcha_reg:
             if (
-                    self._trader.app.top_window().window(class_name="Static", title_re="验证码").exists(timeout=1)
+                    self._trader.app.top_window().window(class_name="Static", title_re=".*验证码.*").exists(timeout=1)
             ):
                 file_path = "tmp.png"
                 count = 5
@@ -108,17 +108,14 @@ class Copy(BaseStrategy):
                     ).capture_as_image().save(
                         file_path
                     )  # 保存验证码
-
                     captcha_num = captcha_recognize(file_path).strip()  # 识别验证码
                     captcha_num = "".join(captcha_num.split())
                     logger.info("captcha result-->" + captcha_num)
                     if len(captcha_num) == 4:
-                        self._trader.app.top_window().window(
-                            control_id=0x964, class_name="Edit"
-                        ).set_text(
-                            captcha_num
-                        )  # 模拟输入验证码
-
+                        editor = self._trader.app.top_window().child_window(control_id=0x964, class_name="Edit")
+                        editor.select()
+                        editor.type_keys(captcha_num)
+                        self._trader.app.top_window().set_focus()
                         self._trader.app.top_window().set_focus()
                         pywinauto.keyboard.SendKeys("{ENTER}")  # 模拟发送enter,点击确定
                         try:
@@ -184,6 +181,21 @@ class Xls(BaseStrategy):
         count = 10
         while count > 0:
             if self._trader.is_exist_pop_dialog():
+                if  self._trader._app.top_window().window(class_name="Static", title_re=".*验证码.*") != None:
+                    file_path = "tmp.png"
+                    self._trader.app.top_window().window(
+                            class_name="Static", control_id=0x965
+                            ).capture_as_image().save(file_path)
+                    captcha_num = captcha_recognize(file_path).strip()  # 识别验证码
+                    captcha_num = "".join(captcha_num.split())
+                    logger.info("captcha result-->" + captcha_num)
+                    if len(captcha_num) == 4:
+                        editor = self._trader.app.top_window().child_window(control_id=0x964, class_name="Edit")
+                        editor.select()
+                        editor.type_keys(captcha_num)
+                        self._trader.app.top_window().set_focus()
+                        pywinauto.keyboard.send_keys("{ENTER}")  # 模拟发送enter,点击确定
+                        self._trader.wait(1)
                 break
             self._trader.wait(0.2)
             count -= 1

您好,请问您可以把您修改的文件grid_strategies.py完整上传吗?

我这边代码修改的很乱,尤其是延时这块。就不折腾了

zeze0556 avatar Oct 25 '21 04:10 zeze0556