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

【請問如何實現多個按鈕對應一個webbrower登入???】

答題得分者是:darnell
andyto202
一般會員


發表:10
回覆:29
積分:7
註冊:2006-12-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-11-20 18:37:18 IP:60.250.xxx.xxx 訂閱
我目前可以用
一個按鈕來自動一個登入網頁
但是
如果我有很多網頁都要做自動登錄(一個按鈕登入一個網頁)
要如何使用同一個webbrower呢
因為
每個網頁的
帳號、密碼 關鍵字 有可能都會不一樣
這樣子

procedure TForm1.WebBrowser1DocumentComplete
裡面要怎麼寫呢
麻煩懂的先進指導一下
感恩

darnell
版主


發表:25
回覆:103
積分:145
註冊:2003-03-04

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-11-25 13:42:02 IP:60.250.xxx.xxx 訂閱
不太懂你問的意思
有很多網頁要登入?
假設說將每個登入寫成一個案紐
然後設定一個參數看執行到第幾個按鈕
然後再OnDocumentComplete偵測下載完成後再
依據現在執行到第幾個抓下一個
Buttonx.Click這樣不就可以了嗎?
careychen
尊榮會員


發表:41
回覆:580
積分:959
註冊:2004-03-03

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-11-25 13:56:21 IP:60.248.xxx.xxx 訂閱
Hi, 之前有發表了一篇 懶惰鬼自動登入器 - (利用 Delphi 控制網頁的 Demo)

不知道是不是可以解決您的問題呢?

===================引 用 andyto202 文 章===================
我目前可以用
一個按鈕來自動一個登入網頁
但是
如果我有很多網頁都要做自動登錄(一個按鈕登入一個網頁)
要如何使用同一個webbrower呢
因為
每個網頁的
帳號、密碼 關鍵字 有可能都會不一樣
這樣子

procedure TForm1.WebBrowser1DocumentComplete
裡面要怎麼寫呢
麻煩懂的先進指導一下
感恩

------
價值的展現,來自於你用哪一個角度來看待它!!
andyto202
一般會員


發表:10
回覆:29
積分:7
註冊:2006-12-07

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-11-26 08:26:31 IP:60.250.xxx.xxx 訂閱
有,我有下載來用
但是不知道怎麼使用它說
可以請您說明一下嗎

我是用delphi 5的
我發現那個dpr打不開
而且執行檔執行時
有叫我設定
可是我又看不到設定的按鈕




===================引 用 careychen 文 章===================
Hi, 之前有發表了一篇 懶惰鬼自動登入器 - (利用 Delphi 控制網頁的 Demo)

不知道是不是可以解決您的問題呢?

===================引 用 andyto202 文 章===================
我目前可以用
一個按鈕來自動一個登入網頁
但是
如果我有很多網頁都要做自動登錄(一個按鈕登入一個網頁)
要如何使用同一個webbrower呢
因為
每個網頁的
帳號、密碼 關鍵字 有可能都會不一樣
這樣子

procedure TForm1.WebBrowser1DocumentComplete
裡面要怎麼寫呢
麻煩懂的先進指導一下
感恩

編輯記錄
andyto202 重新編輯於 2008-11-26 08:48:58, 註解 無‧
andyto202
一般會員


發表:10
回覆:29
積分:7
註冊:2006-12-07

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-11-26 08:32:09 IP:60.250.xxx.xxx 訂閱
請問要如何寫判別式
就是不同按鈕下如何使用同一個webbrowser
例如
procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
var
docs,edits:OleVariant;
begin

if WebBrowser1.document = nil then exit;
docs:= webbrowser1.document;
if not logon then
begin
edits:=docs.getelementbyid('id');
edits.value:='a';
edits:=docs.getelementbyid('passwd');
edits.value:='b';
docs.getelementbyid('b1').click;

// docs.forms.item(0,3).submit;
// WebBrowser1.OleObject.Document.GetElementByID('login').Click;
logon:=true;
end;
end;
不管使用多少個按鈕,對應到多少網址
重點是如何將那些按鈕所選的對應到上面
因為不同網址
可能帳號、密碼也不同啊


===================引 用 darnell 文 章===================
不太懂你問的意思
有很多網頁要登入?
假設說將每個登入寫成一個案紐
然後設定一個參數看執行到第幾個按鈕
然後再OnDocumentComplete偵測下載完成後再
依據現在執行到第幾個抓下一個
Buttonx.Click這樣不就可以了嗎?
編輯記錄
andyto202 重新編輯於 2008-11-26 08:39:11, 註解 無‧
darnell
版主


發表:25
回覆:103
積分:145
註冊:2003-03-04

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-11-26 11:46:13 IP:220.128.xxx.xxx 訂閱
careychen大的作品真的很好,是要用D7開的所以你用D5會打不開
用法是要先開IE瀏覽器,然後再開程式,設定按鈕在右下角

寫個簡單的架構讓你參考~如果你要寫不同按鈕只要不同按鈕呼叫
LoginUrl('http://xxxxx.xxxxxx','帳號Control_ID','actxx1','密碼Control_ID','pwdxx1','Submit_ID');
就可以了變數請自行替換成你的

[code delphi]
unit Unit2;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, OleCtrls, SHDocVw, MsHtml;

type
TForm2 = class(TForm)
WebBrowser1: TWebBrowser;
ListBox1: TListBox;
btnStart: TButton;
procedure btnStartClick(Sender: TObject);
private
{ Private declarations }
procedure LoginUrl(Url,Acc_id,Acc,Pwd_id,Pwd,sub_id:String);
public
{ Public declarations }
end;

var
Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.btnStartClick(Sender: TObject);
begin
//登入1號網址
LoginUrl('http://xxxxx.xxxxxx','帳號Control_ID','actxx1','密碼Control_ID','pwdxx1','Submit_ID');

//登入2號網址
LoginUrl('http://xxxxx2.xxxx2','帳號Control_ID','actxx2','密碼Control_ID','pwdxx2','Submit_ID');
end;

procedure TForm2.LoginUrl(Url,Acc_id,Acc,Pwd_id,Pwd,sub_id:String);
var docs,edits:OleVariant;
begin
WebBrowser1.Navigate(Url);

while Webbrowser1.ReadyState <> READYSTATE_COMPLETE do
Application.ProcessMessages;

try
docs:= webbrowser1.document;
edits:=docs.getelementbyid(Acc_id);
edits.value:=Acc;
edits:=docs.getelementbyid(Pwd_id);
edits.value:=Pwd;
docs.getelementbyid(sub_id).click;
except
on E:Exception do begin
ListBox1.Items.Add('登入失敗:' Url); //用來顯示登入情況的控制項ListBox1
end;
end;//try

while Webbrowser1.ReadyState <> READYSTATE_COMPLETE do
Application.ProcessMessages;

//檢查是否成功的程式碼請自行加入
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

ListBox1.Items.Add('登入成功:' Url); //用來顯示登入情況的控制項ListBox1
end;

[/code]
編輯記錄
darnell 重新編輯於 2008-11-26 11:47:59, 註解 無‧
darnell 重新編輯於 2008-11-26 12:40:30, 註解 無‧
andyto202
一般會員


發表:10
回覆:29
積分:7
註冊:2006-12-07

發送簡訊給我
#7 引用回覆 回覆 發表時間:2008-11-26 17:00:13 IP:60.250.xxx.xxx 訂閱
太厲害了
三、兩下就解決我的問題
再次向您道謝


===================引 用 darnell 文 章===================
careychen大的作品真的很好,是要用D7開的所以你用D5會打不開
用法是要先開IE瀏覽器,然後再開程式,設定按鈕在右下角

寫個簡單的架構讓你參考~如果你要寫不同按鈕只要不同按鈕呼叫
LoginUrl('http://xxxxx.xxxxxx','帳號Control_ID','actxx1','密碼Control_ID','pwdxx1','Submit_ID');
就可以了變數請自行替換成你的

[code delphi]
unit Unit2;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, OleCtrls, SHDocVw, MsHtml;

type
TForm2 = class(TForm)
WebBrowser1: TWebBrowser;
ListBox1: TListBox;
btnStart: TButton;
procedure btnStartClick(Sender: TObject);
private
{ Private declarations }
procedure LoginUrl(Url,Acc_id,Acc,Pwd_id,Pwd,sub_id:String);
public
{ Public declarations }
end;

var
Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.btnStartClick(Sender: TObject);
begin
//登入1號網址
LoginUrl('http://xxxxx.xxxxxx','帳號Control_ID','actxx1','密碼Control_ID','pwdxx1','Submit_ID');

//登入2號網址
LoginUrl('http://xxxxx2.xxxx2','帳號Control_ID','actxx2','密碼Control_ID','pwdxx2','Submit_ID');
end;

procedure TForm2.LoginUrl(Url,Acc_id,Acc,Pwd_id,Pwd,sub_id:String);
var docs,edits:OleVariant;
begin
WebBrowser1.Navigate(Url);

while Webbrowser1.ReadyState <> READYSTATE_COMPLETE do
Application.ProcessMessages;

try
docs:= webbrowser1.document;
edits:=docs.getelementbyid(Acc_id);
edits.value:=Acc;
edits:=docs.getelementbyid(Pwd_id);
edits.value:=Pwd;
docs.getelementbyid(sub_id).click;
except
on E:Exception do begin
ListBox1.Items.Add('登入失敗:' Url); //用來顯示登入情況的控制項ListBox1
end;
end;//try

while Webbrowser1.ReadyState <> READYSTATE_COMPLETE do
Application.ProcessMessages;

//檢查是否成功的程式碼請自行加入
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

ListBox1.Items.Add('登入成功:' Url); //用來顯示登入情況的控制項ListBox1
end;

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