Board logo

標題: [發問] vba判斷是否已登入網頁 [打印本頁]

作者: msmplay    時間: 2018-3-28 20:46     標題: vba判斷是否已登入網頁

請問該如何在以下程式碼加入判斷式條件判斷如果進入登入網址http://10.178.1.140:8023/Login.aspx時,如果找不到登入id"txtUserName",則直接跳至查詢數據網址http://10.178.1.140:8023/ConditionPage/ConditionAgentDay.aspx,並繼續往下執行


如果未登入時,則由上至下自動執行
----------------------------------------------------------------
Sub 自動登入()
Dim a As Object
Set myIE = CreateObject("InternetExplorer.Application")
With myIE
  .Visible = False
  .Navigate "http://10.178.1.140:8023/Login.aspx" '登入網址  <<<進入登入網址

     Do While .ReadyState <> 4
        DoEvents
     Loop

Set a = .document.all.tags("INPUT")
  .document.all.txtUserName.innertext = "XXXXX" '登入帳號  <<<如果找不到登入id,則直接進入查詢數據網址
  .document.all.txtPassword.innertext = "XXXXX" '登入密碼
  .document.all.btnLogin.Click '點選登入按鈕

     Do Until .ReadyState = 4
        DoEvents
     Loop

  .Navigate "http://10.178.1.140:8023/ConditionPage/ConditionAgentDay.aspx" '查詢數據網址

  ........程式碼......
作者: iamaraymond    時間: 2018-3-28 23:03

回復 1# msmplay


可以試試看用原始碼搭配instr找,例如
if instr(1,原始碼,您要找的字串)=0 then ...
若等於0代表字串不存在
供您參考
作者: jcchiang    時間: 2018-3-29 16:54

回復 1# msmplay
這個問題有點怪怪的
程式一開始就進入Login網頁,就表示要Login才能進入查詢頁面
但找不到ID就直接進入查詢網頁,代表不須Login就可以進入查詢網頁,那就直接開啟查詢網頁,為何還要去Login網頁判別ID
而且程式中的ID已經直接定義了,怎麼會找不到ID(因為ID不是另外輸入的)
.document.all.txtUserName.innertext = "XXXXX" '登入帳號  <<<如果找不到登入id,則直接進入查詢數據網址
作者: msmplay    時間: 2018-3-29 17:46

回復 3# jcchiang


   j大對不起,可能跟我不懂程式碼邏輯有關,目前遇到問題是,如果照著程式碼由上往下執行=登入網頁>執行登入>轉換到查詢網頁>執行其他動作。但如果當天已經執行過一次或已經登入後需要再執行一次以上程式碼,就會執行到.document.all.txtUserName.innertext = "XXXXX" '登入帳號 出現錯誤訊息


因為已經是登入狀態,即便輸入登入網址.Navigate "http://10.178.1.140:8023/Login.aspx" '登入網址


系統ㄝ會自己轉換到"http://10.178.1.140:8023/ConditionPage/ConditionAgentDay.aspx" '查詢數據網址,因此在查詢網址頁面由上至下執行登入動作就會出現異常。


想請問有什麼方式可以判斷ㄧ開始進入登入網頁時,如果直接轉換到查詢網頁代表已經登入過了,就直接往查詢數據網址以下程式繼續執行。


我是這個意思啦!不會表達或表達錯誤請原諒~~~
作者: jcchiang    時間: 2018-3-30 08:33

回復 4# msmplay
妳先查看原始碼,未登入 & 已登入 txtUserName.innertext 內的字元是否有不一樣
如已登入的txtUserName.innertext 已有登入帳號,就可以判別如已有帳號就跳至查詢網頁
作者: msmplay    時間: 2018-3-30 14:57

回復 5# jcchiang    j大~~~我加入以下紅色程式碼成功解決問題了,感謝熱心回覆ㄛ!!!

Sub 自動登入()
On Error GoTo ErrorHandler
Dim a As Object
Set myIE = CreateObject("InternetExplorer.Application")
With myIE
  .Visible = False
