網頁自動登入小範例 |
|
tobylin
一般會員 發表:1 回覆:15 積分:18 註冊:2009-12-25 發送簡訊給我 |
//程式緣起: 防疫物資管理系統網頁 自動登入 節省人工,方便設定為日排程
(*程式功能: 可以自動填值登入網頁後,再模擬點選『完成登入並離開』鍵*) [code delphi] unit nvCDC1u; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, OleCtrls, SHDocVw, StdCtrls, ExtCtrls; type TForm1 = class(TForm) Button1: TButton; WebBrowser1: TWebBrowser; Label1: TLabel; Button2: TButton; Timer1: TTimer; Button3: TButton; procedure WebBrowser1DocumentComplete(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant); procedure WebBrowser1ProgressChange(Sender: TObject; Progress, ProgressMax: Integer); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure FormShow(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} var cnt:word; //Timer 計數器,單位:秒 function FillForm(WebBrowser: TWebBrowser; FieldName: string; Value: string): Boolean; var i, j: Integer; FormItem: Variant; begin Result := False; //no form on document if WebBrowser.OleObject.Document.all.tags('FORM').Length = 0 then begin Exit; end; //count forms on document for I := 0 to WebBrowser.OleObject.Document.forms.Length - 1 do begin FormItem := WebBrowser.OleObject.Document.forms.Item(I); for j := 0 to FormItem.Length - 1 do begin try //when the fieldname is found, try to fill out if FormItem.Item(j).Name = FieldName then begin FormItem.Item(j).Value := Value; Result := True; end; except Exit; end; end; end; end; //When the document is complete try to fill out the field homepage with the url procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant); begin //Timer1.Enabled:=True; caption:='CDC.OK.'; if Button2.Enabled then Button2.Click end; //For example //you can load the page http://delphi.ktop.com.tw/userlogin.php to the TWebBrowser //When the document is Complete the form where you can put your homepage //address is filled out procedure TForm1.Button1Click(Sender: TObject); begin// 使用 Navigate 連接到所要的 URL, 請依需求修改 Webbrowser1.Navigate('https://mis.cdc.gov.tw/index6.asp?system=OO'); // Show the Titel of the currently active Webpage in the titlebar // 990203 //Caption := Webbrowser1.OleObject.Document.Title; end; // Show the Webbrowser-Progress in Label1 procedure TForm1.WebBrowser1ProgressChange(Sender: TObject; Progress, ProgressMax: Integer); begin if ProgressMax = 0 then begin label1.Caption := ''; Exit; end; try if (Progress <> -1) and (Progress <= ProgressMax) then label1.Caption := IntToStr((Progress * 100) div ProgressMax) '% loaded...' else label1.Caption := ''; except on EDivByZero do Exit; end; end; procedure TForm1.Button2Click(Sender: TObject);//計時15秒 or WebBrowser1DocumentComplete 看孰為快 var ovElements: OleVariant; i: Integer; begin Button2.Enabled:=False; if FillForm(WebBrowser1, 'userid', '12345') = False then //填登入帳密 ShowMessage('Error1 Field not available or no Form found.'); if FillForm(WebBrowser1, 'password','56789') = False then ShowMessage('Error2 Field not available or no Form found.'); ovElements := WebBrowser1.OleObject.Document.forms.item(0).elements; for i := 0 to (ovElements.Length - 1) do if(ovElements.item(i).Name = 'Submit') and //INPUT tagName (ovElements.item(i).type = 'submit') then //(ovElements.item(i).Value = 'Recent Charges') then ovElements.item(i).Click; //按 登入 鍵 caption:='ok'; end; procedure TForm1.Timer1Timer(Sender: TObject); CONST OFFSET=0; begin inc(cnt); Button1.Enabled:=False; IF cnt=6 THEN //安全性警訊 ... 要繼續處理? (Y / N / V 檢視憑證) BEGIN // (模擬按下 Y=$59) keybd_event($59,0,0 ,0); keybd_event($59,0,KEYEVENTF_KEYUP ,0); END ELSE IF cnt=9 THEN //您的螢幕解析度是 ... 並非最佳解析度,建議您更換為1024*768 BEGIN // (模擬按下 SPACE) keybd_event(vk_Space,0,0 ,0); keybd_event(vk_Space,0,KEYEVENTF_KEYUP ,0); END ELSE if cnt=15 then // 登入網頁 begin Timer1.enabled:=false; if Button2.Enabled then Button2.Click; Timer1.enabled:=True end else if cnt=22 OFFSET then // 登出 begin Timer1.enabled:=false;// 切換網頁代替點選『完成登入並離開』鍵 Webbrowser1.Navigate('https://mis.cdc.gov.tw/statics/livestoreHS1.asp?login=321'); Timer1.enabled:=True //(要登出了) end else if cnt=27 OFFSET then //已完成登入動作 謝謝您 系統即將離開! begin //模擬按下空白鍵 Timer1.Enabled:=False; keybd_event(vk_Space,0,0 ,0); keybd_event(vk_Space,0,KEYEVENTF_KEYUP ,0); caption:='請稍後,程式即將關閉press_space_1_ok'; Timer1.enabled:=True end else if cnt=30 OFFSET then //您目前檢視的網頁試圖關閉視窗。要關閉這個視窗嗎?(Y/N) begin //模擬按下空白鍵 Timer1.Enabled:=False; keybd_event(vk_Space,0,0 ,0); keybd_event(vk_Space,0,KEYEVENTF_KEYUP ,0); caption:='程式關閉press_space_2_ok'; Timer1.enabled:=True end else if cnt=32 then // 程式終點 Close (* sub Submit_onclick() 完成登入離開本系統 .href="../statics/livestoreHS1.asp?login=321" end sub sub Submit2_onclick() 增減庫存 .href="../statics/livestoreHS1.asp?login=456" end sub sub Submit4_onclick() 完成登入本進入系統 .href="../statics/livestoreHS1.asp?login=452" end sub sub Submit5_onclick() 進入系統 .href="../LogIn/Default.asp" end sub *) end; procedure TForm1.FormShow(Sender: TObject); // 程式起點(觸發點) begin Timer1.Enabled:=True; Button1.Click; // 打開cdc網頁 cnt:=0 end; end. [/code] |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |