那个网页是不是动态生成的?
如*.php.*.asp等

解决方案 »

  1.   

    在线读取HTML后,先显示一下,
    再用Pos, 能不能显示很关键!
      

  2.   

    本机测试的HTML能用DOWN下的肯定能用,可能你在哪里疏忽了.
      

  3.   

    可能是要完全dwon下来才能pos吧
      

  4.   

    用的HTML控件?第三方控件就是这样的啦,我前一段用NMUDP等几个控件也是被搞得焦头烂额的,最后还是不得不自已编程摆平。
      

  5.   

    实际上,从网上读来的东西只是一个串。你是不是搞错了?
    用document.all(0,0)得到的网页的源程序存在了一个单一的串上。
      

  6.   

    大概我还没说清楚,我用的是TWebBrowser控件。我保证,HTML文档已经下载完成。
    因为我验证过下载下来的文档。好吧,我写一下部分源代码。其实并不需要保存
    文档,保存只是为了验证文档的完整性。主程序中
    ...
      WebBrowser.Navigate('www.sina.com.cn'); //以新浪为例
    ...然后在OnDocumentComplete中触发procedure TMainForm.OnDocumentComplete(Sender: TObject;
      const pDisp: IDispatch; var URL: OleVariant);
    begin
      if FFirstDisp=pDisp then  //FFirstDisp是在BeforeNavigate2取得的pDisp
      begin       //这一段主要是为了验证全文是否已下载完成
        FSuccess:=True;
        FHTMLStr:=GetHtml(FWBrowser);  //GetHtml函数返回string类型的值
        SearchResult;
      end;
    end;function TMainForm.GetHtml(const WebBrowser: TWebBrowser): string;
    const
      BufSize = $10000;
    var
      Size: Int64;
      Stream: IStream;
      hHTMLText: HGLOBAL;
      psi: IPersistStreamInit;
    begin
      if not Assigned(WebBrowser.Document) then Exit;  OleCheck(WebBrowser.Document.QueryInterface(IPersistStreamInit, psi));
      try
        //OleCheck(psi.GetSizeMax(Size));
        hHTMLText := GlobalAlloc(GPTR, BufSize);
        if 0 = hHTMLText then RaiseLastWin32Error;    OleCheck(CreateStreamOnHGlobal(hHTMLText,True, Stream));
        try
          OleCheck(psi.Save(Stream, False));      Size := StrLen(PChar(hHTMLText));
          SetLength(Result, Size);
          CopyMemory(PChar(Result), Pointer(hHTMLText),Size);
        finally
          Stream := nil;
        end;
      finally
        psi := nil;
      end;
    end;  //这个函数也不是我写的,不过它可以正常工作procedure TMainForm.SearchResult;
    begin
      if Pos('www.sina.com',FHTMLStr)>0 then
      begin
        //对其进行处理
      end;
    end;这段代码在本地硬盘已经能正常工作了,为了防止万一我还用了一个TStringList
    变量把FHTMLStr保存在硬盘上,然后再读出。我不知道问题出在哪里,还请大家不吝赐教。