思路大概這個(gè)樣子,把WebBrowser數(shù)據(jù)寫(xiě)到流里面,然后將流寫(xiě)入字符串,進(jìn)行一部分替換以后,再將字符串寫(xiě)入流,再載入WebBrowser中。大概的功能就是,在某個(gè)網(wǎng)站提交表單中加入某個(gè)提交項(xiàng),然后一起提交。
本人剛學(xué)Delphi沒(méi)多久,下面的問(wèn)題沒(méi)辦法解決了,眼淚阿 T_T
我貼出原碼部分:
______________________________________________________________________
這段是從網(wǎng)上找來(lái)的LoadStream和 SaveDocumentSourceToStream
procedure LoadStream(WebBrowser: TWebBrowser; Stream: TStream);
var
PersistStreamInit: IPersistStreamInit;
StreamAdapter: IStream;
MemoryStream: TMemoryStream;
begin
{Load empty HTML document into Webbrowser to make "Document" a valid HTML document}
WebBrowser.Navigate('about:blank');
{wait until finished loading}
repeat
Application.ProcessMessages;
Sleep(0);
until
WebBrowser.ReadyState = READYSTATE_COMPLETE;
{Get IPersistStreamInit - Interface}
if WebBrowser.Document.QueryInterface(IPersistStreamInit, PersistStreamInit) = S_OK then
begin
{Clear document}
if PersistStreamInit.InitNew = S_OK then
begin
{Make local copy of the contents of Stream if you want to use Stream directly, you have to
consider, that StreamAdapter will destroy it automatically}
MemoryStream:= TMemoryStream.Create;
try
MemoryStream.CopyFrom(Stream, 0);
MemoryStream.Position:= 0;
except
MemoryStream.Free;
raise;
end;
{Use Stream-Adapter to get IStream Interface to our stream}
StreamAdapter:= TStreamAdapter.Create(MemoryStream, soOwned);
{Load data from Stream into WebBrowser}
PersistStreamInit.Load(StreamAdapter);
end;
end;
end;
procedure SaveDocumentSourceToStream(Document: IDispatch; Stream: TStream);
var
PersistStreamInit: IPersistStreamInit;
StreamAdapter: IStream;
begin
Stream.Size := 0;
Stream.Position := 0;
if Document.QueryInterface(IPersistStreamInit, PersistStreamInit) = S_OK then
begin
StreamAdapter := TStreamAdapter.Create(Stream, soReference);
PersistStreamInit.Save(StreamAdapter, False);
StreamAdapter := nil;
end;
end;
_____________________________________________________________
下面是替換功能部分:
procedure TForm1.Button2Click(Sender: TObject);
var
SS: TStringStream;
SS3: TStringStream;
Document: IDispatch;
ss1 : String;
ss2 : String;
begin
SS := TStringStream.Create('');
try
SaveDocumentSourceToStream(WebBrowser1.Document, SS);
ss1 := SS.DataString ;
ss2 := AnsiReplaceText(ss1,'</form>','加入的代碼</form>');
SS.Free;
SS3 := TStringStream.Create(ss2);
LoadStream(WebBrowser1, SS3);
finally
SS3.Free;
end;
end;
——————————————————————————————————————————
問(wèn)題是~~替換是能替換~~~可是顯示出來(lái)的可就不是那么回事了:
http://img226./img226/7395/1zs7.jpg
http://img208./img208/9917/2ba0.jpg
最后一個(gè)最不明白~~為啥路徑都變成about.blank:了。。。。那個(gè)不是初始化的代碼么 T-T
http://img142./img142/3694/3vf6.jpg
還是我的思路根本就錯(cuò)了?
望高人指點(diǎn)!