.Navigate "http://10.178.1.140:8023/Login.aspx" '登入網址

     Do While .ReadyState <> 4
        DoEvents
     Loop

Set a = .document.all.tags("INPUT")
  .document.all.txtUserName.innertext = "XXXXX" '登入帳號
  .document.all.txtPassword.innertext = "XXXXX" '登入密碼
  .document.all.btnLogin.Click '點選登入按鈕

     Do Until .ReadyState = 4
        DoEvents
     Loop

ErrorHandler:
  .Navigate "http://10.178.1.140:8023/ConditionPage/ConditionAgentDay.aspx" '查詢數據網址

  ........程式碼......
作者: GBKEE    時間: 2018-4-1 11:38

回復 6# msmplay
  1. Option Explicit
  2. Const 用戶名稱 = "msmplay"
  3. Const 用戶密碼 = "修改為你的登入密碼"
  4. Private Sub Ex()
  5.     If 登錄查看 = False Then 登錄
  6. End Sub
  7. Private Function 登錄查看() As Boolean
  8.     With CreateObject("InternetExplorer.Application")
  9.         .Navigate "http://forum.twbts.com/task.php?item=done"
  10.         Do While .Busy Or .readyState <> 4: DoEvents: Loop
  11.         登錄查看 = InStr(.Document.BODY.innertext, 用戶名稱)
  12.         .Quit        '關閉網頁
  13.     End With
  14. End Function
  15. Private Sub 登錄()
  16.     Dim i As Variant, vDoc As Object
  17.     With CreateObject("InternetExplorer.Application")
  18.         ' .Visible = True
  19.         .Navigate "http://forum.twbts.com/logging.php?action=login"
  20.         Do While .Busy Or .readyState <> 4: DoEvents: Loop
  21.         Set vDoc = .Document.getElementsByTAGName("INPUT")
  22.         For i = 0 To vDoc.Length - 1
  23.             If vDoc(i).Name = "username" Then vDoc(i).Value = 用戶名稱
  24.             If vDoc(i).Name = "password" Then vDoc(i).Value = 用戶密碼: Exit For
  25.         Next
  26.         Set vDoc = .Document.getElementsByTAGName("input") '.Click
  27.         For i = 0 To vDoc.Length - 1
  28.             If vDoc(i).Type = "checkbox" Then vDoc(i).Click: Exit For
  29.         Next
  30.         Set vDoc = .Document.getElementsByTAGName("button") '.Click
  31.         For i = 0 To vDoc.Length - 1
  32.             If vDoc(i).Name = "loginsubmit" Then vDoc(i).Click: Exit For
  33.         Next
  34.         i = Time
  35.         Do
  36.             DoEvents
  37.             If Time > i + #12:00:30 AM# Then MsgBox .Document.Title & vbLf & " 登入失敗 !": .Quit: End
  38.         Loop Until InStr(.Document.BODY.innertext, 用戶名稱)
  39.         .Quit
  40.     End With
  41. End Sub
複製代碼

作者: msmplay    時間: 2018-4-12 22:40

回復 7# GBKEE

   G大~~超級感謝,不過可以再跟你請教最近遇到的問題嗎~~~~以下是測試步驟,主要發生問題是在紅色部份
Sub TEST()
Set myIE = CreateObject("InternetExplorer.Application")
With myIE
  .Visible = True
  .Navigate "http://forum.twbts.com/index.php" '進入麻辣家族討論區
  Do While .Busy Or .readyState <> 4: DoEvents: Loop


  .document.all.mycredits.Click '點選進入我的帖子,但開啟網頁時是自動開啟一個新的分頁,而且畫面不會自動切換到新分頁頁籤(畫面仍停留在原頁面)
  Application.Wait Now + TimeValue("0:00:2") '等待2秒
  .Navigate "http://forum.twbts.com/my.php?item=threads" '進入我的帖子(使用原頁面轉換到我的帖子,非切換到分頁)
  Application.Wait Now + TimeValue("0:00:2") '等待2秒
  .document.all.mn_viewthread_1.Click '點選進入論壇版規
