如何使用IdHTTP來控制網頁button及寫入data到edit |
答題得分者是:RedSnow
|
0702
一般會員 發表:7 回覆:10 積分:3 註冊:2005-04-09 發送簡訊給我 |
如題我有一個網頁希望透過一個小程式來更改一些值
一開始的登入我已經試出來了程式碼如下
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 發送簡訊給我 |
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 發送簡訊給我 |
|
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
|
0702
一般會員 發表:7 回覆:10 積分:3 註冊:2005-04-09 發送簡訊給我 |
RedSnow兄您好小弟我最近試了很多次就是無法將idhttp與WebBrowser 合用(所以我才在這裡提問題)最上面是我登入的程式段,我一旦登入後網頁的控制權就在idhttp元件上了,如果我再用WebBrowser.Navigate去連結就會再開一個新的網頁且登入視窗又會跳出來我也試過用idhttp登入後將網頁源碼下載交給WebBrowser可是WebBrowser好像只是將源碼翻譯出來並沒有實際的連上真正的網頁,我最近也一直在試其他的方式但是總覺得就像RedSnow兄所說的將WebBrowser和idhttp合用就好了,利用idhttp來控制登入,登入後將網頁交由WebBrowser來控制,只是現在我還是無法將這兩個元件合用請教RedSnow兄及各位先進同好有沒有辦法將這兩個元件合用呢?謝謝RedSnow兄不厭其煩的指點謝謝您
|
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
|
0702
一般會員 發表:7 回覆:10 積分:3 註冊:2005-04-09 發送簡訊給我 |
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 發送簡訊給我 |
|
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
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 發送簡訊給我 |
RedSnow兄您好:
報歉這麼晚才回應真是不好意思,我有試過你說的IdHTTP.Get的方法
是可以進到網頁裡可是有關post的部份,我有參考過站上一些資料
我照著做就是沒有動作,我不太了解post的動作,所以就想透過 IdHTTP 登入
WebBrowser 來處理可是也失敗所以才怎麼頭痛,其實我在試IdHTTP.Post的動
作時一直無法了解它的動作原理,而站上的資料所處理的網頁又跟我所要處理
的網頁又不相同,所以IdHTTP.Post這個方法我才放棄,我現在的做法是請使用
者手動輸入密碼然後後續動作就交給WebBrowser來處理這樣子使用者就可以不用看到網頁就可以填入所欲修改的值
謝謝RedSnow兄花費您寶貴的時間不厭其煩的為小弟解答謝謝您
|
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
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 發送簡訊給我 |
|
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
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 發送簡訊給我 |
|
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |