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
 
|
2#
發表於 2017-1-9 14:15
| 只看該作者
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
複製代碼 |
|
|
|
|
|
|
- 帖子
- 549
- 主題
- 152
- 精華
- 0
- 積分
- 691
- 點名
- 0
- 作業系統
- WIN7
- 軟體版本
- OFFICE 2010
- 閱讀權限
- 50
- 性別
- 男
- 註冊時間
- 2013-8-10
- 最後登錄
- 2022-9-7
 
|
3#
發表於 2017-1-9 22:32
| 只看該作者
回復 2# singo1232001
這個實在太酷了,我感到非常的興奮關於你找的這篇文章
我之前遇到的警告視窗,是當時我找不到相關的網頁元素
但實際上按了按鈕之後程式碼是不會停止的
因此我就算好時間用sendkey 解決了那個問題
但後來我遇到選擇檔案的按鈕一旦click之後就無法動作了,到目前仍然無解
我來試試看您的程式碼,先感謝再感謝了 |
|
PKKO
|
|
|
|
|
- 帖子
- 549
- 主題
- 152
- 精華
- 0
- 積分
- 691
- 點名
- 0
- 作業系統
- WIN7
- 軟體版本
- OFFICE 2010
- 閱讀權限
- 50
- 性別
- 男
- 註冊時間
- 2013-8-10
- 最後登錄
- 2022-9-7
 
|
4#
發表於 2017-1-10 02:16
| 只看該作者
本帖最後由 PKKO 於 2017-1-10 02:17 編輯
回復 2# singo1232001
感謝大大的文章
經果改編之後我也成功了,非常感謝哦!!!
只是切換輸入法的問題,我是丟出一個切換輸入法的動作
不曉得有沒有甚麼方法是可以固定英文輸入法的?- Set WshShell = CreateObject("wscript.shell")
- Do
- ret = WshShell.AppActivate("選擇要上傳的檔案")
- Loop Until ret = True
- wscript.sleep 500
- ret = WshShell.AppActivate("選擇要上傳的檔案")
- If ret = True Then
- ret = WshShell.AppActivate("選擇要上傳的檔案")
- wscript.sleep 500
- WshShell.SendKeys "%n"
- WshShell.SendKeys "+"
- WshShell.SendKeys "C:\USERS\USER\DESKTOP\AA.JPG"
- WshShell.SendKeys "%o"
- End If
- wscript.sleep 1000
複製代碼 |
|
PKKO
|
|
|
|
|
- 帖子
- 1018
- 主題
- 15
- 精華
- 0
- 積分
- 1058
- 點名
- 0
- 作業系統
- win7 32bit
- 軟體版本
- Office 2016 64-bit
- 閱讀權限
- 50
- 性別
- 男
- 來自
- 桃園
- 註冊時間
- 2012-5-9
- 最後登錄
- 2022-9-28
|
5#
發表於 2017-1-10 19:13
| 只看該作者
回復 1# singo1232001
提供另一種繞過 alert 視窗的方法
Sub test()
Dim x
Dim oie As Object: Set oie = CreateObject("internetexplorer.application")
With oie
.Visible = True
.Navigate "https://login.104.com.tw/login.cfm"
Do While .readystate <> 4 Or .busy: DoEvents: Loop
.Document.getelementByid("id_name").Value = "aaa"
For Each x In .Document.getElementsByTagName("input")
If x.Type = "submit" And x.Value = "會員登入" Then
With .Document.parentWindow
.execScript "window.nativeAlert = window.alert" '儲存原始的alert
.execScript "window.alert = function() {}" '覆寫alert function
x.Click
.execScript "window.alert = window.nativeAlert" '還原原始的alert
End With
Exit For
End If
Next
Do While .readystate <> 4 Or .busy: DoEvents: Loop
.Quit
End With
End Sub |
|
表達不清、題意不明確、沒附檔案格式、沒有討論問題的態度~~~~~~以上愛莫能助。
|
|
|
|
|
- 帖子
- 354
- 主題
- 5
- 精華
- 0
- 積分
- 387
- 點名
- 0
- 作業系統
- windows7
- 軟體版本
- vba,vb,excel2007
- 閱讀權限
- 20
- 性別
- 男
- 註冊時間
- 2017-1-8
- 最後登錄
- 2024-8-2
 
|
6#
發表於 2017-1-11 09:07
| 只看該作者
我後來有發現到一個現象
我認為wscript 最後需要寫出一個關閉的巨集
不曉得是不是是=nothing
我在電腦程式管理員中發現
後台都沒關起來 越開越多
電腦變慢
是否有相同的狀況 |
|
|
|
|
|
|
- 帖子
- 549
- 主題
- 152
- 精華
- 0
- 積分
- 691
- 點名
- 0
- 作業系統
- WIN7
- 軟體版本
- OFFICE 2010
- 閱讀權限
- 50
- 性別
- 男
- 註冊時間
- 2013-8-10
- 最後登錄
- 2022-9-7
 
|
7#
發表於 2017-1-13 00:10
| 只看該作者
回復 5# stillfish00
S大大,好特別的方式
想請教一:這個語法適用於所有網站的單一確認視窗嗎?
想請降二:若是有是或否的視窗呢?以及選擇檔案的視窗呢?有辦法處理嗎 |
|
PKKO
|
|
|
|
|
- 帖子
- 1018
- 主題
- 15
- 精華
- 0
- 積分
- 1058
- 點名
- 0
- 作業系統
- win7 32bit
- 軟體版本
- Office 2016 64-bit
- 閱讀權限
- 50
- 性別
- 男
- 來自
- 桃園
- 註冊時間
- 2012-5-9
- 最後登錄
- 2022-9-28
|
8#
發表於 2017-1-13 10:53
| 只看該作者
回復 7# PKKO
想請教一:這個語法適用於所有網站的單一確認視窗嗎?
未必,看網站是用哪種方法彈出視窗,當然你也可能看不出來他是用哪種方法
主要是 alert 視窗會阻擋你的程式下一步執行,又蠻常見的,
這邊只是猜測它用 alert 方法彈出視窗,然後
對你自己建的 ie 元件,暫時性地蓋過原本的alert動作而已
想請降二:若是有是或否的視窗呢?以及選擇檔案的視窗呢?有辦法處理嗎
有是或否的視窗 推測是用 confirm 來產生的
http://www.w3schools.com/js/js_popup.asp
可以用類似方法泡製,但要回傳 true 或 false
選擇檔案的視窗,通常是要上傳檔案吧
這我不熟,網頁擷取很少做到上傳檔案的 |
|
表達不清、題意不明確、沒附檔案格式、沒有討論問題的態度~~~~~~以上愛莫能助。
|
|
|
|
|
- 帖子
- 549
- 主題
- 152
- 精華
- 0
- 積分
- 691
- 點名
- 0
- 作業系統
- WIN7
- 軟體版本
- OFFICE 2010
- 閱讀權限
- 50
- 性別
- 男
- 註冊時間
- 2013-8-10
- 最後登錄
- 2022-9-7
 
|
9#
發表於 2017-1-14 01:02
| 只看該作者
回復 8# stillfish00
了解,非常感謝! |
|
PKKO
|
|
|
|
|