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

如何使用IdHTTP來控制網頁button及寫入data到edit

答題得分者是:RedSnow
0702
一般會員


發表:7
回覆:10
積分:3
註冊:2005-04-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-06-01 10:16:48 IP:61.221.xxx.xxx 未訂閱
如題我有一個網頁希望透過一個小程式來更改一些值 一開始的登入我已經試出來了程式碼如下 fs:=TMemoryStream.Create; Form1.IdHTTP1.Request.Username:='123456'; Form1.IdHTTP1.Request.Password:='123456'; Form1.IdHTTP1.Request.BasicAuthentication:=true; Form1.IdHTTP1.Get('http://192.168.1.254:8090/lan',fs); SetLength(buf,fs.Size); fs.Position:=0; fs.ReadBuffer(buf[1],fs.Size); Form1.Memo1.Lines.Text:=buf; fs.Free; 透過上面的程式我可以正確的讀到源碼但是我無法控制網頁的edit及button 請教各位先進有人有試過利用idhttp這個元件來控制網頁嗎 以下是我想要控制的網頁元件格式 (input type=submit name=submit value=Apply) (input type=text name=ip size=20 maxlength=15 value="192.168.1.254")
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-06-02 15:29:08 IP:200.226.xxx.xxx 未訂閱
0702 您好:    您的方向可能抓錯了,IdHTTP 好像不太適合做您所要的動作,建議您改個方向,不妨試著用 WebBrowser 來處理,以下幫您找了數篇討論資料,參考一下吧: 如何在搜尋網頁上輸入條件後取得結果 http://delphi.ktop.com.tw/topic.php?topic_id=53588 如何在巳開的ie網頁裡的輸入框內輸入資料呢? http://delphi.ktop.com.tw/topic.php?topic_id=47975 在WebBrowser裡填寫表單的問題 http://delphi.ktop.com.tw/topic.php?topic_id=42147 如何在WebBrowser中設定由Button按下Subbmit及同時送出參數 http://delphi.ktop.com.tw/topic.php?topic_id=35576
0702
一般會員


發表:7
回覆:10
積分:3
註冊:2005-04-09

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-06-02 16:38:09 IP:61.221.xxx.xxx 未訂閱
RedSnow兄謝謝您的建議,我現在的問題是在於一開始的登入視窗是彈跳視窗不是一般的html的樣式,我現在遇到的麻煩是我如果用idhttp可以登入,但無法對網頁做控制,如果我用WebBrowser就無法輸入username,password,但可以對網頁做控制(我自己手動輸入),這是我遇到的問題再一次感謝您的建議
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-06-02 18:31:16 IP:200.226.xxx.xxx 未訂閱
0702 您好: 那能不能將兩者合併起來,用 IdHTTP 登入,然後再透過 WebBrowser 去控制網頁呢? 如果我仍舊誤解了您的意思,可否請您將流程與問題再描述得詳細些,這樣子有助於大家幫忙找出問題的所在。
0702
一般會員


發表:7
回覆:10
積分:3
註冊:2005-04-09

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-06-03 10:00:08 IP:61.221.xxx.xxx 未訂閱
RedSnow兄您好小弟我最近試了很多次就是無法將idhttp與WebBrowser 合用(所以我才在這裡提問題)最上面是我登入的程式段,我一旦登入後網頁的控制權就在idhttp元件上了,如果我再用WebBrowser.Navigate去連結就會再開一個新的網頁且登入視窗又會跳出來我也試過用idhttp登入後將網頁源碼下載交給WebBrowser可是WebBrowser好像只是將源碼翻譯出來並沒有實際的連上真正的網頁,我最近也一直在試其他的方式但是總覺得就像RedSnow兄所說的將WebBrowser和idhttp合用就好了,利用idhttp來控制登入,登入後將網頁交由WebBrowser來控制,只是現在我還是無法將這兩個元件合用請教RedSnow兄及各位先進同好有沒有辦法將這兩個元件合用呢?謝謝RedSnow兄不厭其煩的指點謝謝您
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-06-03 10:50:41 IP:219.137.xxx.xxx 未訂閱
0702 您好:    您要處理的網頁是 "固定" (某個特定) 的,還是 "非固定" (不特定是那一個) 的?如果是固定的,可否將網頁檔上傳到 "會員求助程式檔案上傳區",然後也描述一下其它的相關設定,這樣子比較方便模擬您的環境與針對您的需要來做測試。
0702
一般會員


