VFP 愛用者社區 首頁 VFP 愛用者社區
本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入

如何用程式控制 ie 並自動填寫表單 ??

 
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區
上一篇主題 :: 下一篇主題  
發表人 內容
ufochen



註冊時間: 2003-09-17
文章: 165


第 1 樓

發表發表於: 星期日 八月 30, 2009 2:52 am    文章主題: 如何用程式控制 ie 並自動填寫表單 ?? 引言回覆

myword = Createobject("InternetExplorer.Application")
myword.Navigate("http://mail.google.com/mail/?shva=1#inbox")
myword.visible = .t.
以上程序會開啟ie,並停留於gmail登入畫面
請問有辦法讓程式自動填寫帳號,密碼,及按下登入鍵嗎?
回頂端
檢視會員個人資料 發送私人訊息
小賴



註冊時間: 2004-12-27
文章: 475


第 2 樓

發表發表於: 星期一 八月 31, 2009 9:23 am    文章主題: 引言回覆

oIE = CREATEOBJECT("InternetExplorer.Application")
oIE.visible = .T.
oIE.Navigate("http://mail.google.com/mail/?shva=1#inbox")
DO WHILE oIE.ReadyState <> 4 && (! oIE.Busy)
DoEvents
ENDDO
oDo = oIE.Document
oName = oDo.getElementById("Email")
oName.value = "AAAA" && 帳號
oPass = oDo.getElementById("Passwd")
oPass.value = "1234" && 密碼
oSubmit = oDo.getElementsByTagName("Input")
oSubmit.Item(13).Click && 登入
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
Patrick Wu



註冊時間: 2007-01-03
文章: 223
來自: 台北市

第 3 樓

發表發表於: 星期一 八月 31, 2009 9:33 am    文章主題: 引言回覆

後學的作法如下 供 先進參考 :

oIE = CREATEOBJECT('internetexplorer.application')
oIE.NAVIGATE('http://www.cilink.com.tw/')
oIE.VISIBLE=.F. &&&& 帳號 密碼 的畫面 <<< 不須 >>>顯示
DO WHILE oIE.BUSY OR oIE.READYSTATE <> 4
ENDDO

oIE.DOCUMENT.FORMS.form1.userid.VALUE = "3417845"
oIE.DOCUMENT.FORMS.form1.userpwd.VALUE = "e251488"

oIE.DOCUMENT.FORMS.form1.submit.CLICK
回頂端
檢視會員個人資料 發送私人訊息 MSN Messenger
ufochen



註冊時間: 2003-09-17
文章: 165


第 4 樓

發表發表於: 星期二 九月 01, 2009 3:03 pm    文章主題: 引言回覆

謝謝指導!!
經測試:
2樓前輩的方法可以成功登入指定信箱
但登入後使用者如果沒有先登出,而直接關閉ie視窗,
再次執行2樓前輩的程式碼,則會出現錯誤:oNEME is not an object.
但仍然可登入指定的gmail信箱,只是會有錯誤訊息而已!!



3樓前輩的方法會出現錯誤
以下3行列會出現錯誤: OLE error code 0x80020006:UnKnown name
oIE.DOCUMENT.FORMS.form1.userid.VALUE = "3417845"
oIE.DOCUMENT.FORMS.form1.userpwd.VALUE = "e251488"
oIE.DOCUMENT.FORMS.form1.submit.CLICK
回頂端
檢視會員個人資料 發送私人訊息
Patrick Wu



註冊時間: 2007-01-03
文章: 223
來自: 台北市

第 5 樓

發表發表於: 星期三 九月 02, 2009 8:27 am    文章主題: 引言回覆

給 ufochen 先進的是範列 裡面的內容要看自我的須求
oIE = CREATEOBJECT('internetexplorer.application')
oIE.NAVIGATE('http://postserv.post.gov.tw/webpost/CSController?cmd=POS4001_1&_MENU_ID=189&_SYS_ID=D&_ACTIVE_ID=190')
oIE.VISIBLE=.T.

DO WHILE oIE.BUSY OR oIE.READYSTATE <> 4
ENDDO

oIE.DOCUMENT.FORMS.MainForm.MAILNO1.VALUE = "96373510004610402418"
oIE.DOCUMENT.FORMS.MainForm.cmd.value="POS4001_2"
oIE.DOCUMENT.FORMS.document.MainForm.submit()

這是後學昨天寫的 掛號信 自動查詢系統 給 ufochen 先進參考
回頂端
檢視會員個人資料 發送私人訊息 MSN Messenger
ufochen



註冊時間: 2003-09-17
文章: 165


第 6 樓

發表發表於: 星期三 九月 02, 2009 3:34 pm    文章主題: 引言回覆

