返回列表 上一主題 發帖

vba控制網頁 browser碰上alert停住了

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警告視窗,但必須再發出新的指令送給伺服器,是的,看能不能繞過這個警告視窗,這個視窗我完全用不到
  1. 'Private Declare Function SetFocus Lib "user32" Alias "SetFocus2" (ByVal hwnd As Long) As Long
  2. 'Private Declare PtrSafe Function WinAPISetFocus Lib "user32" Alias "SetFocus" (ByVal hwnd As LongPtr) As Long

  3. Sub getALLBrowsersaaa()
  4. On Error GoTo Err_Clear
  5.     Dim mainWorkBook As Workbook
  6.    

  7.    
  8.     Set objShell = CreateObject("Shell.Application")
  9.     Set objAllWindows = objShell.Windows
  10.     Set mainWorkBook = ActiveWorkbook

  11. For Each ow In objAllWindows
  12.     If (InStr(1, ow, "Internet Explorer", vbTextCompare)) Then
  13.         If (InStr(1, ow.LocationURL, "https://login.104.com.tw/login.cfm", vbTextCompare)) Then
  14.                

  15.     Set HTMLDoc = ow.document
  16.      HTMLDoc.all.id_name.Value = "aaa"    '< -帳號隨便打讓他跳警告
  17. For Each MyHTML_Element In HTMLDoc.getElementsByTagName("input")
  18.     If MyHTML_Element.Type = "submit" And MyHTML_Element.Value = "會員登入" Then
  19.      
  20.      
  21. '     Call 雙開vba  <先不用,想傳去給Sub StartAsub()  SetTimer Application.hWnd, 1, 15000, AddressOf getALLBrowsersaaa>
  22.      MyHTML_Element.Click   <--進入ie就卡了
  23. Do While ow.readyState <> 4 Or ow.Busy:
  24.                 DoEvents
  25.                 If ow.Busy Then
  26.                 ow.Visible = False     ''就是從新隱藏使用視窗
  27.                 ow.Visible = True      ''接著又重新顯示active使用視窗
  28.                     ow.document.Focus
  29.                     DoEvents

  30.                     Application.SendKeys "{ENTER}", True   '**按下鍵
  31.                 End If
  32.             Loop
  33. : Exit For
  34.      End If
  35.     Next



  36.     End If
  37. End If
  38.         
  39.     Next
  40. Err_Clear:
  41. If Err <> 0 Then
  42. Err.Clear
  43.     Resume Next
  44. End If

  45. '    Call StopAsub  <先不用,想傳回去StopAsub()   killtimer>
  46. End Sub
複製代碼

https://www.youtube.com/watch?v=G-2khNFYQl8

喔耶  太神拉

終於找到了

真的成功了

只要靠純文字檔案  儲存成vbs  搞定


"message from webpage"

改成警告視窗的名稱



拿純文字檔來改成下面,記得儲存成.vbs
  1. set wshshell = createobject("wscript.shell")

  2. do
  3.     ret = wshshell.AppActivate("網頁訊息")
  4. loop until ret = true

  5.     wscript.sleep 1000
  6.     ret = wshshell.appactivate("網頁訊息")
  7.         if ret = true then
  8.                    ret = wshshell.appactivate("網頁訊息")
  9.                 wscript.sleep 1000
  10.                 wshshell.sendkeys "{enter}"
  11.         end if
  12.         wscript.sleep 1000
複製代碼

TOP

我後來有發現到一個現象

我認為wscript 最後需要寫出一個關閉的巨集

不曉得是不是是=nothing

我在電腦程式管理員中發現

後台都沒關起來 越開越多

電腦變慢

是否有相同的狀況

TOP

        靜思自在 : 犯錯出懺悔心,才能清淨無煩惱。
返回列表 上一主題