• 締切済み

[VBA] IEによる自動ログインについて

こちらの識者の方々にはいつもお世話になっています。 VBAの質問です。 環境は下記になります。 OS=windows7 pro 64bit Office=Excel2007(12.0.6712.5000) SP3 IE=11.0.9600.17501(IE11) ・やりたいこと VBAを使用してnanacoのサイトに自動ログオンする ・試したコード Option Explicit Sub test() Dim objIE As Object Dim obj As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "https://www.nanaco-net.jp/pc/emServlet" Do While objIE.Busy = True Or objIE.readyState <> 4 DoEvents Loop 'ID、pass入力 For Each obj In objIE.document.getElementsByTagName("input") If obj.ID = "XCID" Then obj.Value = "1234567890123456" 'nanaco番号 End If If obj.ID = "SECURITY_CD" Then obj.Value = "1234567" 'カード記載の番号 End If Next 'ログインボタンをクリックする For Each obj In objIE.document.getElementsByTagName("button") If obj.ID = "Login" Then obj.Click End If Next Set objIE = Nothing End Sub ・問題点 ログイン画面の「カード記載の番号でログインする」の項目の「nanaco番号」「カード記載の番号」にそれぞれ「1234567890123456」「1234567」を入力したいのですが、自分で調べて上記コードを試したところ、IEは立ち上がるものの、該当の箇所に文字列が入力されません。 コードの「ログインボタンをクリックする」部分についても動作していないと思います。 VBAでIEを制御すること自体慣れていないのですが、上記コードの問題点とできればコードをご教授いただけますでしょうか。 質問に不備不足等ございましたらご指摘ください。 ご面倒お掛けしますがよろしくお願いします。

みんなの回答

  • kumatti1
  • ベストアンサー率60% (73/121)
回答No.1

こんな感じで。 --- Option Explicit Sub hoge() Const url = "https://www.nanaco-net.jp/pc/emServlet" Dim ie As Object Set ie = CreateObject("InternetExplorer.Application") ie.Visible = True ie.Navigate url While ie.busy Or ie.ReadyState <> 4 DoEvents Wend ie.document.forms(0).Item("XCID").Value = "ID" ie.document.forms(0).Item("SECURITY_CD").Value = "PW" ie.document.forms(0).all("ACT_ACBS_do_LOGIN2").Click End Sub

