メモ

主にプログラミング系の備忘録

アップロード画面への遷移まで

17/05/26追記:Googleへのログインのインターフェースが変わったので現在機能しません。
17/05/31追記:よくわからないClassNameでログインアカウントを選択してよいなら改修できそうな気がする
なお、引っ掛かるのは「(4)ログインアカウントの選択」の工程
クラス名の意味が良くわからないのでこれ使っていいのか悩んでいるところ

定数

Public Const YOURID As String = "【YouTubeアカウント】"
Public Const YOURPWD As String = "【YouTubeパスワード】"

(1)YTトップページに遷移

Public Function YT_Navigate() As InternetExplorer

  Dim ie As InternetExplorer: Set ie = New InternetExplorer
  ie.navigate "https://www.youtube.com/":  Call ieCheck(ie)
  ie.Visible = True
'  Debug.Print "YTトップページに遷移"
  Set YT_Navigate = ie
End Function

(2)YTログアウト

Public Function YT_Logout(ie As InternetExplorer) As Boolean 'ie As InternetExplorer
  Dim dom As HTMLDocument
  Dim el As IHTMLElement
  ie.Visible = True 'debug
  
  Set dom = ie.document
    
  For Each el In dom.getElementsByTagName("a")
'    Debug.Print el.getAttribute("href"), el.innerText
    If Trim(el.innerText) = "ログアウト" Then
      el.click
      Call ieCheck(ie)
      YT_Logout = True
 '     Debug.Print "ログアウトに成功"
      Exit Function
    End If
  Next el
  
  YT_Logout = False 'ログアウト済、という認識になるのかな
'      Debug.Print "ログアウトボタンなし(ログアウト済)"

End Function

(3)YTログインボタンを押下

Public Function YT_Login_Click(ie As InternetExplorer) As Boolean
  Dim dom As HTMLDocument
  Dim el As IHTMLElement
  
  Set dom = ie.document
    
  For Each el In dom.getElementsByTagName("a")
    If Trim(el.innerText) = "ログイン" Then
      el.click
      Call ieCheck(ie)
      YT_Login_Click = True
'      Debug.Print "ログインボタン押下に成功"
      Exit Function
    End If
  Next el
'  Debug.Print "ログインボタン押下に失敗"
  YT_Login_Click = False
  
End Function

(4)ログインアカウントの選択

Public Function YT_SelectLoginAccount(ie As InternetExplorer, sId As String) As Boolean
  
  
  Dim dom As HTMLDocument: Set dom = ie.document
  Dim el As IHTMLElement
  For Each el In dom.getElementsByTagName("button")
  If el.Value = sId Then
    el.click
    Call ieCheck(ie)
'    Debug.Print "アカウント選択に成功"
    YT_SelectLoginAccount = True
    Exit Function
  End If
  Next el
  
  YT_SelectLoginAccount = False
'  Debug.Print "アカウント選択に失敗"
End Function

(5)パスワードを入力し、「ログイン」ボタンを選択

Public Function YT_Login(ie As InternetExplorer, sId As String, sPwd As String) As Boolean
  Dim dom As HTMLDocument
  
  Set dom = ie.document
  Call dom.getElementById("Passwd").setAttribute("value", sPwd)
  dom.getElementById("signIn").click
  Call ieCheck(ie)
  
  YT_Login = True
  Debug.Print "ログイン成功"
End Function

(6)アップロード画面に遷移

Public Function YT_NavigateUpload(ie As InternetExplorer) As Boolean
  
  Dim dom As HTMLDocument
  Dim el As IHTMLElement
  
  Set dom = ie.document
  For Each el In dom.getElementsByTagName("a")
    If el.getAttribute("title") = "アップロード" Then
      el.click
      Call ieCheck(ie)
      YT_NavigateUpload = True
      Exit Function
    End If
  Next el
  
  YT_NavigateUpload = False
  
End Function

これまでのまとめ。

Public Sub YT_Prepare()
  Dim sId As String: sId = YOURID
  Dim sPwd As String: sPwd = YOURPWD
  
  Dim ie As InternetExplorer: Set ie = YT_Navigate()
  Dim i As Long
  Debug.Print "ログアウト:", YT_Logout(ie)
  i = 0
  Do Until YT_Login_Click(ie)
    i = i + 1
    Debug.Print i & "回目ログインボタン押下失敗。0.5秒待ちます。"
    Call MySleep(500)
  Loop
  
  Debug.Print "アカウント選択:", YT_SelectLoginAccount(ie, sId)
  Debug.Print "ログイン:", YT_Login(ie, sPwd)
  Debug.Print "アップロード画面に遷移:", YT_NavigateUpload(ie)
    
    
End Sub