Конференция "Сети" » WebBrowser. Как вытянуть содержимое фрейма после загрузки страниц [D7, WinXP]
 
  • Delins (05.10.09 12:58) [0]
    Код ниже авторизуется на сайте.

    function TForm1.AuthInSite(Ed1,Ed2:String) : Boolean;
    var
     vWebAddr, vPostData, vFlags, vFrame, vHeaders: OleVariant;
     iLoop: Integer;
     stPostData: String;
    begin
     try
       vHeaders:= 'Content-Type:application/x-www-form-urlencoded'+ #10#13#0;
       stPostData:='uname='+Ed1+'&upass='+Ed2;
       vPostData:= VarArrayCreate([0, Length(stPostData)], varByte);
       for iLoop := 0 to Length(stPostData)- 1 do
         begin
           vPostData[iLoop]:= Ord(stPostData[iLoop+1]);
         end;
       vPostData[Length(stPostData)]:= 0;
       vWebAddr:=''; // Тут указывается адрес сайта
       vFlags:=navNoWriteToCache;
       vFrame:=2;
       try
         WebBrowser.Navigate2(vWebAddr,vFlags,vFrame,vPostData,vHeaders);
       except
         on EVariantError do
           MessageDlg('Ошибка', mtError, [mbOK], 0);
       end;
       Result:=true;
     except
       Result:=false;
     end;
    end;


    Далее необходимо вытянуть содержимое первого фрейма.

    function DataFromFrame(WebBrowser : TWebBrowser) : Boolean;
     For i := 0 to WebBrowser.OleObject.Document.frames.Length - 1 do
      begin
        iw := GetFrame(WebBrowser, i);
        AStream := TMemoryStream.Create;
        try
          IpStream := iw.document as IPersistStreamInit;
          if ((Succeeded(IpStream.save(TStreamadapter.Create(AStream), True))) And (i=0)) then
          begin
            AStream.Seek(0, 0);
            sl := TStringList.Create;
            sl.LoadFromStream(AStream);
            sl.SaveToFile(GetEnvironmentVariable('Temp')+'\'+ ComboBox1.Items.Strings[ListBox1.ItemIndex] + '.txt');
           sl.Free;
          end;
        except
        end;
        AStream.Free;
      end;
     end;
    end;


    Все это работает, но вытягивать содержимое нужно после полной загрузки в WebBrowser'e
    Если указать код в такой последовательности:

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    If AuthInSite(Edit1.text,Edit2.text) then
    DataFromFrame(WebBrowser);
    end;


    То данные не выдергиваются, так как страница еще не загрузилась.
    Пробовал прописывать выполнение функции DataFromFrame(WebBrowser); в OnDownloadComplete Но данные все равно не вытягиваются. Возможно из-за фреймов (то есть страница загружается, срабатывает OnDownloadComplete, а содержимое фреймов еще загружается)

    Не знаю куда дальше рыть, чтобы можно было вытягивать данные фрейма не нажатием кнопки, а стразу после полной загрузки.
 
Конференция "Сети" » WebBrowser. Как вытянуть содержимое фрейма после загрузки страниц [D7, WinXP]
Есть новые Нет новых   [134437   +29][b:0][p:0.001]