發表:7
回覆:10
積分:3
註冊:2005-04-09

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-06-03 11:25:41 IP:61.221.xxx.xxx 未訂閱
RedSnow兄您好: 因為這個網頁是要用來控制router更改自己的ip所以是要有這個router 才能進入這個網頁(網頁的程式碼也是燒在裡面的)也才能模擬這個環境 我是有這個網頁的原始控制碼,但是很長我自己看了都覺得頭痛我是有做 一個變通的方式就是手動輸入密碼後再用WebBrowser控制我把網頁的 原始控制碼放上去好了,至於環境的模擬我可能要跟您說聲抱歉我無法 提供因為它是燒在router裡的謝謝RedSnow兄了讓你如此麻煩謝謝您 網頁的原始控制碼我放在 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=72397 發表人 - 0702 於 2005/06/03 17:36:52
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-06-03 22:08:01 IP:219.137.xxx.xxx 未訂閱
0702 您好: 哇~原本以為是網頁檔,沒想到是 52KB 大小的 C 程式碼,結果是看得我頭暈腦脹,想編譯成執行檔來測試,結果也無法如願,而且竟然還牽扯到 Router....,我看想要模擬您的環境是真的不太可能的了。 我看我就直接用 IdHTTP 來讀一個 HTML 檔,然後再試著用 WebBrowser 或其它方式來做後續處理,無論測試結果如何?我都會將結果告訴您,讓您參考一下。
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-06-04 13:24:24 IP:61.140.xxx.xxx 未訂閱
0702 您好:    簡單的問一下,您是否已經使用過 IdHTTP 的 Post 或 Get 方式來試著進行第二道手續?    您在開題篇最後方所提到的 "控制動作",已知的資料是要設定 ip = 192.168.1.254,那麼該 submit 動作所觸發的 form name, method, action...等項目的設定,應該都可以當作 IdHTTP 的 Post 或是 Get (視 form method 的設定而定) 的參數來設定,例如:
Google 搜尋表單的主要設定項目如下:

<form <font color=red>action=/search name=f>
<input type=hidden name=hl value=zh-TW>
<input maxLength=256 size=55 name=q value="">
<input type=submit value="Google 搜尋" name=btnG>
<input type=submit value="好手氣" name=btnI>
<input id=all type=radio name=lr value="" checked>
<input id=ch type=radio name=lr value=lang_zh-CN|lang_zh-TW>
<input id=il type=radio name=lr value=lang_zh-TW>
</form>

而其中又以紅色標示的部份是絕對必須的,因此我們可以在 BCB 程式中以下列方式來送出查詢要求:    IdHTTP1->Get("http://www.google.com/search?q="delphi k.top"", fs);    或許您可以依樣畫葫蘆試試看。
0702
一般會員


發表:7
回覆:10
積分:3
註冊:2005-04-09

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-06-06 09:55:28 IP:61.221.xxx.xxx 未訂閱
RedSnow兄您好:  報歉這麼晚才回應真是不好意思,我有試過你說的IdHTTP.Get的方法  是可以進到網頁裡可是有關post的部份,我有參考過站上一些資料  我照著做就是沒有動作,我不太了解post的動作,所以就想透過 IdHTTP 登入  WebBrowser 來處理可是也失敗所以才怎麼頭痛,其實我在試IdHTTP.Post的動  作時一直無法了解它的動作原理,而站上的資料所處理的網頁又跟我所要處理  的網頁又不相同,所以IdHTTP.Post這個方法我才放棄,我現在的做法是請使用  者手動輸入密碼然後後續動作就交給WebBrowser來處理這樣子使用者就可以不用看到網頁就可以填入所欲修改的值 謝謝RedSnow兄花費您寶貴的時間不厭其煩的為小弟解答謝謝您    
發表人 - 0702 於 2005/06/06 10:03:43
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-06-06 10:54:42 IP:219.137.xxx.xxx 未訂閱
0702 您好:    我不清楚您是否已經瞭解了我前一篇所寫的,並且做過測試了?HTTP 的 Get method 不代表一定是 "取得",您所寫的登錄動作,以及我在前篇所舉均可為例,前例中 Google 是透過 Get method 來送出搜尋指令與參數給系統的,我前篇列舉的意思是想告訴您 "應該可依據網頁內容來決定使用 Get 或是 Post?以及設定其相關參數" 的,也就是說雖然是用 Get 完成了登錄動作,但這並不代表著一定要用 Post 去送出填表內容。 您可否將 Login 之後的那個畫面內容 (HTML) 擷取出來並貼上來?或是打包上傳,我試著將內容解析一下,然後將對應的 IdHTTP 設定與參數整理後貼出來,您再試試看可行與否? 發表人 - RedSnow 於 2005/06/06 10:59:57
0702
一般會員