関連するQ&A

  • vbaでnanacoにログイン(ie操作)

    私は「緑のパスワードがなくnanacoをお持ちの方」です。 カード記載の番号にはvbaで値を入れることはできるのですが、 nanaco番号に値を入れることとログインボタンを押すことができません。 ********************************************** Sub nanaco() Dim objIE As InternetExplorer Dim myObj As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.navigate "https://www.nanaco-net.jp/pc/emServlet" Do While objIE.Busy = True DoEvents Loop Do While objIE.document.readyState <> "complete" DoEvents Loop objIE.document.all("XCID").Value = "12345" objIE.document.all("SECURITY_CD").Value = "Password" For Each myObj In objIE.document.forms(0).all If TypeName(myObj) = "HTMLInputElement" Then If myObj.alt = "ログイン" Then myObj.Click Exit For End If End If Next Set objIE = Nothing End Sub ********************************************** これだとまずall("XCID").Value でエラーになります。 ソースでは、 <input name="XCID" tabIndex="1" class="txtBoxLogin" accessKey="1" type="text" maxLength="16" value=""/> となっておりますが、同じコードが二つあるからエラーになるのでしょうか? all("SECURITY_CD").Value は問題なくできます。 ソースにも、SECURITY_CDは一つしかないです。 次にログインボタンも二つあるのですが、 For Each myObj In objIE.document.forms(0).all If TypeName(myObj) = "HTMLInputElement" Then If myObj.alt = "ログイン" Then myObj.Click Exit For End If End If Next このコードを実行すると、多分上の方のログインボタンが押されてるようです。 なので、 Dim 二つ目 As Boolean For Each myObj In objIE.document.forms(0).all If TypeName(myObj) = "HTMLInputElement" Then If myObj.alt = "ログイン" Then If 二つ目 = True Then myObj.Click Exit For End If 二つ目 = True End If End If Next に変更してみたのですが、 どうやら If myObj.alt = "ログイン" Then になるのは、1回しかないようです。 うーん、うまくできません。 ご教授よろしくお願いします。

  • VBAでIEで開いたダイアログのオブジェクトの操作

    VBAでIE(Edge)上のWebページのエディットボックスやボタンを操作するには、 ie(COMオブジェクト)を取得して、 For Each obj In ie.document.getElementsByTagName("input")  If obj.ID = "txtDenpyoNo" Then   obj.Value = d_no   Exit For  End If Next For Each obj In ie.document.getElementsByTagName("input")  If obj.ID = "btnSearch" Then   obj.Click   Exit For  End If Next というような感じで、 エディットボックスに値を入れたり取得したり ボタンをクリックしたりする仕方は分かりましたが、 サイト上のボタンをクリックすると、 別のウインドウやダイアログが表示されることがあります。 このような場合、HTMLコードがないため、 上記の方法では記述することができません。 新しいウインドウやダイアログのタイトルから、 IDは取得することはできましたが、この取得したIDで、 ウインドウやダイアログをアクティブにするには、 どのように記述すればよいのでしょうか。 また、ウインドウやダイアログ上のオブジェクトの 指定の仕方がよく分からないのですが、 ウインドウやダイアログ上のオブジェクトを操作するには、 どのように記述をすればよいのでしょうか。 よろしくお願いします。(Windows10,IE,Edge)

  • VBA 実行時エラー1004 rangeメソッドは

    始めまして、VBA初心者です。 現在VBAプログラムを使って、サイトに自動ログイン出来るようにコードを作成しているのですが、『実行時エラー’1004’rangeメソッドは失敗しました。’_global’オブジェクト』とメッセージが出て、実行できません。 デバックをすると以下の11行目で黄色のバーが出ていました。いろいろと調べてみましたが、原因がわからずに止まってしまいました。 どなかた分かる方がいらっしゃいましたら教えて頂けますようにお願い致します。 コードは下記です。 Sub 無料スペースログイン() Set ObjIE = CreateObject("InternetExplorer.Application") ObjIE.Visible = True ObjIE.Navigate "http://mnnf.jp/signup/" Do While ObjIE.ReadyState <> 4 Do While ObjIE.Busy = True Loop Loop For Each Obj In ObjIE.Document.getElementsByTagName("input") If Obj.Name = "mail" Then ObjIE.Document.getElementsByName("mail")(0).Value = Range("A1").Value Else If Obj.Name = "password" Then ObjIE.Document.getElementsByName("password")(0).Value = Range("B1").Value Else Exit For If Obj.alt = "新規無料登録" Then Obj.Click Exit For End If End If End If Next End Sub

  • 【Excel VBA】ウェブサイトの自動ログイン

    VBAでRedHatのホームページに自動ログインするプログラムを作成しています。 <コード> Sub RedHat() Dim objIE As InternetExplorer Dim urlName As String Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True Call ieView(objIE, "https://idp.redhat.com/idp") If objIE.LocationURL <> "https://idp.redhat.com/idp" Then Call ieNavi(objIE, "https://www.redhat.com/wapps/ugc/protected/account.html") Call tagClick(objIE, "li", "utility-account") Call tagClick(objIE, "p", "ログアウト") Call ieNavi(objIE, "https://idp.redhat.com/idp") End If Call formText(objIE, "username", "丸秘") Call formText(objIE, "password", "丸秘") Call tagClick(objIE, "button", "ログイン") Set objIE = Nothing End Sub Function ieView(objIE As InternetExplorer, _ urlName As String) objIE.navigate urlName Call ieCheck(objIE) End Function Function ieCheck(objIE As InternetExplorer) As String Do While objIE.Busy Or objIE.readyState < 4 DoEvents Loop End Function Function tagClick(objIE As InternetExplorer, _ tagName As String, _ tagStr As String) For Each objTag In objIE.document.getElementsByTagName(tagName) If InStr(objTag.outerHTML, tagStr) > 0 Then objTag.Click Call ieCheck(objIE) Exit For End If Next End Function Function ieNavi(objIE As InternetExplorer, _ urlName As String) objIE.navigate urlName Call ieCheck(objIE) End Function Function formText(objIE As InternetExplorer, _ nameValue As String, _ tagValue As String) For Each objTag In objIE.document.getElementsByTagName("input") If objTag.Name = nameValue Then objTag.Value = tagValue Exit For End If Next For Each objTag In objIE.document.getElementsByTagName("textarea") If objTag.Name = nameValue Then objTag.Value = tagValue Exit For End If Next End Function "丸秘"をユーザとパスワードに修正し、 実行しました。 実行後、IE画面で以下のメッセージが表示されます。 「RedHatのログイン画面でユーザ名またはパスワードが無効です」 ユーザ欄がクリックされている状態になります。 すみません。どの行を何に修正すれば、正常に動作しますでしょうか? 教えていただけますと幸いです。 引用元:http://www.vba-ie.net/application/twitter-login.html

  • エクセルVBA Web上のフォームのIDを知る方法

     今晩は,質問させていただきます.どうぞよろしくお願いいたします.  エクセルVBAでWeb上のテキストボックスに文字を入力→ボタンを押す といった作業をいたしたく検索をしておりますと、以下のようなコードを書いてくださってておりました。 (http://billboardtop100.net/2011/03/dim-objie-as-object-dim-obj-as-object.htmlからの転載になります)   If Obj.ID = "searchText" Then     Obj.Value = "任天堂"   Else     If Obj.ID = "searchButton" Then       Obj.Click       Exit For     End If   End If  全てうまくうごき、非常に理解しやすいコードなのでございますが、これらフォームの「ID」を予めどのようにして調べらるのでございましょうか??  もしお詳しい方がいらっしゃいましたら,アドバイスいただきたくどうぞお願いいたします。

  • vba ie操作 電気家計簿ログインできない

    いつもお世話になっております。 何度も質問して申し訳ございません。またまた教えてください。 電気家計簿(https://www.kakeibo.tepco.co.jp/dk/aut/login/)のログインボタンをVBAで押したいのですが うまくできません。 コードは下記の通りです。 ***************************************************************** Sub test() Dim objIE As InternetExplorer Dim myObj As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "https://www.kakeibo.tepco.co.jp/dk/aut/login/" Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop objIE.Document.all("id").Value = "test" objIE.Document.all("password").Value = "tset" 'objIE.Document.Forms(0).submit 'これだと更新されちゃうっぽい 'objIE.Document.Forms(0).Item(2).Click 'Item(0)とItem(1)はエラーにならないけど何も起こらない。Item(2)にするとエラー 'objIE.Document.all.submit.Click 'エラー 'エラーにならないけど何も起こらない 'For i = 0 To objIE.Document.Links.Length - 1 ' If objIE.Document.Links(i).innerHTML Like "*alt=ログイン*" Then ' objIE.Document.Links(i).Click ' Exit For ' End If 'Next i 'エラーにならないけど何も起こらない 'For Each myObj In objIE.Document.forms(0).all ' If TypeName(myObj) = "HTMLInputElement" Then ' If myObj.alt = "ログイン" Then ' myObj.Click ' Exit For ' End If ' End If 'Next Set objIE = Nothing End Sub ***************************************************************** 自分なりにいくつか試してみたのですが、うまくいきませんでした。 ご教授よろしくお願いします。

  • VBAからIEの操作

    グーグルをIEで開いてVBA(語句)を検索して見終わったら IEを閉じる作業をしたいのですが、検索窓にVBA(語句)を 入力するところでエラーとなります。初心者ですが、なんとか 勉強したいのでよろしくお願いいたします。 Sub ie_test_Navigate() Dim objIE As Object Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.Navigate "http://www.google.co.jp/" IE.document.all.q.Value = "VBA" IE.document.all.btnG.Click If MsgBox("IEを閉じますか?", vbYesNo, "終了確認") = vbYes Then objIE.Quit End If Set objIE = Nothing End Sub

  • VBAでURLを指定する方法

    VBAを使用して、エクセルに記載しているテキストで開くURLを変えるプログラムを作成しようと思っております。 例えばA1に『yahoo』と入力されていれば、『http://www.yahoo.co.jp/』を開き、 『google』と入力されていれば、『http://www.google.com』を開くようにしたいです。 現在、下記のプログラムを使用していますので、 下記を流用できるようにして頂けると幸いです。 Sub test() Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "『特定URL』" Do While objIE.ReadyState <> 4 Do While objIE.Busy = True Loop Loop For Each Obj In objIE.Document.getelementsbytagname("input") If Obj.Name = "mail" Then objIE.Document.getelementsbyname("mail")(0).Value = Range("C1").Value Else If Obj.Name = "password" Then objIE.Document.getelementsbyname("password")(0).Value = Range("D1").Value Else objIE.Document.Links(1).Click End If End If Next End Sub 宜しくお願いいたします。

  • 【VBA】IEのリンクを新しいタブで開く

    VBAでIEを制御しリンク(アンカー)<a href="***">を新しいタブで開くようにしたいのですが可能でしょうか? 仮にグーグルのトップページ(http://www.google.co.jp/)の『検索オプション』(http://www.google.co.jp/advanced_search?hl=ja)を新しいタブで開くとします 実際に開きたいリンクのURLは固定ではないためURLの指定では開けませんが、飛びたいリンクの文言(『検索オプション』)は固定です リンクに飛ぶ前に飛ぶ先のURLを取得する仕方か、Shift+Ctrl+クリックのようにリンクを新しいタブで開く方法を教えてください 一度普通にリンクに飛んでからURLを取得し、戻ってから新しいタブで開くぐらいしかできないのでしょうか? Sub 新しいタブで開く() Dim objIE As Object Dim objShell Dim URL As String Set objShell = CreateObject("Shell.Application") For n = objShell.Windows.Count To 1 Step -1 Set objIE = objShell.Windows(n - 1) If Right(UCase(objIE.FullName), 12) = "IEXPLORE.EXE" Then objIE.Navigate "http://www.google.co.jp/" Exit For End If Next Set objShell = Nothing objIE.Visible = True Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop For Each Obj In objIE.Document.getElementsByTagName("a") If Obj.innerText = "検索オプション" Then Obj.Click Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop URL = objIE.Document.URL objIE.GoBack Do While objIE.Busy = True Or objIE.ReadyState <> 4 DoEvents Loop objIE.Navigate URL, CLng(&H800) Exit For End If Next End Sub よろしくお願いいたします

  • vbaでログインできない 手動だとできる

    GMO証券のでも画面にログインするvbaを組んでるのですが、 vbaでsubmitを押すと、エラー画面になってしまいます。画像を添付します。 しかし手動でログインボタンを押すとログインできるんです。そんなこと、あり得ますか? コードは↓です。 ****************************************************** Sub gmo() Dim objIE As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "https://fx-demo.click-sec.com/ygmo/servlet/login?FAGD=1" Do Until objIE.ReadyState = 4 Loop With objIE.Document.Forms("frmMain") .elements("j_username").Value = "ID" .elements("j_password").Value = "PW" '手動ならログインできるのにvba(submit)だと「既にログインしています」になる '.submit End With End Sub ****************************************************** vbaだと、すでにログインしていなくても「既にログインしています」になってしまいます。 何かわかる方、ご回答よろしくお願いします。

専門家に質問してみよう