【问题标题】:Is Screen-scraping a windows application with ruby possible?是否可以使用 ruby​​ 对 Windows 应用程序进行屏幕抓取?
【发布时间】:2010-04-07 06:39:50
【问题描述】:

我想从 Windows 应用程序中抓取文本数据,以使用现有的 ruby​​ 代码进行额外处理。是否可以在使用 Ruby 在 Windows 应用程序中更新数据时抓取数据,从哪里开始?

【问题讨论】:

    标签: windows ruby screen-scraping


    【解决方案1】:

    如果文本位于标准 Windows 控件中,您可以使用 AutoIt 获取它。它是它自己的脚本语言,您可以在 Ruby 中与它的函数进行交互,如下所示:

    require 'win32ole'
    STDOUT.sync = true
    
    App = "calc.exe"
    AppClass = "[CLASS:SciCalc]"    # retrieved with AutoIt Window Info
    
    ai = WIN32OLE.new("AutoItX3.Control")
    ai.run( App )
    ai.winwaitactive( AppClass )
    handle = "[HANDLE:#{ai.wingethandle(AppClass)}]"
    
    until ai.winexists( handle ).zero?
      puts ai.controlgettext( handle, "", "Edit1" ) # retrieved with AutoIt Window Info
      sleep 1
    end
    

    这会打开一个“Calc”实例并每秒显示文本控件的内容。

    【讨论】:

      【解决方案2】:

      如果您对 Windows API 足够了解(或者可以使用搜索引擎找到相关 API),那么从 Ruby 调用它们通常是可以实现的。

      Win32APIlibrary 是访问 Windows API 的传统方式;还有性感的新 FFI,尽管随着 MSVC6 到 gcc 的过渡隆隆作响,编译器可能存在一些悬而未决的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-12
        • 2013-12-31
        • 2013-01-12
        • 2017-02-25
        • 2023-03-25
        相关资源
        最近更新 更多