發表:7
回覆:10
積分:3
註冊:2005-04-09

發送簡訊給我
#12 引用回覆 回覆 發表時間:2005-06-06 12:31:43 IP:61.221.xxx.xxx 未訂閱
RedSnow兄您好在這再一次感謝您的好心幫忙,小弟我才疏學淺未能明白您的意思,經您一提才知道IdHTTP1.Get也可以傳送資料我太不用心了我現在就去再把 IdHTTP的文件看一看不然又要誤解RedSnow兄的意思讓您浪費寶貴時間 網頁的源碼我換過了一樣放在 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=72397 有勞您費心了我也要再去將文件重新看一次謝謝您
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#13 引用回覆 回覆 發表時間:2005-06-06 14:08:39 IP:219.137.xxx.xxx 未訂閱
0702 您好:    依據您這次上傳的資料來看,將該頁面的表單內容過濾後整理如下:
<form name=soho method=<font color=red>post action=/lan>
<input type=text name=hostname size=20 maxlength=50 value="Wireless_Wizard">
<input type=text name=ip size=20 maxlength=15 value="192.168.1.254">
<input type=text name=mask size=20 maxlength=15 value="255.255.255.0" disabled>
<input type=hidden name=mask value="255.255.255.0">
<input type=submit name=submit value=Apply><input type=reset value=Reset>
</form></font>
由上述資料可以知道,主要的項目為 method=post,所以 IdHTTP 應該還是使用 Post 來傳送表單資料 (但您仍可試一下 Get),而 action=/lan 代表著傳送對象就是 hostroot/lan,但是我不確定其它欄位有那一個是可以省略的?因此我將所有欄位資料都設為傳送項目,那麼需要傳送的資料就應該如下: hostname=Wireless_Wizard ip=192.168.1.254 mask=255.255.255.0 如果整個組合起來的話應該是: http://192.168.1.254:8090/lan?hostname=Wireless_Wizard&ip=192.168.1.254&mask=255.255.255.0 那麼使用 Get 時的設定就應該是:
IdHTTP1->Get("http://192.168.1.254:8090/lan?hostname=Wireless_Wizard&ip=192.168.1.254&mask=255.255.255.0", fs);
而使用 Post 時的設定則應該是:
s1->Add("hostname=Wireless_Wizard");
s1->Add("ip=192.168.1.254");
s1->Add("mask=255.255.255.0");
IdHTTP1->Post("http://192.168.1.254:8090/lan", s1);
但是我無法確認以下兩點,因此必須要由您自己動手測試一下: 1. 網址中的 port 是否要加上去?若要加上去的話,是否仍為 :8090? 2. Post 與 Get 何者行得通何者行不通?或是兩者皆可用?甚或兩者都行不通?我都無法得知,我自己寫一個 CGI 程式虛擬的結果,兩種方式均可成功呼叫,至於前述的設定與呼叫方式,都必須要在您的環境中 (取決於被呼叫程式的處理方式) 才能得知成功與否? 祝您好運!
0702
一般會員


發表:7
回覆:10
積分:3
註冊:2005-04-09

發送簡訊給我
#14 引用回覆 回覆 發表時間:2005-06-06 16:35:49 IP:61.221.xxx.xxx 未訂閱
RedSnow兄感謝您連日來的幫忙已經可以了我是使用post的方法 另一個我還在試相信很快就可以成功真的謝謝您的幫忙我學了很 多謝謝您
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#15 引用回覆 回覆 發表時間:2005-06-06 18:26:02 IP:219.137.xxx.xxx 未訂閱
0702 您好:
引言:RedSnow兄感謝您連日來的幫忙已經可以了我是使用post的方法 另一個我還在試相信很快就可以成功真的謝謝您的幫忙我學了很 多謝謝您
您太客氣了,其實我也藉著這次討論與測試的過程,釐清了一些觀念上的問題而有所得,有機會時大家多多交換意見相互學習吧,祝您後續的測試能順利完成。
系統時間:2024-05-04 22:10:21
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!