2009-09-18 83 views
0

我如何檢索文本從德爾福的網站文本框例如假設我在谷歌搜索框中鍵入 ''虎''如何從該搜索框中檢索文本將wm_gettext或getwindowtext工作? 我正在使用delphi 7如何檢索網站文本框中的文本

+0

您是否試圖從Internet Explorer的正在運行的實例中獲取文本?或者一個tWebBrowser組件? – skamradt 2009-09-18 15:51:25

+0

我想從一個正在運行的Internet Explorer/firefox /其他某個瀏覽器的實例中獲取文本 – 2009-09-19 05:19:23

回答

3

試試這段代碼。

只適用於Internet Explorer。在Windows Vista中,IE8ÿ德爾福測試2007

Uses 
SHDocVw, 
mshtml; 

procedure GetTextFromEditIExplorer(ListStr: TStringList); 
var 
    ShellWindow   : IShellWindows; 
    Web_Browser   : IWebbrowser2; 
    reg_Shell_window  : IDispatch; 
    Dummy     : IHTMLDocument2; 
    ovElements    : OleVariant; 
    Document    : Variant; 
    WindowsCount   : Integer; 
    ElementsCount   : Integer; 
    FormsCount    : Integer; 
begin 
    ShellWindow := CoShellWindows.Create; //Provides access to the collection of open Shell windows 
    for WindowsCount := 0 to ShellWindow.Count do  //iterate through number of windows in the Shell windows collection 
    begin 
    reg_Shell_window := ShellWindow.Item(WindowsCount);  //Returns the registered Shell window for a specified index. 
    if reg_Shell_window = nil then Continue; //go to next reg window 
    reg_Shell_window.QueryInterface(iWebBrowser2, Web_Browser); // determines if an interface can be used with an object 
    if Web_Browser <> nil then 
    begin 
     Web_Browser.Document.QueryInterface(IHTMLDocument2, Dummy); 
     if Dummy <> nil then 
     begin 
     Web_Browser  := ShellWindow.Item(WindowsCount) as IWebbrowser2; 
     Document  := Web_Browser; 
      for FormsCount := 0 to Document.forms.Length - 1 do 
      begin 
      ovElements := Document.forms.Item(FormsCount).elements; 
      for ElementsCount := 0 to ovElements.Length - 1 do 
      begin 
       try 
       if (CompareText(ovElements.item(ElementsCount).tagName, 'INPUT') = 0) and (CompareText(ovElements.item(ElementsCount).type, 'text') = 0) then 
       ListStr.Add('Control Name ['+ovElements.item(ElementsCount).Name+']'+' Type -> '+ovElements.item(ElementsCount).Type+' -> Value ['+ovElements.item(ElementsCount).Value+']'); 
       except 
       ListStr.Add('Error Reading element n° '+IntToStr(ElementsCount)); 
       end; 
      end; 
      end; 
     end; 
    end; 
    end; 
end; 

procedure TForm1.btn1Click(Sender: TObject); 
var 
List : TStringList; 
begin 
    List:=TStringList.Create; 
    GetTextFromEditIExplorer(List); 
    ShowMessage(List.Text); 
end; 

編輯:

奧馬爾遺憾的是沒有簡單的解決您的問題。這是因爲每個瀏覽器都使用不同的界面來與信息進行交互。

這裏有一些建議

  • Firefox使用XPCOM,你可以研究一下。
  • 嘗試使用DDE(動態數據交換)。
  • 您可以使用WatiN,它是一個與firefox和iexplorer一起工作的.net庫。你可以看到this article以瞭解如何與delphi win32中的.net程序集進行交互。

再見。

+0

感謝rruz :)這段代碼似乎很難!是他們更簡單的方法嗎?我不是說我不能夠使用這段代碼,但生病了,必須學習一些新的東西,如ole和東西,其次,我想趕上從Firefox的編輯框。 – 2009-09-19 07:21:32

+0

+1好回答RRUZ。我同意沒有簡單的方法來實現這一點,特別是如果要支持多個瀏覽器。很遺憾,這種事情沒有共同的鉤子。 – Argalatyr 2009-09-20 17:03:48

+0

謝謝,我已經使用dde從瀏覽器中成功地獲取網址,但我發現如何使用dde從網頁的文本框中檢索文本的任何幫助。你可以指出使用dde來完成這個任何例子 – 2009-09-21 08:32:03

0

最簡單的方法是使用頁面原始HTML代碼的正則表達式。

+0

但是您可以在公共瀏覽器上運行實例嗎?請幫忙! – 2009-09-20 04:12:51

相關問題