如何使用TIdHTTP中的字符串创建IHTMLDocument2?

Sad*_*deh 6 delphi indy html-parsing ihtmldocument

我下载了一个URL IdHTTP.Get,我需要搜索HTML标签并提取一些数据.

我怎样才能将IdHTTP.Get返回的字符串转换为IHTMLDocument2

Kee*_*per 5

试试这个:

uses
  ... Variants, MSHTML, ActiveX;

var Cache: string;
    V: OleVariant;
    Doc: IHTMLDocument2;
begin
  ...

  Cache := IdHTTP.Get(url);
  Doc := coHTMLDocument.Create as IHTMLDocument2; // create IHTMLDocument2 instance
  V := VarArrayCreate([0,0], varVariant);
  V[0] := Cache;
  Doc.Write(PSafeArray(TVarData(v).VArray)); // write data from IdHTTP

  // Work with Doc
end;
Run Code Online (Sandbox Code Playgroud)


Sad*_*deh 3

我用谷歌搜索了这个问题,我可以找到一个很好的代码:

Idoc := CreateComObject(Class_HTMLDOcument) as IHTMLDocument2;
try
  IDoc.designMode := 'on';
  while IDoc.readyState <> 'complete' do
    Application.ProcessMessages;
  v := VarArrayCreate([0, 0], VarVariant);
  v[0] := MyHTML;
  IDoc.Write(PSafeArray(System.TVarData(v).VArray));
  IDoc.designMode := 'off';
  while IDoc.readyState <> 'complete' do
    Application.ProcessMessages;

  ParseHTML(IDoc);
finally
  IDoc := nil;
end;
Run Code Online (Sandbox Code Playgroud)

问候

  • 我不会使用该代码。不需要所有“designMode”和“Application.ProcessMessages”来检查“readyState”。您无需切换到“designMode=on”即可写入“IHTMLDocument”。我强烈建议你使用@Keeper的代码。 (3认同)