如何从一个需要帐号密码的网站读取网页内容?(帐号、密码已知)

解决方案 »

  1.   

    automatically fill in web forms of a running IE instance?  { 
      This example shows how to automatically fill in a search string 
      in the "Search Tip" page and click the search button. 
    } uses 
      MSHTML_TLB; // first navigate to tipspage procedure TForm1.Button1Click(Sender: TObject); 
    begin 
      Webbrowser1.Navigate('http://www.swissdelphicenter.ch/en/tipsuchen.php'); 
    end; // Try to access IE instance and fill out the search field with 
    // a text and click the search button procedure TForm1.Button3Click(Sender: TObject); 
    var 
      hIE: HWND; 
      ShellWindow: IShellWindows; 
      WB: IWebbrowser2; 
      spDisp: IDispatch; 
      IDoc1: IHTMLDocument2; 
      Document: Variant; 
      k, m: Integer; 
      ovElements: OleVariant; 
      i: Integer; 
    begin 
      ShellWindow := CoShellWindows.Create; 
      // get the running instance of Internet Explorer 
      for k := 0 to ShellWindow.Count do 
      begin 
        spDisp := ShellWindow.Item(k); 
        if spDisp = nil then Continue; 
        // QueryInterface determines if an interface can be used with an object 
        spDisp.QueryInterface(iWebBrowser2, WB);     if WB <> nil then 
        begin 
          WB.Document.QueryInterface(IHTMLDocument2, iDoc1); 
          if iDoc1 <> nil then 
          begin 
            WB := ShellWindow.Item(k) as IWebbrowser2; 
            begin 
              Document := WB.Document;           // count forms on document and iterate through its forms 
              for m := 0 to Document.forms.Length - 1 do 
              begin 
                ovElements := Document.forms.Item(m).elements; 
                // iterate through elements 
                for i := 0 to ovElements.Length - 1 do 
                begin 
                  // when input fieldname is found, try to fill out 
                  try 
                    if (CompareText(ovElements.item(i).tagName, 'INPUT') = 0) and 
                      (CompareText(ovElements.item(i).type, 'text') = 0) then 
                    begin 
                      ovElements.item(i).Value := 'FindWindow'; 
                    end; 
                  except 
                  end; 
                  // when Submit button is found, try to click 
                  try 
                    if (CompareText(ovElements.item(i).tagName, 'INPUT') = 0) and 
                      (CompareText(ovElements.item(i).type, 'SUBMIT') = 0) and 
                      (ovElements.item(i).Value = 'Search') then  // Suchen für German 
                    begin 
                      ovElements.item(i).Click; 
                    end; 
                  except 
                  end; 
                end; 
              end; 
            end; 
          end; 
        end; 
      end; 
    end;
      

  2.   

    试了,可是系统说找不到MSHTML_TLB,是用了什么控件吗?我用的是Delphi6,或者有没有别的办法?
      

  3.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      postList: TStrings;
    begin
      Edit1.Text := 'http://community.csdn.net/expert/forum.asp';
      postList := TStringList.Create;
      try
        postList.Add('login_name=cronuz');
        postList.Add('password=XXX');
        memo1.Text := IdHTTP1.Post( Edit1.Text, postList );
      finally
        postList.Free;
      end;
    end;(注: 这可叫通CSDN的,你改成你的用戸名、密码試試)
      

  4.   

    可以直接对 WebBrowser 进行 Post 就可以了(把用户名、密码Post出去),Post成功后就可以随便操作了。至于PostData 的内容,你可以分析一下发出请求的 Form 的结构,或者通过监控 BeforeNavigate2 事件的 PostData 得到。详细的可以看:
    http://blog.csdn.net/zhengcg/archive/2004/08/05/65883.aspx如果你只是想获取登录后的HTML,用 TIdHttp 也不错的,具体使用看楼上的。TIdHttp 支持 Cookie 的,所以它连接保持情况跟浏览器一样的。