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

網頁自動登入小範例

 
tobylin
一般會員


發表:1
回覆:15
積分:18
註冊:2009-12-25

發送簡訊給我
#1 引用回覆 回覆 發表時間:2010-02-10 11:49:41 IP:60.249.xxx.xxx 未訂閱
//程式緣起: 防疫物資管理系統網頁 自動登入 節省人工,方便設定為日排程
(*程式功能: 可以自動填值登入網頁後,再模擬點選『完成登入並離開』鍵*)

[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]

系統時間:2024-04-29 8:01:24
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!