上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
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 |
|
回頂端 |
|
|
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 先進參考 |
|
回頂端 |
|
|
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) 再填入下一個字 |
|
回頂端 |
|
|
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 |
|
回頂端 |
|
|
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
試試 |
|
回頂端 |
|
|
|