如何用pywinauto捕获Folio Views应用中的文本?
解决Folio Views文本提取问题
看来你碰到了老派桌面应用的典型难题——Folio Views这类软件大概率用了自定义控件或者非标准UI框架,导致pywinauto默认的win32后端没法识别到承载文本的子控件,所以才会出现control_count=0和空texts的情况。既然文本能被选中,我们可以换几个思路来搞定内容提取:
方法1:模拟选中 + OCR识别(最易落地)
既然文本可以选中,我们先自动化选中全部内容,再对选中区域截图,最后用OCR工具提取文本。步骤如下:
- 先装好必要的依赖库:
pip install pywinauto pyautogui pytesseract pillow
还要安装Tesseract OCR引擎(Windows下可从官方渠道下载安装包,记得把安装路径添加到系统环境变量里)。
- 参考代码示例:
from pywinauto import Application import pyautogui import pytesseract from PIL import Image # 连接到Folio Views窗口,先尝试win32后端,不行再换UIA app = Application(backend='win32').connect(title_re="Folio Document") win = app.window(title_re="Folio Document") # 确保窗口处于激活状态 win.set_focus() # 模拟Ctrl+A选中全部文本 pyautogui.hotkey('ctrl', 'a') # 截取窗口区域的截图(如果知道文本区域的精准坐标,可缩小截图范围提升OCR准确率) left, top, right, bottom = win.rectangle() screenshot = pyautogui.screenshot(region=(left, top, right-left, bottom-top)) # 用OCR提取截图中的文本 extracted_text = pytesseract.image_to_string(screenshot) # 保存到本地文本文件 with open('folio_book_content.txt', 'w', encoding='utf-8') as f: f.write(extracted_text)
如果OCR准确率不够,可以尝试调整截图的对比度、清晰度,或者指定Tesseract的语言参数来优化。
方法2:切换到pywinauto的UIA后端
部分老应用虽然win32后端识别不了,但UIA(UI Automation)后端可能能挖掘到更多控件信息。修改连接代码试试:
app = Application(backend='uia').connect(title_re="Folio Document") win = app.window(title_re="Folio Document") # 打印所有可识别的控件信息 win.print_control_identifiers()
如果输出里能找到Edit、Text类的控件,就可以尝试定位这些控件,调用.get_text()方法直接提取文本。
方法3:内存读取(进阶方案,难度较高)
如果上面两种方法都失效,你可以尝试读取应用的内存内容。需要先用Cheat Engine这类工具定位文本在内存中的地址,再用Python的pywin32库读取对应内存区域。不过这种方法对内存结构有要求,不同版本的Folio Views内存布局可能不同,稳定性较差,不推荐作为首选方案。
总结下来,方法1是最稳妥的选择——既然你已经确认文本可选中,只要优化好OCR的识别效果,就能顺利拿到需要的内容。
内容的提问来源于stack exchange,提问作者Simon Streicher
相关产品推荐
相关产品推荐