End With
End Sub



問題1. 因為公司使用IE8,每人電腦速度快慢不一,以下執行結果有人電腦慢就會跑到最後一步點選進入論壇版規時發生錯誤,因為上一步進入我的帖子網頁根本還沒跑出來(還在轉),等待2秒對他們而言算太快,但對電腦快的人如果等待2秒以上又覺得太慢
想請問有什麼辦法可以自動偵測網頁是否已運行完成再執行下一步嗎?而不是用固定秒數計時。


問題2. 因為點選進入我的帖子時,公司的IE8開啟網頁時是自動開啟一個新的分頁,但畫面不會自動切換到新分頁頁籤(畫面仍停留在原頁面)
想請問有什麼方式可以在點選進入我的帖子後畫面自動切換到新分頁頁籤,醬也就不用再多一步  .Navigate "http://forum.twbts.com/my.php?item=threads" '進入我的帖子(使用原頁面轉換到我的帖子,非切換到分頁) 了

作者: GBKEE    時間: 2018-4-13 15:22

回復 8# msmplay
  1. '請先將專案 [設定引用項目]加入  Microsoft Internet Controls
  2. Option Explicit
  3. Dim myIE As New InternetExplorer
  4. Const myURL = "http://forum.twbts.com/my.php?item=threads" '我的帖子分頁
  5. Sub TEST()
  6.     'Set myIE = CreateObject("InternetExplorer.Application")
  7.     With myIE
  8.         .Visible = True
  9.         .Navigate "http://forum.twbts.com/index.php" '進入麻辣家族討論區
  10.         Do While .Busy Or .readyState <> 4: DoEvents: Loop
  11.         .Document.all.mycredits.Click '點選進入我的帖子,但開啟網頁時是自動開啟一個新的分頁,而且畫面不會自動切換到新分頁頁籤(畫面仍停留在原頁面)
  12.         Do:     DoEvents:         Loop Until InStr(.Document.BODY.INNERTEXT, " 我的帖子")
  13.     End With
  14.     IE_Function
  15.     ''我的帖子分頁中-- 轉移分頁網址
  16.     With myIE
  17.          .Navigate "http://forum.twbts.com/thread-20650-1-1.html"
  18.           Do While .Busy Or .readyState <> 4: DoEvents: Loop
  19.     End With
  20. End Sub
  21. Private Function IE_Function()
  22.     Dim shell_windows As New SHDocVw.ShellWindows
  23.     Dim IE As SHDocVw.InternetExplorer
  24.     Dim objShell As Object
  25.     Set myIE = Nothing
  26.     Set objShell = CreateObject("shell.application")
  27.     If objShell.Windows.Count = 0 Then  '防呆   :  Ie 沒有開啟
  28.         Shell "C:\Program Files\Internet Explorer\IEXPLORE.EXE", 2  ' (2  應用程式視窗會以一個圖示來顯示,並具有駐點)
  29.         MsgBox "請等候 ie 開啟完畢": End
  30.     End If
  31.     For Each IE In shell_windows
  32.         With IE
  33.             Do While .Busy Or .readyState <> 4:         Loop
  34.             If .LocationURL = myURL Then
  35.                 Set myIE = IE
  36.                Exit Function
  37.             End If
  38.         End With
  39.     Next
  40. End Function
複製代碼

作者: msmplay    時間: 2018-4-13 18:46

回復 9# GBKEE


   G大~~~請問執行時第3段 Dim myIE As New InternetExplorer 出現錯誤訊息「使用者自訂型態尚未定義」是為什麼呢??
作者: msmplay    時間: 2018-4-13 18:59

回復 9# GBKEE


   G大對不起~~~~~我看到第一段備註了'請先將專案 [設定引用項目]加入  Microsoft Internet Controls

沒事~~~沒事~~~
作者: msmplay    時間: 2018-4-13 19:21

回復 9# GBKEE


   對了!!忘記跟你說,非常感謝~~~~~~~~又解決了一個我滿腦子的問題!!!!




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)