Patrick Wu 寫到:
給 ufochen 先進的是範列 裡面的內容要看自我的須求
oIE = CREATEOBJECT('internetexplorer.application')
oIE.NAVIGATE('http://postserv.post.gov.tw/webpost/CSController?cmd=POS4001_1&_MENU_ID=189&_SYS_ID=D&_ACTIVE_ID=190')
oIE.VISIBLE=.T.

DO WHILE oIE.BUSY OR oIE.READYSTATE <> 4
ENDDO

oIE.DOCUMENT.FORMS.MainForm.MAILNO1.VALUE = "96373510004610402418"
oIE.DOCUMENT.FORMS.MainForm.cmd.value="POS4001_2"
oIE.DOCUMENT.FORMS.document.MainForm.submit()

這是後學昨天寫的 掛號信 自動查詢系統 給 ufochen 先進參考


抱歉!是我的錯!! 我把 oIE.NAVIGATE 的值修改為gmail登入的位址,直接進行測試,所以才會出錯!!
回頂端
檢視會員個人資料 發送私人訊息
ufochen



註冊時間: 2003-09-17
文章: 165


第 7 樓

發表發表於: 星期一 八月 24, 2020 4:50 am    文章主題: 引言回覆

ieMonitor = Createobject("InternetExplorer.Application")
ieMonitor.Navigate("http://220.134.1.202")
ieMonitor.Visible = .T.&& 至此...IE 畫面出現
*WAIT "" WINDOW TIMEOUT 0.5
Do While ieMonitor.BUSY Or ieMonitor.READYSTATE <> 4
DoEvents
Enddo
ieMonitor.Document.getElementById("username").Value= "admin"
ieMonitor.Document.getElementById("password").Value= "12345678"

上述代碼可以正確開啟IE並自動填入帳號與密碼,但是當我按下登入鍵時,卻提示"帳號不得空白",經測試後發現帳號與密碼的輸入框雖然有填入了,但系統卻視為空白的,一定要手動填入才行,我把分別把帳號與密碼各刪去一個字再補上,就可以登入了,請教各位先進,有辦法自動登入嗎?
另一個問題是,如果網址連不上會出現錯誤訊息!如何防止?


ufochen 在 星期一 九月 14, 2020 12:21 am 作了第 1 次修改
回頂端
檢視會員個人資料 發送私人訊息
garfield
Site Admin


註冊時間: 2003-01-30
文章: 2158


第 8 樓

發表發表於: 星期一 八月 24, 2020 4:36 pm    文章主題: 引言回覆

現在的瀏覽器基於安全性原則已不能用 getElementById("XXX").Value 的方式來自動填值到網頁裡.
_________________
利用>>搜尋<<的功能會比問的還要快得到答案.
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
ufochen



註冊時間: 2003-09-17
文章: 165


第 9 樓

發表發表於: 星期一 八月 24, 2020 6:39 pm    文章主題: 引言回覆

garfield 寫到:
現在的瀏覽器基於安全性原則已不能用 getElementById("XXX").Value 的方式來自動填值到網頁裡.

剛剛試了用Mouse AT 指令移到輸入框再用KEYBOARD "admin" 也不行,看來無解了
回頂端
檢視會員個人資料 發送私人訊息
garfield
Site Admin


註冊時間: 2003-01-30
文章: 2158


第 10 樓

發表發表於: 星期二 八月 25, 2020 3:50 pm    文章主題: 引言回覆

剛才想到其實還有其它方式
oWS = CreateObject("WScript.Shell")
oPaint = oWS.Exec("C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe")
*暫時沒想到如何填入網址, 先手動輸入網址 http://220.134.1.201:100 , 不然改用 Createobject("InternetExplorer.Application")可能也可以吧
inkey(0)
? oWS.AppActivate(oPaint.ProcessID),oWS.SendKeys("admin"),oWS.SendKeys( "{TAB}" ),inkey(0.2),oWS.SendKeys("1234"),oWS.SendKeys( "{Enter}" )

_________________
利用>>搜尋<<的功能會比問的還要快得到答案.
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
Patrick Wu



註冊時間: 2007-01-03
文章: 223
來自: 台北市

第 11 樓

發表發表於: 星期二 八月 25, 2020 3:58 pm    文章主題: 引言回覆

給 Ufochen 先進參考

LOCAL M->REP_TIMES
THISFORM.VISIBLE = .F.
_SCREEN.WindowState = 1
oWS = Createobject("Wscript.Shell")
oIE = CREATEOBJECT( "internetexplorer.application" )

oIE.TOP = 0
oIE.LEFT = 0
oIE.Visible = .T.

oIE.NAVIGATE( "http://postserv.post.gov.tw/pstmail/main_mail.html" )

DO WHILE oIE.BUSY OR oIE.READYSTATE <> 4
ENDDO

INKEY(05)

ieMonitor.Document.getElementById("username").Value= "admin"
ieMonitor.Document.getElementById("password").Value= "12345678"
改用以下方是輸入 應該 OK

STORE 1 TO M->REP_TIMES
DO WHILE M->REP_TIMES <= LEN(M->RGT_C_A + M->RGT_CD2)
oWS.SendKeys(SUBSTR(M->RGT_C_A + M->RGT_CD2 , M->REP_TIMES , 01))
INKEY(0.1)
STORE M->REP_TIMES + 1 TO M->REP_TIMES
ENDDO

重點應該是在 INKEY(0.1) 再填入下一個字
回頂端
檢視會員個人資料 發送私人訊息 MSN Messenger
Patrick Wu



註冊時間: 2007-01-03
文章: 223
來自: 台北市

第 12 樓

發表發表於: 星期二 八月 25, 2020 5:00 pm    文章主題: 引言回覆

給 Ufochen 先進參考 因 帳 & 密 不符 請自行套用

ieMonitor = Createobject("InternetExplorer.Application")
ieMonitor.Navigate("http://220.134.1.201:100")
ieMonitor.Visible = .T.&& 至此...IE 畫面出現
Do While ieMonitor.BUSY Or ieMonitor.READYSTATE <> 4
DoEvents

STORE "admin" TO M->A
STORE "12345678" TO M->B

INKEY(05)

STORE 1 TO M->REP_TIMES
DO WHILE M->REP_TIMES <= LEN(M->A)
ieMonitor.Document.getElementById("username").Value = ieMonitor.Document.getElementById("username").Value + SUBSTR(M->A , M->REP_TIMES , 01)
INKEY(0.5)
STORE M->REP_TIMES + 1 TO M->REP_TIMES
ENDDO

STORE 1 TO M->REP_TIMES
DO WHILE M->REP_TIMES <= LEN(M->B)
ieMonitor.Document.getElementById("password").Value = ieMonitor.Document.getElementById("password").Value + SUBSTR(M->A , M->REP_TIMES , 01)
INKEY(0.5)
STORE M->REP_TIMES + 1 TO M->REP_TIMES
ENDDO
回頂端
檢視會員個人資料 發送私人訊息 MSN Messenger
ufochen



註冊時間: 2003-09-17
文章: 165


第 13 樓

發表發表於: 星期二 八月 25, 2020 8:37 pm    文章主題: 引言回覆

Patrick Wu 寫到:
給 Ufochen 先進參考 因 帳 & 密 不符 請自行套用

ieMonitor = Createobject("InternetExplorer.Application")
ieMonitor.Navigate("http://220.134.1.201:100")
ieMonitor.Visible = .T.&& 至此...IE 畫面出現
Do While ieMonitor.BUSY Or ieMonitor.READYSTATE <> 4
DoEvents

STORE "admin" TO M->A
STORE "12345678" TO M->B

INKEY(05)

STORE 1 TO M->REP_TIMES
DO WHILE M->REP_TIMES <= LEN(M->A)
ieMonitor.Document.getElementById("username").Value = ieMonitor.Document.getElementById("username").Value + SUBSTR(M->A , M->REP_TIMES , 01)
INKEY(0.5)
STORE M->REP_TIMES + 1 TO M->REP_TIMES
ENDDO

STORE 1 TO M->REP_TIMES
DO WHILE M->REP_TIMES <= LEN(M->B)
ieMonitor.Document.getElementById("password").Value = ieMonitor.Document.getElementById("password").Value + SUBSTR(M->A , M->REP_TIMES , 01)
INKEY(0.5)
STORE M->REP_TIMES + 1 TO M->REP_TIMES
ENDDO

謝謝Patrick Wu熱心指導,上述代碼可以把帳號跟密碼填入,但按下登入鍵時,系統提示帳號不得空白,顯然非手動KEY入的都被視為空白,我試著讓上述代碼自動填入,然後再手動刪去最後一個字"n",再Key入一個"n",系統就可以接受了,我想朝模擬鍵盤的方向試試或許可行
回頂端
檢視會員個人資料 發送私人訊息
Patrick Wu



註冊時間: 2007-01-03
文章: 223
來自: 台北市

第 14 樓

發表發表於: 星期三 八月 26, 2020 10:18 am    文章主題: 引言回覆


oWS = Createobject("Wscript.Shell")
.
.

oWS.SendKeys("{TAB}") 幾次(請自己算一下) 跳到 getElementById("username")
.

STORE 1 TO M->REP_TIMES
DO WHILE M->REP_TIMES <= LEN(M->A)
oWS.SendKeys(SUBSTR(M->A , M->REP_TIMES , 01))
INKEY(0.1)
STORE M->REP_TIMES + 1 TO M->REP_TIMES
ENDDO

試試
回頂端
檢視會員個人資料 發送私人訊息 MSN Messenger
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
無法 在這個版面附加檔案
無法 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作