for K := 0 to Form1.WebBrowser4.OleObject.Document.all.tags('span').Length - 1 do begin str1 := Form1.WebBrowser4.oleobject.document.all.tags('span').item(K).innertext; if ansicontainsstr(str1,'write a comment') then begin Form1.WebBrowser4.oleobject.document.all.tags('span').item(K).click; break; end; end; 这是模拟点击网页中的1个元素!
function TForm1.GetData(url:string): string; var responseText: WideString; xmlHttp: oleVariant; begin Result:=''; try xmlHttp:=CreateOleObject('Msxml2.XMLHTTP'); xmlHttp.open('GET',url,false); xmlHttp.send(); responseText:=xmlHttp.responseText; if xmlHttp.status='200' then begin Result:=responseText; end; xmlHttp := Unassigned; except Result:=''; end; end;procedure TForm1.Button1Click(Sender: TObject); begin Memo1.lines.text:=GetData('xxxxx?参数1=...') end;
Web服务器只是根据你的请求返回给你一串HTML,浏览器把这串HTML展示给你,就是你看到的客户端页面
页面永远是存在于客户端(浏览器端)的,是静态的,不存在交互的说法
////Default2.aspx
<%@ Page Language="C#" %><%
Page.Response.Write(Page.Request["QS"]);
%>procedure TForm1.Button1Click(Sender: TObject);
var
SS: TStringList;
Stream: TStringStream;
begin
Stream := TStringStream.Create('');
SS := TStringList.Create;
SS.Add('QS=eefffsssss');
Self.IdHTTP1.Post('http://xxxxxxxxx/Default2.aspx', SS, Stream);
Showmessage(Stream.DataString);
SS.Free;
Stream.Free;
end;
http://blog.csdn.net/CathyEagle/archive/2004/08/09/69607.aspx
在浏览器地址栏输入
http://xxxxxxxxx/Default2.aspx?QS=eefffsssss
回车后返回的HTML页面内容是:
eefffsssss
for K := 0 to Form1.WebBrowser4.OleObject.Document.all.tags('span').Length - 1 do
begin
str1 := Form1.WebBrowser4.oleobject.document.all.tags('span').item(K).innertext;
if ansicontainsstr(str1,'write a comment') then begin
Form1.WebBrowser4.oleobject.document.all.tags('span').item(K).click;
break;
end;
end;
这是模拟点击网页中的1个元素!
1、在程序的界面里要呈现网页,除了webBrower控件,还有其他的没。
2、程序传入参数给网页。
目前,我只是用在URL后加参数的方式,还有没有其他简单的方式
3、网页执行结果后,返回结果给程序,这个该如何实现能不能举个简单的例子?
function TForm1.GetData(url:string): string;
var
responseText: WideString;
xmlHttp: oleVariant;
begin
Result:='';
try
xmlHttp:=CreateOleObject('Msxml2.XMLHTTP');
xmlHttp.open('GET',url,false);
xmlHttp.send();
responseText:=xmlHttp.responseText;
if xmlHttp.status='200' then
begin
Result:=responseText;
end;
xmlHttp := Unassigned;
except
Result:='';
end;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.lines.text:=GetData('xxxxx?参数1=...')
end;
隐患:
1.不安全,容易被用户看到
2.提交数量有大小限制(使用GET来提交时,QueryString是放到HTTP HEADERS中的,HTTP协议对HEADER大小有限制)
所以用INDYHTTP.POST方法来实现表单数据的提交(这时提交的数据是放到POST DATA中)