線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3736
推到 Plurk!
推到 Facebook!

請問如何控制網頁中的ComboBox?!

尚未結案
eric1705
一般會員


發表:8
回覆:9
積分:8
註冊:2005-05-25

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-09-06 12:09:43 IP:220.229.xxx.xxx 未訂閱
各位高手好,    站內爬文後,看到大部分的為控制Edits輸入 & Button(submit)按鈕的方法,想請問如果有ComboBox控制項或是其他控制項(checkbox..等),該如何控制勒?!    另外,如果有三個如下的submit,要怎麼按到"申報"這個項目勒?! 我用這樣..WebBrowser1.OleObject.Document.Forms.Item(0,0).submit;每次都點到"查詢"...:(    <input type='button' value='申報' ="sstep.value='U';submit();"> <input type='button' value='查詢' > 小弟為新手,如果能有個範例說明,真是感激不盡!!! 新手駕駛,請多包含. 發表人 - eric1705 於 2005/09/06 13:06:33
chris_shieh
高階會員


發表:46
回覆:308
積分:240
註冊:2004-04-26

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-09-06 14:26:49 IP:203.70.xxx.xxx 未訂閱
*標題有誤 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=18695 http://delphi.ktop.com.tw/topic.php?topic_id=74144 您可於進入網頁後,按下滑鼠右鍵"檢視原始碼",找出各個button 的name 假設各為 SubmitBtn, ModifyBtn, ApplyBtn WebBrowser1.OleObject.Document.GetElementByID('SubmitBtn').Click; //查詢 WebBrowser1.OleObject.Document.GetElementByID('ModifyBtn').Click; //修改 WebBrowser1.OleObject.Document.GetElementByID('ApplyBtn').Click; //申報 @瞭解越多.懂得越少@ 發表人 - chris_shieh 於 2005/09/06 15:38:49
eric1705
一般會員


發表:8
回覆:9
積分:8
註冊:2005-05-25

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-09-07 09:41:34 IP:220.229.xxx.xxx 未訂閱
引言: *標題有誤 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=18695 http://delphi.ktop.com.tw/topic.php?topic_id=74144 您可於進入網頁後,按下滑鼠右鍵"檢視原始碼",找出各個button 的name 假設各為 SubmitBtn, ModifyBtn, ApplyBtn WebBrowser1.OleObject.Document.GetElementByID('SubmitBtn').Click; //查詢 WebBrowser1.OleObject.Document.GetElementByID('ModifyBtn').Click; //修改 WebBrowser1.OleObject.Document.GetElementByID('ApplyBtn').Click; //申報 @瞭解越多.懂得越少@ 發表人 - chris_shieh 於 2005/09/06 15:38:49
感謝您的回答! 不好意思,可能我沒有說明的很清楚... 我的問題有兩個: 1.想請問如果有ComboBox控制項或是其他控制項(checkbox..等),該如何控制勒?! 2.如果有三個如下的submit,要怎麼按到"申報"這個項目勒?!(沒有name屬性的話該如何處理?!)--我用這樣..WebBrowser1.OleObject.Document.Forms.Item(0,0).submit;每次都點到"查詢"...:( **為避免變成圖形,我把前後的"<>"符號去掉,留下網頁原始碼. input type='button' value='申報' "sstep.value='I';submit();" input type='button' value='修改' "sstep.value='U';submit();" input type='button' value='查詢' "sstep.value='Q';submit();" 請各位大大再幫幫忙!
chris_shieh
高階會員


發表:46
回覆:308
積分:240
註冊:2004-04-26

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-09-07 12:05:02 IP:203.70.xxx.xxx 未訂閱
引言: 我的問題有兩個: 1.想請問如果有ComboBox控制項或是其他控制項(checkbox..等),該如何控制勒?! 2.如果有三個如下的submit,要怎麼按到"申報"這個項目勒?!(沒有name屬性的話該如何處理?!)--我用這樣..WebBrowser1.OleObject.Document.Forms.Item(0,0).submit;每次都點到"查詢"...:( **為避免變成圖形,我把前後的"<>"符號去掉,留下網頁原始碼. input type='button' value='申報' "sstep.value='I';submit();" input type='button' value='修改' "sstep.value='U';submit();" input type='button' value='查詢' "sstep.value='Q';submit();"
1. checkbox control :WebBrowser1.OleObject.Document.GetElementByID('checkboxName').click comboBox control :WebBrowser1.OleObject.Document.GetElementByID('ComboBoxName').SelectedIndex := 1 2. 取得網頁上物件的function 除了 GetElementByID 還有很多種, 請記得參考提供給你的資料
引言: 你可以使用下列幾個函數來取的HTML中的element getElementsByName(IHTMLElementCollection): 指定name的元素集合 getElementsByID(IHTMLElement): 指定id的元素 getElementsByTagName(IHTMLElementCollection): 指定tagName的元素集合 all(IHTMLElementCollection): 所有文件中元素集合 若你取得是IHTMLElementCollection,則以迴圈比對每個IHTMLElement特定property,來找到你要的element
var
  WB: TWebBrowser
  Document: HTMLDocument;
  Element: IHTMLElement;
  Elements: IHTMLElementCollection;
begin
  Document:= WB.Document as HTMLDocument;
  Elements:= Document.all as IHTMLElementCollection;
  for N1:= 0 to Elements.length-1 do
  begin
    Element:= Elements.item(N1,0) as IHTMLElement;
    //判斷指定屬性是否符合, 屬性可以用 Name, Value
    if 判斷值=Element.屬性 then
    begin
      Result:= Element; 
    end;
  end;
end;
在這情形中, 三個button 都有各自的onclick javascript內容, 可以直接執行其onclick呼叫的內容 可參考 [webbrowser如何执行此情形的script?] http://delphi.ktop.com.tw/topic.php?TOPIC_ID=73698
uses MSHTML_TLB...    var
  WebBrowser1: TWebBrowser;
  Document: IHTMLDocument;
  script:String;
begin
  Document:= WebBrowser1.Document as IHTMLDocument;
  script :='sstep.value=''I'';submit();'
  Document.parentWindow.execScript(script,'JavaScript');
end;
@瞭解越多.懂得越少@
eric1705
一般會員


發表:8
回覆:9
積分:8
註冊:2005-05-25

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-09-08 10:21:56 IP:220.229.xxx.xxx 未訂閱
引言: 1. checkbox control :WebBrowser1.OleObject.Document.GetElementByID('checkboxName').click comboBox control :WebBrowser1.OleObject.Document.GetElementByID('ComboBoxName').SelectedIndex := 1 2. 取得網頁上物件的function 除了 GetElementByID 還有很多種, 請記得參考提供給你的資料
引言: 你可以使用下列幾個函數來取的HTML中的element getElementsByName(IHTMLElementCollection): 指定name的元素集合 getElementsByID(IHTMLElement): 指定id的元素 getElementsByTagName(IHTMLElementCollection): 指定tagName的元素集合 all(IHTMLElementCollection): 所有文件中元素集合 若你取得是IHTMLElementCollection,則以迴圈比對每個IHTMLElement特定property,來找到你要的element
var
  WB: TWebBrowser
  Document: HTMLDocument;
  Element: IHTMLElement;
  Elements: IHTMLElementCollection;
begin
  Document:= WB.Document as HTMLDocument;
  Elements:= Document.all as IHTMLElementCollection;
  for N1:= 0 to Elements.length-1 do
  begin
    Element:= Elements.item(N1,0) as IHTMLElement;
    //判斷指定屬性是否符合, 屬性可以用 Name, Value
    if 判斷值=Element.屬性 then
    begin
      Result:= Element; 
    end;
  end;
end;
在這情形中, 三個button 都有各自的onclick javascript內容, 可以直接執行其onclick呼叫的內容 可參考 [webbrowser如何执行此情形的script?] http://delphi.ktop.com.tw/topic.php?TOPIC_ID=73698
uses MSHTML_TLB...    var
  WebBrowser1: TWebBrowser;
  Document: IHTMLDocument;
  script:String;
begin
  Document:= WebBrowser1.Document as IHTMLDocument;
  script :='sstep.value=''I'';submit();'
  Document.parentWindow.execScript(script,'JavaScript');
end;
因為我是用Delphi7,因此做了些小修改,如下:
   Document:= WebBrowser1.Document as IHTMLDocument2;
   script :='sstep.value='+''''+'I'+''''+';submit();';
   Document.parentWindow.execScript(script,'JavaScript');
執行上是沒問題,但會跳出"網頁找不到sstep參數...",小弟判斷可能是網頁指向的問題,因此把網址與原始碼post上來,還請各位指教. website: http://xxx.xxx.com.tw/server-java/t110sa05?step=0&id=xxxx&key=xxxx
<html><body background='../image/t33sf01.jpg'>

xx xx申報作業

<form action='/server-java/t110sa05' method='post'> <input type='hidden' name='id' value='xxxx'><input type='hidden' name='key' value='xxxx'><input type='hidden' name='TYPEK' value=''><input type='hidden' name='step' value='1'> <input type='hidden' name='sstep'> <input type='hidden' name='brk_no' value='xxxx'><b>xx代號及名稱: <select name='xxxx_id'><option value='xxxx'>xxxx</select> <input type='button' value='申報' ="sstep.value='U';submit();"> <input type='button' value='查詢' > </form>
</body></html>
另外請教,如果網頁中沒有name,id,tagname是不是就無法用以下的function來處理??例如上述的"申報"按鈕,是不是只能利用script的方式執行?! getElementsByName(IHTMLElementCollection): 指定name的元素集合 getElementsByID(IHTMLElement): 指定id的元素 getElementsByTagName(IHTMLElementCollection): 指定tagName的元素集合 all(IHTMLElementCollection): 所有文件中元素集合 以上還請各位幫幫忙,謝謝!
chris_shieh
高階會員


發表:46
回覆:308
積分:240
註冊:2004-04-26

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-09-08 11:41:05 IP:61.63.xxx.xxx 未訂閱
引言: <input type='hidden' name='sstep'>
這就是sstep 先試試看手動點下去會不會運作 改成這樣執行看看, 先個別執行 再連續執行 script :='sstep.value=' '''' 'I' ''''; Document.parentWindow.execScript(script,'JavaScript'); script :='submit()'; Document.parentWindow.execScript(script,'JavaScript'); @瞭解越多.懂得越少@ 發表人 - chris_shieh 於 2005/09/08 12:01:05
eric1705
一般會員


發表:8
回覆:9
積分:8
註冊:2005-05-25

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-09-08 12:26:43 IP:220.229.xxx.xxx 未訂閱
引言:
引言: <input type='hidden' name='sstep'>
這就是sstep 先試試看手動點下去會不會運作 改成這樣執行看看, 先個別執行 再連續執行 script :='sstep.value='+''''+'I'+''''; Document.parentWindow.execScript(script,'JavaScript'); script :='submit()'; Document.parentWindow.execScript(script,'JavaScript'); @瞭解越多.懂得越少@ 發表人 - chris_shieh 於 2005/09/08 12:01:05
不好意思,執行的過程中出現: 另外請教,如果網頁中沒有name,id,tagname是不是就無法用以下的function來處理??例如上述的"申報"按鈕,是不是只能利用script的方式執行?! getElementsByName(IHTMLElementCollection): 指定name的元素集合 getElementsByID(IHTMLElement): 指定id的元素 getElementsByTagName(IHTMLElementCollection): 指定tagName的元素集合 all(IHTMLElementCollection): 所有文件中元素集合
chris_shieh
高階會員


發表:46
回覆:308
積分:240
註冊:2004-04-26

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-09-08 14:04:48 IP:203.70.xxx.xxx 未訂閱
因為我們是從外面呼叫 所以應該是這樣 script :='document.forms[0].sstep.value='+''''+'I'+''''+';submit();'; Document.parentWindow.execScript(script,'JavaScript');    如果沒有任何Name, ID 可供識別 通常Name+Value 還是可以利用 或透過計算某物件為該集合中第幾個來取得該物件    
var
  Document: IHTMLDocument2;
  FormElements: IHTMLElementCollection;
  FormElem: IHTMLFormElement;
  fieldElem: OleVariant;
  fdType, fdName: string;
  FormNo, ObjNo: integer;
begin
      //利用Name   Value
  fdName := '申報';
  fdType := 'Button';
  FormElements := (Document.Forms) as IHTMLElementCollection;
  for i := 0 to FormElements.length - 1 do
  begin
    FormElem := FormElements.Item(i, 0) as IHTMLFormElement; // FormElem := FormElements.Item(FormNo, 0) as IHTMLFormElement;
    for j := 0 to FormElem.Length - 1 do
    begin
      fieldElem := FormElem.item(j, 0) as IHTMLElement;
      if (fieldElem.Name = fdName) and (fieldElem.Type = fdType) then //if FormNo=j then
      begin
        fieldElem.Click;
      end;
    end;
  end;      {//利用FormNo   ObjNo 透過計算某物件為該集合中第幾個來取得該物件
  FormNo := 0; //first form
  ObjNo := 0; // first obj, all objects include input/checkbox/radio/select/button....
  FormElements := (Document.Forms) as IHTMLElementCollection;
  if FormNo <= FormElements.length
  begin
    FormElem := FormElements.Item(FormNo, 0) as IHTMLFormElement;
    if ObjNo <= FormElem.length then
    begin
      fieldElem := FormElem.item(ObjNo, 0) as IHTMLElement;
      fieldElem.Click;
    end;
  end;
  }    end;    
ps. 沒有進行Obj型態檢查 @瞭解越多.懂得越少@
eric1705
一般會員


發表:8
回覆:9
積分:8
註冊:2005-05-25

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-09-09 12:20:15 IP:220.229.xxx.xxx 未訂閱
引言: 因為我們是從外面呼叫 所以應該是這樣 script :='document.forms[0].sstep.value=' '''' 'I' '''' ';submit();'; Document.parentWindow.execScript(script,'JavaScript'); 如果沒有任何Name, ID 可供識別 通常Name Value 還是可以利用 或透過計算某物件為該集合中第幾個來取得該物件
var
  Document: IHTMLDocument2;
  FormElements: IHTMLElementCollection;
  FormElem: IHTMLFormElement;
  fieldElem: OleVariant;
  fdType, fdName: string;
  FormNo, ObjNo: integer;
begin
      //利用Name   Value
  fdName := '申報';
  fdType := 'Button';
  FormElements := (Document.Forms) as IHTMLElementCollection;
  for i := 0 to FormElements.length - 1 do
  begin
    FormElem := FormElements.Item(i, 0) as IHTMLFormElement; // FormElem := FormElements.Item(FormNo, 0) as IHTMLFormElement;
    for j := 0 to FormElem.Length - 1 do
    begin
      fieldElem := FormElem.item(j, 0) as IHTMLElement;
      if (fieldElem.Name = fdName) and (fieldElem.Type = fdType) then //if FormNo=j then
      begin
        fieldElem.Click;
      end;
    end;
  end;      {//利用FormNo   ObjNo 透過計算某物件為該集合中第幾個來取得該物件
  FormNo := 0; //first form
  ObjNo := 0; // first obj, all objects include input/checkbox/radio/select/button....
  FormElements := (Document.Forms) as IHTMLElementCollection;
  if FormNo <= FormElements.length
  begin
    FormElem := FormElements.Item(FormNo, 0) as IHTMLFormElement;
    if ObjNo <= FormElem.length then
    begin
      fieldElem := FormElem.item(ObjNo, 0) as IHTMLElement;
      fieldElem.Click;
    end;
  end;
  }    end;    
ps. 沒有進行Obj型態檢查 @瞭解越多.懂得越少@
script :='document.forms[0].sstep.value=' '''' 'I' '''' ';submit();'; Document.parentWindow.execScript(script,'JavaScript'); 利用您上述的寫法,仍然出現"sstep未定義..."這個視窗. //利用FormNo ObjNo 透過計算某物件為該集合中第幾個來取得該物件 後來只有採行您提供的此種方法,總算可以解決自動click的問題. 感謝您多次的幫忙,先就此結案了. 至於script的做法,待另開個議題再討論了. 再次感謝您的幫助,也謝謝各位高手的提供意見!
Ktop_Robot
站務副站長


發表:0
回覆:3511
積分:0
註冊:2007-04-17

發送簡訊給我
#10 引用回覆 回覆 發表時間:2007-04-26 13:50:34 IP:000.000.xxx.xxx 未訂閱
提問者您好:


以上回應是否已得到滿意的答覆?


若已得到滿意的答覆,請在一週內結案,否則請在一週內回覆還有什麼未盡事宜,不然,
將由版主(尚無版主之區域將由副站長或站長)自由心證,選擇較合適之解答予以結案處理,
被選上之答題者同樣會有加分獎勵同時發問者將受到扣 1 分的處分。不便之處,請見諒。


有問有答有結案,才能有良性的互動,良好的討論環境需要大家共同維護,感謝您的配合。

------
我是機器人,我不接受簡訊.
系統時間:2024-05-06 16:45:29
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!