vba控制網頁 browser碰上alert停住了
- 帖子
- 354
- 主題
- 5
- 精華
- 0
- 積分
- 387
- 點名
- 0
- 作業系統
- windows7
- 軟體版本
- vba,vb,excel2007
- 閱讀權限
- 20
- 性別
- 男
- 註冊時間
- 2017-1-8
- 最後登錄
- 2024-8-2
 
|
vba控制網頁 browser碰上alert停住了
本帖最後由 singo1232001 於 2017-1-9 07:30 編輯
https://login.104.com.tw/login.cfm
(上面為104 某某銀行的登入網站)
剛好在網路上找到一個大家都能測試的網站(主要我碰到的alert是公司內部網站)
所以用這個來測試
帳號隨便打個錯誤的,讓他跳警告來測試(code內已有順便key上aaa)
以下code測試方式
1.先打開ie 並 開啟連結
2.打開excel設定引用項目,呼叫 microsoft internet controls 和 microsoft HTML Object library
3.測試code
狀況
目前通常都會在click時.excel就整個卡住停止了,後面的點擊程序都沒開始,alert視窗必須要點掉程式才有辦法繼續跑,(不能close,我公司內部的一定要點是)
目前碰壁的思考方向
1.想說是否要在click以前先呼叫vba雙開,過個幾秒自動sendkey "enter" [不過我測試的時候,當ie一跳出alert,整個excel都停住,包含第二個settimer的sub
2.同1,但是呼叫的是類似"自動連點程式"的外掛(聽說有人成功,但我不懂門道)
3.想說是不是可以用 .document.writeln 直接把目前的暫存網頁的"會員登入"給改掉,讓他不會跳出alert警告視窗,但必須再發出新的指令送給伺服器,是的,看能不能繞過這個警告視窗,這個視窗我完全用不到- 'Private Declare Function SetFocus Lib "user32" Alias "SetFocus2" (ByVal hwnd As Long) As Long
- 'Private Declare PtrSafe Function WinAPISetFocus Lib "user32" Alias "SetFocus" (ByVal hwnd As LongPtr) As Long
- Sub getALLBrowsersaaa()
- On Error GoTo Err_Clear
- Dim mainWorkBook As Workbook
-
-
- Set objShell = CreateObject("Shell.Application")
- Set objAllWindows = objShell.Windows
- Set mainWorkBook = ActiveWorkbook
- For Each ow In objAllWindows
- If (InStr(1, ow, "Internet Explorer", vbTextCompare)) Then
- If (InStr(1, ow.LocationURL, "https://login.104.com.tw/login.cfm", vbTextCompare)) Then
-
- Set HTMLDoc = ow.document
- HTMLDoc.all.id_name.Value = "aaa" '< -帳號隨便打讓他跳警告
- For Each MyHTML_Element In HTMLDoc.getElementsByTagName("input")
- If MyHTML_Element.Type = "submit" And MyHTML_Element.Value = "會員登入" Then
-
-
- ' Call 雙開vba <先不用,想傳去給Sub StartAsub() SetTimer Application.hWnd, 1, 15000, AddressOf getALLBrowsersaaa>
- MyHTML_Element.Click <--進入ie就卡了
- Do While ow.readyState <> 4 Or ow.Busy:
- DoEvents
- If ow.Busy Then
- ow.Visible = False ''就是從新隱藏使用視窗
- ow.Visible = True ''接著又重新顯示active使用視窗
- ow.document.Focus
- DoEvents
- Application.SendKeys "{ENTER}", True '**按下鍵
- End If
- Loop
- : Exit For
- End If
- Next
- End If
- End If
-
- Next
- Err_Clear:
- If Err <> 0 Then
- Err.Clear
- Resume Next
- End If
- ' Call StopAsub <先不用,想傳回去StopAsub() killtimer>
- End Sub
複製代碼 |
|
|
|
|
|
|
|
- 帖子
- 354
- 主題
- 5
- 精華
- 0
- 積分
- 387
- 點名
- 0
- 作業系統
- windows7
- 軟體版本
- vba,vb,excel2007
- 閱讀權限
- 20
- 性別
- 男
- 註冊時間
- 2017-1-8
- 最後登錄
- 2024-8-2
 
|
https://www.youtube.com/watch?v=G-2khNFYQl8
喔耶 太神拉
終於找到了
真的成功了
只要靠純文字檔案 儲存成vbs 搞定
"message from webpage"
改成警告視窗的名稱
拿純文字檔來改成下面,記得儲存成.vbs- set wshshell = createobject("wscript.shell")
- do
- ret = wshshell.AppActivate("網頁訊息")
- loop until ret = true
- wscript.sleep 1000
- ret = wshshell.appactivate("網頁訊息")
- if ret = true then
- ret = wshshell.appactivate("網頁訊息")
- wscript.sleep 1000
- wshshell.sendkeys "{enter}"
- end if
- wscript.sleep 1000
複製代碼 |
|
|
|
|
|
|
|
- 帖子
- 354
- 主題
- 5
- 精華
- 0
- 積分
- 387
- 點名
- 0
- 作業系統
- windows7
- 軟體版本
- vba,vb,excel2007
- 閱讀權限
- 20
- 性別
- 男
- 註冊時間
- 2017-1-8
- 最後登錄
- 2024-8-2
 
|
我後來有發現到一個現象
我認為wscript 最後需要寫出一個關閉的巨集
不曉得是不是是=nothing
我在電腦程式管理員中發現
後台都沒關起來 越開越多
電腦變慢
是否有相同的狀況 |
|
|
|
|
|
|
|