全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1502
推到 Plurk!
推到 Facebook!

使用WebBrowser元件控制網頁,在WinXP SP2 遇到怪問題

尚未結案
kakene
一般會員


發表:22
回覆:52
積分:19
註冊:2003-01-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-07-09 00:20:03 IP:58.99.xxx.xxx 未訂閱
一開始在此網頁輸入帳號,SUBMIT 之後跳到第二網頁 https://goodlock.gamania.com/GamaGoodLock.aspx 問題在第二網頁的元件,只有WinXP SP2 會抓不到 win2000完全可以運作    以下是我的程式
var
  a,Docs : oleVariant;
BEGIN
  Docs :=Web_Browser.OleObject.Document.documentelement.document;
  a :=Docs.all.Item('tbAccount', 0);
  a.Value :=Edit1.Text;      a :=Docs.all.Item('btSubmit', 0);
  a.click;      a :=Docs.all.Item('ddlDelayTime', 0);
  a.Value :='100';//到這行就出錯了
.......
請各位前輩指導~~
jeff377
初階會員


發表:9
回覆:60
積分:33
註冊:2004-08-10

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-07-09 07:58:11 IP:211.75.xxx.xxx 未訂閱
你發生的問題應該是HTML還沒被完全下載所導致,所以才會存取某個HTMLElement發生錯誤。
  a :=Docs.all.Item('btSubmit', 0);
  a.click;
上述Submit後會重新回Server端取得下一頁HTML,而你要判斷下一頁是否完全下載完成,才能接下執行下面程序
  a :=Docs.all.Item('ddlDelayTime', 0);
  a.Value :='100';//到這行就出錯了
發表人 - jeff377 於 2005/07/09 08:02:16
kakene
一般會員


發表:22
回覆:52
積分:19
註冊:2003-01-07

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-07-09 22:43:42 IP:58.99.xxx.xxx 未訂閱
不好意思,漏PO幾行程式, 我有等網頁完成才繼續執行程式
var
  a,Docs : oleVariant;
BEGIN
  Docs :=Web_Browser.OleObject.Document.documentelement.document;
  a :=Docs.all.Item('tbAccount', 0);
  a.Value :=Edit1.Text;      a :=Docs.all.Item('btSubmit', 0);
  a.click;

//網頁開啟完成 gs_webstate ='OK';
  while gs_webstate <> 'OK' do
  begin
    application.ProcessMessages;
    if gs_canclose ='Y' then
      exit;
  end;
  gs_webstate :='';      a :=Docs.all.Item('ddlDelayTime', 0);
  a.Value :='100';//到這行就出錯了
.......    //網頁開啟完成 gs_webstate ='OK';
procedure TMainForm.Web_BrowserDocumentComplete(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
begin
  gs_webstate := 'OK';
end;    
Clarinet
高階會員


發表:9
回覆:97
積分:126
註冊:2002-05-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-07-15 13:41:43 IP:61.30.xxx.xxx 未訂閱
引言: 不好意思,漏PO幾行程式, 我有等網頁完成才繼續執行程式
var
  a,Docs : oleVariant;
BEGIN
  Docs :=Web_Browser.OleObject.Document.documentelement.document;
  a :=Docs.all.Item('tbAccount', 0);
  a.Value :=Edit1.Text;      a :=Docs.all.Item('btSubmit', 0);
  a.click;

//網頁開啟完成 gs_webstate ='OK';
  while gs_webstate <> 'OK' do
  begin
    application.ProcessMessages;
    if gs_canclose ='Y' then
      exit;
  end;
  gs_webstate :='';      a :=Docs.all.Item('ddlDelayTime', 0);
  a.Value :='100';//到這行就出錯了
.......    //網頁開啟完成 gs_webstate ='OK';
procedure TMainForm.Web_BrowserDocumentComplete(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
begin
  gs_webstate := 'OK';
end;    
a :=Docs.all.Item('ddlDelayTime', 0); a.Value :='100';//到這行就出錯了 這二行的第一行,使用的Docs是上一個網頁輸入帳號密碼的物件變數 Submit之後,已經變換成功一個網頁了。因此此處的Docs變數,當然是錯的,所以取出的a 是nil 所以,你應該要再重新指定一次Docs變數。 即在這二行之前加入一行 Docs :=Web_Browser.OleObject.Document.documentelement.document; GPS(全球衛星定位系統) http://www.allgps.com
------
GPS(全球衛星定位系統)
http://www.allgps.com
kakene
一般會員


發表:22
回覆:52
積分:19
註冊:2003-01-07

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-07-17 21:38:49 IP:58.99.xxx.xxx 未訂閱
改完程式,請xp xp2 的朋友測試 已經可以用了 但是,win2000 跟 XP XP1 之前都可以用 真是納悶 再次感謝~~
系統時間:2024-04-27 10:44:30
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!