請問如何控制網頁中的ComboBox?! |
尚未結案
|
eric1705
一般會員 發表:8 回覆:9 積分:8 註冊:2005-05-25 發送簡訊給我 |
各位高手好, 站內爬文後,看到大部分的為控制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 發送簡訊給我 |
*標題有誤 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 發送簡訊給我 |
引言: *標題有誤 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 發送簡訊給我 |
引言: 我的問題有兩個: 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在這情形中, 三個button 都有各自的onclick javascript內容, 可以直接執行其onclick呼叫的內容 可參考 [webbrowser如何执行此情形的script?] http://delphi.ktop.com.tw/topic.php?TOPIC_ID=73698var 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; 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 發送簡訊給我 |
引言: 1. checkbox control :WebBrowser1.OleObject.Document.GetElementByID('checkboxName').click comboBox control :WebBrowser1.OleObject.Document.GetElementByID('ComboBoxName').SelectedIndex := 1 2. 取得網頁上物件的function 除了 GetElementByID 還有很多種, 請記得參考提供給你的資料因為我是用Delphi7,因此做了些小修改,如下:引言: 你可以使用下列幾個函數來取的HTML中的element getElementsByName(IHTMLElementCollection): 指定name的元素集合 getElementsByID(IHTMLElement): 指定id的元素 getElementsByTagName(IHTMLElementCollection): 指定tagName的元素集合 all(IHTMLElementCollection): 所有文件中元素集合 若你取得是IHTMLElementCollection,則以迴圈比對每個IHTMLElement特定property,來找到你要的element在這情形中, 三個button 都有各自的onclick javascript內容, 可以直接執行其onclick呼叫的內容 可參考 [webbrowser如何执行此情形的script?] http://delphi.ktop.com.tw/topic.php?TOPIC_ID=73698var 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;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; 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'>另外請教,如果網頁中沒有name,id,tagname是不是就無法用以下的function來處理??例如上述的"申報"按鈕,是不是只能利用script的方式執行?! getElementsByName(IHTMLElementCollection): 指定name的元素集合 getElementsByID(IHTMLElement): 指定id的元素 getElementsByTagName(IHTMLElementCollection): 指定tagName的元素集合 all(IHTMLElementCollection): 所有文件中元素集合 以上還請各位幫幫忙,謝謝! |
chris_shieh
高階會員 發表:46 回覆:308 積分:240 註冊:2004-04-26 發送簡訊給我 |
引言: <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 發送簡訊給我 |
引言:不好意思,執行的過程中出現: 另外請教,如果網頁中沒有name,id,tagname是不是就無法用以下的function來處理??例如上述的"申報"按鈕,是不是只能利用script的方式執行?! getElementsByName(IHTMLElementCollection): 指定name的元素集合 getElementsByID(IHTMLElement): 指定id的元素 getElementsByTagName(IHTMLElementCollection): 指定tagName的元素集合 all(IHTMLElementCollection): 所有文件中元素集合引言: <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 |
chris_shieh
高階會員 發表:46 回覆:308 積分:240 註冊:2004-04-26 發送簡訊給我 |
因為我們是從外面呼叫
所以應該是這樣
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 發送簡訊給我 |
引言: 因為我們是從外面呼叫 所以應該是這樣 script :='document.forms[0].sstep.value=' '''' 'I' '''' ';submit();'; Document.parentWindow.execScript(script,'JavaScript'); 如果沒有任何Name, ID 可供識別 通常Name Value 還是可以利用 或透過計算某物件為該集合中第幾個來取得該物件script :='document.forms[0].sstep.value=' '''' 'I' '''' ';submit();'; Document.parentWindow.execScript(script,'JavaScript'); 利用您上述的寫法,仍然出現"sstep未定義..."這個視窗. //利用FormNo ObjNo 透過計算某物件為該集合中第幾個來取得該物件 後來只有採行您提供的此種方法,總算可以解決自動click的問題. 感謝您多次的幫忙,先就此結案了. 至於script的做法,待另開個議題再討論了. 再次感謝您的幫助,也謝謝各位高手的提供意見!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型態檢查 @瞭解越多.懂得越少@ |
Ktop_Robot
站務副站長 發表:0 回覆:3511 積分:0 註冊:2007-04-17 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |