這個問題有解嗎? |
答題得分者是:Clarinet
|
sanwin
一般會員 發表:20 回覆:60 積分:16 註冊:2002-06-03 發送簡訊給我 |
各位高手請問一下,我在form上面放了一個webbrowser的物件,然後,我用這個程式來上網,我去的網站有些需要輸入帳號和密碼,我想請問一下,我能直接在這個程式上面再做一個輸入帳號和密碼的按鈕,下次進入網站的時候,只要按下按鈕就會自動輸入帳號和密碼.
我有個構想是用模擬滑鼠移動到網頁上的輸入帳號框,然後再用模擬鍵盤輸入的方式,自動輸入帳號,不知道這個方法可不可行,如果可行的話,請高手告訴我,程式碼要如何寫呢,謝謝
------
我是剛入門的子弟,請大家多多指教! |
領航天使
站長 發表:12216 回覆:4186 積分:4084 註冊:2001-07-25 發送簡訊給我 |
引言: 各位高手請問一下,我在form上面放了一個webbrowser的物件,然後,我用這個程式來上網,我去的網站有些需要輸入帳號和密碼,我想請問一下,我能直接在這個程式上面再做一個輸入帳號和密碼的按鈕,下次進入網站的時候,只要按下按鈕就會自動輸入帳號和密碼. 我有個構想是用模擬滑鼠移動到網頁上的輸入帳號框,然後再用模擬鍵盤輸入的方式,自動輸入帳號,不知道這個方法可不可行,如果可行的話,請高手告訴我,程式碼要如何寫呢,謝謝有解,我曾寫過! 可否告訴我那一個網址,我示範給您看! ~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~ |
sanwin
一般會員 發表:20 回覆:60 積分:16 註冊:2002-06-03 發送簡訊給我 |
|
領航天使
站長 發表:12216 回覆:4186 積分:4084 註冊:2001-07-25 發送簡訊給我 |
引言: 站長可否請你用這個網頁http://webhd.yam.com/Login.htm寫給示範給我看,因為我要進去的網站是有關個人隱私的,我希望在進入網頁後,按下按鈕,然後滑鼠就會自動移到帳號輸入區去輸入帳號,接著又跳到密碼區去輸入密碼,最後再移到登入按鈕上去按下按鈕,請問這樣會很困難嗎? 麻煩站長你了,謝謝試出來了,您先看看! 用鍵盤模擬輸入就可以了,不必用到滑鼠! unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, OleCtrls, SHDocVw, StdCtrls, ExtCtrls; type TForm1 = class(TForm) Button1: TButton; WebBrowser1: TWebBrowser; Timer1: TTimer; procedure Button1Click(Sender: TObject); procedure WebBrowser1DocumentComplete(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant); private { Private declarations } public { Public declarations } end; var Form1: TForm1; WaitInput:boolean=false; implementation {$R *.DFM} Procedure PostKeyEx32( key: Word; Const shift: TShiftState; specialkey: Boolean ); Type TShiftKeyInfo = Record shift: Byte; vkey : Byte; End; byteset = Set of 0..7; Const shiftkeys: Array [1..3] of TShiftKeyInfo = ((shift: Ord(ssCtrl); vkey: VK_CONTROL ), (shift: Ord(ssShift); vkey: VK_SHIFT ), (shift: Ord(ssAlt); vkey: VK_MENU )); Var flag: DWORD; bShift: ByteSet absolute shift; i: Integer; Begin For i := 1 To 3 Do Begin If shiftkeys[i].shift In bShift Then keybd_event( shiftkeys[i].vkey, MapVirtualKey(shiftkeys[i].vkey, 0), 0, 0); End; { For } If specialkey Then flag := KEYEVENTF_EXTENDEDKEY Else flag := 0; keybd_event( key, MapvirtualKey( key, 0 ), flag, 0 ); flag := flag or KEYEVENTF_KEYUP; keybd_event( key, MapvirtualKey( key, 0 ), flag, 0 ); For i := 3 DownTo 1 Do Begin If shiftkeys[i].shift In bShift Then keybd_event( shiftkeys[i].vkey, MapVirtualKey(shiftkeys[i].vkey, 0), KEYEVENTF_KEYUP, 0); End; { For } End; { PostKeyEx32 } procedure TForm1.Button1Click(Sender: TObject); begin waitinput:=true; webbrowser1.Navigate('http://webhd.yam.com/Login.htm'); end; procedure InputIdPassword(id,password:string); var i:integer; begin id:=uppercase(id); password:=uppercase(password); for i:=1 to length(id) do begin PostKeyEx32(ord(id[i]),[],true);sleep(100); end; PostKeyEx32(9,[],true);sleep(100); for i:=1 to length(password) do begin PostKeyEx32(ord(password[i]),[],true);sleep(100); end; PostKeyEx32(9,[],true);sleep(1000); PostKeyEx32(ord(' '),[],true);sleep(100); end; procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant); begin if waitinput then begin waitinput:=false; InputIdPassword('YourID','YourPassword'); end; end; end.~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~ |
sanwin
一般會員 發表:20 回覆:60 積分:16 註冊:2002-06-03 發送簡訊給我 |
|
Clarinet
高階會員 發表:9 回覆:97 積分:126 註冊:2002-05-08 發送簡訊給我 |
試試看(有測試過可行):
procedure TForm1.ToolButton2Click(Sender: TObject);
var
Docs, Edits : OleVariant;
begin
Docs :=WebBrowser1.Document; //此處只適用於http://webhd.yam.com/Login.htm該網頁的輸入
Edits :=Docs.GetElementByID('id');
Edits.Value :='您的帳號';
Edits :=WebBrowser1.OleObject.Document.all.Item('pwd', 0);
Edits.Value :='您的密碼'; //登入
WebBrowser1.OleObject.Document.GetElementByID('Submit').Click; end;
------
GPS(全球衛星定位系統) http://www.allgps.com |
領航天使
站長 發表:12216 回覆:4186 積分:4084 註冊:2001-07-25 發送簡訊給我 |
引言: 試試看(有測試過可行): procedure TForm1.ToolButton2Click(Sender: TObject); var Docs, Edits : OleVariant; begin Docs :=WebBrowser1.Document; //此處只適用於http://webhd.yam.com/Login.htm該網頁的輸入 Edits :=Docs.GetElementByID('id'); Edits.Value :='您的帳號'; Edits :=WebBrowser1.OleObject.Document.all.Item('pwd', 0); Edits.Value :='您的密碼'; //登入 WebBrowser1.OleObject.Document.GetElementByID('Submit').Click; end;我也試過可以,這個方法比我的好多了,不錯喔,謝謝分享! ~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~ |
sanwin
一般會員 發表:20 回覆:60 積分:16 註冊:2002-06-03 發送簡訊給我 |
|
領航天使
站長 發表:12216 回覆:4186 積分:4084 註冊:2001-07-25 發送簡訊給我 |
引言: 如果我要換成這個網頁 https://www.uwccb.com.tw/netbank/default.asp 的話 程式要如何改寫,請站長跟各位高手指點一下,謝謝 ps:站長你寫的程式看起來好深奧,沒幾行我看的懂的,可能我是新手的關係都看不懂?那Clarinet的寫法應該較易懂了吧! 若用Clarinet的寫法就是: procedure TForm1.ToolButton2Click(Sender: TObject); var Docs, Edits : OleVariant; begin Docs :=WebBrowser1.Document; //此處只適用於://www.uwccb.com.tw/netbank/default.asp 該網頁的輸入 Edits :=Docs.GetElementByID('CustIDTmp'); Edits.Value :='身分證字號'; Edits :=WebBrowser1.OleObject.Document.all.Item('CustPwdTmp', 0); Edits.Value :='理財密碼'; Edits :=WebBrowser1.OleObject.Document.all.Item('CustNickNameTmp', 0); Edits.Value :='用戶代號'; //登入 WebBrowser1.OleObject.Document.GetElementByID('Submit').Click; end; 您要加油喔! ~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~ |
sanwin
一般會員 發表:20 回覆:60 積分:16 註冊:2002-06-03 發送簡訊給我 |
|
領航天使
站長 發表:12216 回覆:4186 積分:4084 註冊:2001-07-25 發送簡訊給我 |
引言: 站長我有試過上面的方法,只有自動輸入使用者代號這個地方, 而身份證和密碼這兩個地方不會自動輸入,是那裡有問題呢, 可以請站長再試一下嗎,謝謝請試試下面的程式! procedure TForm1.Button2Click(Sender: TObject); var Docs, Edits : OleVariant; begin Docs :=WebBrowser1.Document; //此處只適用於://www.uwccb.com.tw/netbank/default.asp 該網頁的輸入 //Edits :=Docs.GetElementByID('CustIDTmp'); Edits :=WebBrowser1.OleObject.Document.all.Item ('CustIDTmp', 1); Edits.Value :='身分證字號'; Edits :=WebBrowser1.OleObject.Document.all.Item ('CustPwdTmp', 1); Edits.Value :='理財密碼'; Edits :=WebBrowser1.OleObject.Document.all.Item('CustNickNameTmp', 0); Edits.Value :='用戶代號'; //登入 WebBrowser1.OleObject.Document.GetElementByID('Submit').Click; end;您可於進入網頁後,按下滑鼠右鍵"檢視原始碼", 可以看到有兩個: <input type="text" name="CustIDTmp" size="18" maxlength="10" value=""> 所以要將 Edits :=WebBrowser1.OleObject.Document.all.Item ('CustIDTmp', 1); 設為1,表示要填第2個CustIDTmp! 同樣CustPwdTmp也是有兩個! ~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~ |
Clarinet
高階會員 發表:9 回覆:97 積分:126 註冊:2002-05-08 發送簡訊給我 |
您可於進入網頁後,按下滑鼠右鍵"檢視原始碼",
可以看到有兩個:
<input type="text" name="CustIDTmp" size="18" maxlength="10" value="">
所以要將
Edits :=WebBrowser1.OleObject.Document.all.Item ('CustIDTmp', 1);
設為1,表示要填第2個CustIDTmp!
同樣CustPwdTmp也是有兩個! 您可以看看該網頁的原始碼,就可以發現其由兩個Form組成,各有各的,但名稱都一樣。
而站長的用法是取出Document內名稱為CustIDTmp,且為第二個。
所以寫成:
Edits :=WebBrowser1.OleObject.Document.all.Item ('CustIDTmp', 1); 而若您對整個網頁架構有一點觀念的話,想想看Document的架構,您就可以將
Edits :=WebBrowser1.OleObject.Document.all.Item ('CustIDTmp', 1);
改寫成:
Edits :=WebBrowser1.OleObject.Document.Forms.item(1).all.Item('CustIDTmp', 0);
看的懂嗎?
第二行只是多了=>Forms.item(1)
亦即為第二個Form ~~~Delphi K.Top討論區站長~~~
[/quote]
------
GPS(全球衛星定位系統) http://www.allgps.com |
領航天使
站長 發表:12216 回覆:4186 積分:4084 註冊:2001-07-25 發送簡訊給我 |
引言: 而若您對整個網頁架構有一點觀念的話,想想看Document的架構,您就可以將 Edits :=WebBrowser1.OleObject.Document.all.Item ('CustIDTmp', 1); 改寫成: Edits :=WebBrowser1.OleObject.Document.Forms.item(1).all.Item('CustIDTmp', 0);Clarinet兄,您對OleObject.Document的觀念好像很好喔! 可否提供有關這方面的參考資料與網頁介紹,謝謝您! ~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~ |
Clarinet
高階會員 發表:9 回覆:97 積分:126 註冊:2002-05-08 發送簡訊給我 |
|
領航天使
站長 發表:12216 回覆:4186 積分:4084 註冊:2001-07-25 發送簡訊給我 |
|
sanwin
一般會員 發表:20 回覆:60 積分:16 註冊:2002-06-03 發送簡訊給我 |
|
領航天使
站長 發表:12216 回覆:4186 積分:4084 註冊:2001-07-25 發送簡訊給我 |
|
sanwin
一般會員 發表:20 回覆:60 積分:16 註冊:2002-06-03 發送簡訊給我 |
|
領航天使
站長 發表:12216 回覆:4186 積分:4084 註冊:2001-07-25 發送簡訊給我 |
引言: 如果遇到按下按鈕後,就會再跳出另一個登入畫面的,要如何寫自動輸入的程式呢? ps:像這個網站https://etrade.pscnet.com.tw/message/attention.htm按下進入下單畫面後,就會另外跳出登入畫面,有解嗎還是有解,您可在WebBrowser1的InNewWindow2事件中導至WebBrowser2, 如: procedure TForm1.WebBrowser1NewWindow2(Sender: TObject; var ppDisp: IDispatch; var Cancel: WordBool); begin WebBrowser2.RegisterAsBrowser:=true; ppdisp := WebBrowser2.DefaultDispatch end; 再將WebBrowser2的OnBeforeNavigate2事件中再導回WebBrowser1中就可以了! 如下: procedure TForm1.WebBrowser2BeforeNavigate2(Sender: TObject; const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData, Headers: OleVariant; var Cancel: WordBool); begin WebBrowser1.Navigate(WideString(Url)); cancel:=false; end; 您先試看看! ~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~ |
sanwin
一般會員 發表:20 回覆:60 積分:16 註冊:2002-06-03 發送簡訊給我 |
|
Clarinet
高階會員 發表:9 回覆:97 積分:126 註冊:2002-05-08 發送簡訊給我 |
|
sanwin
一般會員 發表:20 回覆:60 積分:16 註冊:2002-06-03 發送簡訊給我 |
|
Clarinet
高階會員 發表:9 回覆:97 積分:126 註冊:2002-05-08 發送簡訊給我 |
引言: 再請教站長跟各位高手,這個http://home.kimo.com.tw/warrant168/Price.htm網頁的自動輸入要如何寫,這個網頁我已經試了好久就是試不出來,那個按鈕是圖片加連結,所以不知道要如何寫,請站長跟各位高手再幫我試一下,謝謝!您可以看到此頁是一個Fram的架構,所以如下: WebBrowser1.OleObject.Document.documentelement.document.frames.Item(0).Document.Links.Item(0).Click;
------
GPS(全球衛星定位系統) http://www.allgps.com |
sanwin
一般會員 發表:20 回覆:60 積分:16 註冊:2002-06-03 發送簡訊給我 |
|
Clarinet
高階會員 發表:9 回覆:97 積分:126 註冊:2002-05-08 發送簡訊給我 |
引言: 要如何才能看出是Form還是frame呢?請Clarinet兄講解一下,謝謝! 我是剛入門的子弟,請大家多多指教!若您對HTML語法不熟的話,建議您可先讀讀此類的書,這樣您可對其整個語法架構有進一步的瞭解。 frame的話您可以在原始檔內看到如下: <FRAMESET> ...........</FRAMESET>包起來的語句 而裡面會有<FRAME>來指明有多少個frame。 這種稱為“分割視窗”。 form的話您可以看到如下: <FORM> .............</FORM> 而裡面還會有其他的標籤,如
------
GPS(全球衛星定位系統) http://www.allgps.com |
newfan123
一般會員 發表:0 回覆:1 積分:0 註冊:2003-04-03 發送簡訊給我 |
如下网页中的表单采用图象按钮,请问如何在WebBrowser中模拟点击进行自动提交?
---------------------------------------------------------------
<HTML><HEAD><TITLE>test</TITLE>
</HEAD>
<form name=form1 method=post action="tijiao.asp">
<table>
<tr>
<td>
Name:
<input type=text class=input name=t1 >
Pass: <input type=text class=input name=t2> <input type=image src="images/submit.gif" width="70" height="18" > <input type=hidden name=submit value=1> </td> </tr> </table> </form> </BODY></HTML> ------------------------------------------------------------------------ |
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
|
softice
一般會員 發表:0 回覆:1 積分:0 註冊:2003-05-06 發送簡訊給我 |
|
jiannrong
一般會員 發表:58 回覆:36 積分:18 註冊:2002-05-09 發送簡訊給我 |
|
ajuang
一般會員 發表:7 回覆:11 積分:3 註冊:2004-08-30 發送簡訊給我 |
引言: [quote] 站長我有試過上面的方法,只有自動輸入使用者代號這個地方, 而身份證和密碼這兩個地方不會自動輸入,是那裡有問題呢, 可以請站長再試一下嗎,謝謝請試試下面的程式! procedure TForm1.Button2Click(Sender: TObject); var Docs, Edits : OleVariant; begin Docs :=WebBrowser1.Document; //此處只適用於://www.uwccb.com.tw/netbank/default.asp 該網頁的輸入 //Edits :=Docs.GetElementByID('CustIDTmp'); Edits :=WebBrowser1.OleObject.Document.all.Item ('CustIDTmp', 1); Edits.Value :='身分證字號'; Edits :=WebBrowser1.OleObject.Document.all.Item ('CustPwdTmp', 1); Edits.Value :='理財密碼'; Edits :=WebBrowser1.OleObject.Document.all.Item('CustNickNameTmp', 0); Edits.Value :='用戶代號'; //登入 WebBrowser1.OleObject.Document.GetElementByID('Submit').Click; end; [/code] 您可於進入網頁後,按下滑鼠右鍵"檢視原始碼", 可以看到有兩個: <input type="text" name="CustIDTmp" size="18" maxlength="10" value=""> 所以要將 Edits :=WebBrowser1.OleObject.Document.all.Item ('CustIDTmp', 1); 設為1,表示要填第2個CustIDTmp! 同樣CustPwdTmp也是有兩個! ~~~Delphi K.Top討論區站長~~~ 站長, Delphi我不會. 我嘗試用C builder, 但是失敗.是否有能人志士可改為以供參考,謝謝^_^. (我在C builder討論區找不到相關程式!!! ) |
Blueberrug
一般會員 發表:14 回覆:50 積分:17 註冊:2005-05-22 發送簡訊給我 |
您好:
這各網站 http://www.25emuhome.com/column/learn/ 我已經無法瀏覽 不知道是否有其他網站可以看呢? 另外我試過這樣的登入方式, 不過若同一個網站有兩組帳號的話, 我是利用ComboBox來切換使用者登入該網站, 但因為IE的Cookie關係, 永遠都只會登入第一位使用者的帳號 卻無法登入第二位使用者的帳號 不知道是否有方法解決呢? 若是要用清除cookie的方式, 是否只能清除關於第一組使用者登入的Cookies呢? 謝謝各位的幫忙啊! ===================引 用 文 章=================== |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |