如何读出TWebbrowser中的INPUT框里的内容(包括滚动文本框和下拉框)? (0分)

我看起來是沒啥問題,你可以自己追蹤一下.....


一樣用阿里巴巴的网站
http://china.alibaba.com/bin/user/signin

如果有提交的話,由於沒有鍵入 ID & PW ,所以刷新後的頁面
會多出 「错误!密码不正确,请再试一次。 」的字句。

 
你直接进入阿里巴巴的发布信息。
试一下发布信息的提交按钮。
http://china.alibaba.com/bin/offer/post/7.html。
还有此方法在ie4下无法自动填写,有何方法可解决。
 
阿里巴巴的网站你试了,行吗?我还是无法点击。
还有一问题请教你,假如的频繁读入网页在webbrowser这样内存会逐渐减少,这是为何?
 
去 MS 查過了 IHTMLFORMELEMENT 最低就是 IE4 ,不過 IHTMLInputElement 最低卻是
IE5 ,所以,IE4 最多就是提交表單囉,自動填寫就無望了。


試過啦,依舊可行。

內存減少,我的也會呀,不過尚在可接受範圍。(還沒試過長時間執行都不
卸下。) ^^

 
可我的内存逐渐减少,到最后连自身的应用程序都瘫痪掉。
内存减少是由于什么原因?没有对策吗?
 
到底是哪里浪费了内存?
 
到底是哪里浪费了内存?
 
很遺憾!不知,因為我的程序也有調用記憶體,所以無法察看,
最佳察看方式應為程序中只有一個 WebBrowser ,並且無其他
指令了。
 
太感谢你了!能给个你的mail吗?
我的mail :dana@shd.com.cn
我不明白到底是什么原因,只要程序多运行一会儿内存就不断的减少,
是因为装入了网页吗?
 
你很忙是吗?
我检查了好多遍程序,是因为putdata的那个过程,使用到IHTMLElementCollection
这些,可是我不知道如何减少或避免内存的的泄露,
要不我的程序运行不到10分钟就得说bye-bye而告终。
这样太可怕!
 
我的是 jiichen@bigfoot.com

不過找我還是用大富翁的版面好,不然我會收到亂碼信!


應該不會這麼誇張吧,我試著運行了十分鐘,也算還好。
可以看看 NetCaptor 這類運用 IE 核心的瀏覽器,基本上,
他們沒有問題的話,那就算 OK.
 
我也是这么想的,可是不知为何我的程序偏偏运行一会儿,
内存就不断的减少,一直不明白是哪里出错。
跟踪到最后发现的是调用了你写的过程,putdata
因为我是填写注册信息所以要填的数据较多,我不断的循环数据库进行以下这个过程,
我用else这样应该没问题吧!而且使用全局变量,在本过程循环应该也没问题吧!

function PutData1(www:twebbrowser):boolean;
var spDisp: IDispatch; j: integer;S2,ls1,ls2,ls3,ls4,ls5 : string; IDoc1: IHTMLDocument2;
iELC : IHTMLElementCollection ; HtmlInputEle : IHTMLInputElement;
HtmlInputEle1:IHTMLselectelement;HtmlInputEle2:IHtmlTextAreaElement;
begin
with wjyx_for do
begin
try
if www <> nil then
begin
www.Document.QueryInterface(IHTMLDocument2,iDoc1);
if iDoc1 <> nil then
begin
ielc:=idoc1.Get_all;
for j:=0 to ielc.length-1 do
begin
Application.ProcessMessages;
spDisp := ielc.item(J, 0);
if SUCCEEDED(spDisp.QueryInterface(IHTMLselectelement,HtmlInputEle1))then //下拉框
begin
if HtmlInputEle1.name=ls1 then HtmlInputEle1.value :=sea_comb(w_v_sf,v_sf) //省份
else if HtmlInputEle1.name=ls2 then HtmlInputEle1.value :=sea_comb(w_v_sshy,fb_lb) //所属行业
else if HtmlInputEle1.name=ls5 then HtmlInputEle1.value :=sea_comb(w_v_gj,v_yh_gj); //国家
end
else
if SUCCEEDED(spDisp.QueryInterface(IHtmlTextAreaElement,HtmlInputEle2))then //内容
begin
if HtmlInputEle2.name=w_xxnr then HtmlInputEle2.value :=xxnr.text; //内容
end
else
if SUCCEEDED(spDisp.QueryInterface(IHTMLInputElement ,HtmlInputEle))then //文本框
with HtmlInputEle do
begin
S2:=Type_; // password
S2:=UpperCase(S2);
if (StrComp(PChar(S2),'TEXT')=0)or (StrComp(PChar(S2),'PASSWORD')=0) then
begin
if HtmlInputEle.name=w_titl then HtmlInputEle.value :=title.text //标题
else if HtmlInputEle.name=w_gsmc then HtmlInputEle.value :=gsmc //公司名称
else if HtmlInputEle.name=w_mm then HtmlInputEle.value :=wj_mm //密码
else if HtmlInputEle.name=w_yb then HtmlInputEle.value :=yb //邮编
else if HtmlInputEle.name=w_gj then HtmlInputEle.value :=v_yh_gj; //国家
end
else // or (StrComp(PChar(S2),'RADIO')=0 )
if (StrComp(PChar(S2),'CHECKBOX')=0) then
begin
checked := True;
end;

end;
end; //END FOR
end;
result:=true;
end
else result:=false;
except
result:=false;
end;

end;
end;



 
只要这个循环30次内存至少减了10%
var IDoc1: IHTMLDocument2;
begin
for i:=0 to 30 do
begin
web.Document.QueryInterface(IHTMLDocument2,iDoc1);
end;
end;
 
问题已解决了,谢谢您的帮忙。
var IDoc1: IHTMLDocument2;
Hr:HRESULT;
begin
for i:=0 to 30 do
begin
Hr:=webbrowser.Document.QueryInterface(IHTMLDocument2,iDoc1);
if Successed(Hr) then
IDoc1._Release;
end;
end;
 
我記得有看過 IUnknown._AddRef & IUnknown._Release 編譯器會自動呼叫,
所以,需要 IDoc1._Release; 這一行嗎?
 
不明白这一句是什么意思,(IUnknown._AddRef & IUnknown._Release 編譯器會自動呼叫)
我用了IDoc1._Release 以后内存会释放,要是不用就不行。
 
接受答案了.
 
顶部