2012-11-27 55 views
0

如果此問題太泛化,請隨時編輯,我很抱歉。我正在設計A.I.系統是監視/觀察人與桌面環境的交互並從中學習。 我可能會使用圖像捕捉和計算機視覺,但這會增加一層關於屏幕上交互元素的複雜性。 我想知道是否有一種方法可以直接從瀏覽器獲得用戶與鼠標單擊,焦點對齊,kb輸入等操作的實際DOM或HTML元素。 在Windows中,我可以將DLL掛鉤到瀏覽器中,但在Linux中,我不知道如何做類似的事情。這背後的想法是,當用戶點擊「按鈕」登錄,而不是使用CV捕獲圖像像素,我實際上得到用戶交互元素的數據結構。我該如何做這樣的事情?該引擎將是一個在C/C++中開發的服務。從正在運行的網絡瀏覽器獲取HTML/DOMYO

+0

你是什麼意思得到元素的數據結構? – Sibi

+0

@Sibi任何有關交互發生的元素的信息是。它是一個按鈕,它是一個鏈接,等等?使用計算機視覺這種推論如果不是不可能的話,確實很難。 –

+0

以防萬一你沒有聽說過[heatmap](http://www.squidoo.com/heat-map)。 – Sibi

回答

1

如果您正在監控桌面環境,我對Linux環境有以下建議。

  1. 嘗試捕獲XWindow事件。由於像KDE,GNOME等窗口管理器是建立在它之上的,所以可能會給你更多的信息。
  2. 就瀏覽器而言,正如其他人所說的那樣,最好使用插件。它也是一個跨平臺的解決方案。

X事件觀察者的出發點爲here。希望這可以幫助你。

+0

謝謝你們的區別。雖然大多數興趣在於瀏覽器交互,但我不想排除其他桌面交互。乾杯! –

1

Firefox的Selenium plugin通常用於測試,它具有記錄/回放機制,可以記錄您正在查找的事件類型。

1

如果您的軟件可能提示用戶安裝瀏覽器擴展,那麼您可以輕鬆地爲每個瀏覽器編寫不同的擴展。這些寫起來相對簡單。

您可以找到一些可以嵌入到擴展中的開源代碼,例如Selenium代碼庫,或者簡單地使用JavaScript庫(jQuery?)來捕獲所有瀏覽器事件併發送看起來像用戶交互的事件(點擊,滾動等)以及DOM細節和任何其他數據。也許你的引擎公開了一個REST服務來進行集成。

雖然要注意性能 - 取決於發送的數量,您可能需要實現工作隊列和批量事件,否則可能會降低瀏覽器速度。

OTOH,如果你需要讓瀏覽器獨立,那麼我不相信你將能夠以編程方式確定支持屏幕像素的HTML/DOM結構。至少,不是用任何我知道的工具,邏輯支持這一點:因爲每個瀏覽器都使用自己的代碼庫來實現DOM操作和顯示,所以內存中的數據格式是任何人的猜測。

+0

這看起來像一個足夠簡單的解決方案。這是爲了研究,所以不需要提示,只有我和幾個測試人員在玩它。謝謝!我假設這隻適用於Firefox,但我可以在Chrome中做類似的事情? –

+0

Chrome應該是非常簡單的...只需用一個.js文件編寫一個具有魔力的擴展:https://developer.chrome.com/extensions/getstarted.html –