如何从网站文本框中检索文本

时间:2009-09-18 08:36:29

标签: delphi browser

如何从delphi中的网站文本框中检索文本,例如假设我键入 谷歌搜索框中的“老虎”如何从搜索框中检索文本wm_gettext或getwindowtext的工作原理? 我正在使用delphi 7

2 个答案:

答案 0 :(得分:3)

试试这段代码。

仅适用于Internet Explorer 。在Windows Vista,IE8和Delphi 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;

修改:

不幸的是,Omar没有解决您问题的简单方法。这是因为每个浏览器使用不同的界面来与信息交互。

以下是一些建议

  • Firefox使用XPCOM,您可以对此进行研究。
  • 尝试使用DDE(动态数据交换)。
  • 您可以使用WatiN,这是一个与Firefox和iexplorer一起使用的.net库。你可以看到this article来学习如何与delphi win32中的.net程序集进行交互。

再见。

答案 1 :(得分:0)

最简单的方法是在页面的原始HTML代码上使用正则表达式。