【Excel VBA】RedHatの自動ログインプログラム

このQ&Aのポイント
  • VBAでRedHatのホームページに自動ログインするプログラムを作成中です。
  • 実行後、ログイン画面でユーザ名またはパスワードが無効な旨のメッセージが表示されます。
  • 修正方法を教えていただけますか?
回答を見る
  • ベストアンサー

【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

質問者が選んだベストアンサー

  • ベストアンサー
  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.1

こんにちは 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, "j_username", "丸秘")   Call formText(objIE, "j_password", "丸秘")   Call tagClick(objIE, "button", "ログイン")      Set objIE = Nothing End Sub こうすると、どうなりますか?

caa29674
質問者

お礼

こんばんは。 回答いただき、有難うございました。 想定の動作を行うことが出来ました。

関連するQ&A

  • [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を制御すること自体慣れていないのですが、上記コードの問題点とできればコードをご教授いただけますでしょうか。 質問に不備不足等ございましたらご指摘ください。 ご面倒お掛けしますがよろしくお願いします。

  • VBAでIEのページを(メニュー選択)進める

    エクセルのVBAでIEのページを(メニュー選択)進める件ですが Dim tag As String Dim objtag As Object in_str = "新しく記事を書く" tag = "li" Set objtag = doc.getElementsByName(tag)(0) For Each objtag In IE.document.getElementsByTagName(tag)   If InStr(objtag.outerHTML, in_str) > 0 Then    Exit For   End If Next Debug.Print objtag.outerHTML objtag.Click For は 機能していて、Debug は <LI><A href="?mode=editor&amp;process=new">新しく記事を書く</A> で 止まっています。 で、叩く方法は?? Click が機能しないのですが objtag. の 後に お助け文字が全く出ませんので、行き詰りました。

  • 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制御 TABLE取得できません

    以下のコードを使用し、WEBページから「レース検索結果」のテーブルを取得しようとしました。 エラーは出ないのですがコード下から5行目で「OK」のメッセージボックスが 表示されるはずなのですが表示されませんでした。 ローカルウィンドウで確認したところ、summary「レース検索結果」が取得できていませんでした。 WEBページのソースには「レース検索結果」というsummaryは存在しているんですが・・・ どなたかご教授ねがいます OS:Windows 7 Excel:2007 InternetExplorer:11 Sub test() Const strURL As String = "http://db.netkeiba.com/?pid=race_search_detail" Dim objIE As New InternetExplorer Dim objDoc As HTMLDocument Dim objAllInput As Object Dim objInput As HTMLInputButtonElement Dim objAllTable As Object Dim objTable As HTMLTable With objIE .navigate strURL .Visible = True End With Do While objIE.Busy = True Or objIE.readyState <> 4 DoEvents Loop Set objDoc = objIE.document Set objAllInput = objDoc.getElementsByTagName("input") For Each objInput In objAllInput If objInput.ID = "check_Jyo_09" Then objInput.Checked = True Exit For End If Next Do While objIE.Busy = True Or objIE.readyState <> 4 DoEvents Loop For Each objInput In objAllInput If objInput.Value = "検索" Then objInput.Click Exit For End If Next Do While objIE.Busy = True Or objIE.readyState <> 4 DoEvents Loop Application.Wait (Now + TimeValue("00:00:10")) Set objDoc = objIE.document Set objAllTable = objDoc.getElementsByTagName("table") For Each objTable In objAllTable If objTable.Summary = "レース検索結果" Then MsgBox "OK" Exit For End If Next End Sub

  • VBA IE制御 テーブルコピー

    下記コードは、http://www.ken3.org/vba/backno/vba177.htmlからお借りしているものです。 (一部ヤフーのデザインに変更があったため、変更しています。) 実行してみると、本来7行4列である表が、1行目にすべて入り込んでしまいます。 見直してみても、間違ってはいないように見えるのですが、原因はどこかわかりますでしょうか? よろしくお願いいたします。 Sub ie_make_table_test() Dim objIE As Object 'IEオブジェクト参照用 Dim objTAG As Object 'TAGのオブジェクトを代入 Dim strURL As String 'URLの文字列 Dim strTAGNAME As String 'タグの名前保存用 Dim y As Integer Dim x As Integer Dim objTableItem As Object 'TABLE内のITEM検索用 Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True '文字列で指定したURLに飛ぶ strURL = "http://table.yahoo.co.jp/" 'ベースURL strURL = strURL & "t?c=2004&a=10&b=4&f=2005&d=10" '期間 strURL = strURL & "&e=14&g=d&s=4753.t&y=0&z=4753.t" '銘柄コードなど??? objIE.Navigate strURL 'URLへ '表示終了まで待つ Do While objIE.Busy = True DoEvents Loop '新規ブックを追加する Workbooks.Add 'No.177で修正ブックを新規に1つ作る '.document から.getElementsByTagName("TABLE")でオブジェクトを取り出す For Each objTAG In objIE.document.getElementsByTagName("TABLE") 'TABLEの中、テキスト文字で[値上がり率]があるか、子TABLEは無しかチェック If InStr(objTAG.InnerText, "値上がり率") > 0 _ And InStr(objTAG.InnerHTML, "TABLE") = 0 Then '値上がり率在り、TABLE無しか '新規シートを追加する Sheets.Add 'No.177で修正、新規シートを作成する 'カウンタの初期化 y = 0 '行カウンタ 'テーブル内のITEMでループする For Each objTableItem In objTAG.all strTAGNAME = objTableItem.tagName 'テーブル、タグ名 If strTAGNAME = "TR" Then y = y + 1 '行カウンタを+1 x = 1 '列カウンタを1(左端にする) End If '↓No.177でTHもセットするように変更 TD or THの時 If strTAGNAME = "TD" Or strTAGNAME = "TH" Then 'テキストデータをセットする Cells(y, x) = objTableItem.InnerText x = x + 1 '列カウンタを+1(次にする) End If Next End If Next End Sub

  • 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操作で こういう事ってできない?

    vba IE操作で こういう事ってできないのでしょうか? Dim objIE As InternetExplorer Sub test() Dim myObj As Object Dim myStr As String Set objIE = CreateObject("InternetExplorer.Application") objIE.Navigate "http://employment.en-japan.com/search/search_list.cfm?area=23&startRow=1&m=1&job=100000" objIE.Visible = True Call iewait For Each myObj In objIE.Document.all.tags("a") If myObj.outerText = "詳細を見る" Then myObj.Click Call iewait Debug.Print objIE.LocationName objIE.GoBack Call iewait End If Next objIE.Quit Set objIE = Nothing End Sub Sub iewait() Const READYSTATE_COMPLETE As Long = 4 Do Until objIE.ReadyState = READYSTATE_COMPLETE Loop Do While objIE.Busy = True DoEvents Loop End Sub このコードを実行して、 1ページ目の「詳細を見る」をクリックして、2ページ目のタイトルを抜き出し 1ページ目に戻り、次の「詳細を見る」をクリックして、2ページ目のタイトルを抜き出し・・・ と言う処理を繰り返したいのですが、 1回目のmyObj.Clickを通った後(Call iewaitの後かも?)に、 myObjの値が変数なしになってしまい、 2回目のIf myObj.outerText = "詳細を見る" Thenで 書き込みできません。(Error 70) になります。 1ページ目のリンクをクリックして、戻って また1ページ目のリンクをクリックして・・・ と言う処理をしたい場合どうすればよろしいでしょうか?

  • VBAによるIE操作について

    VBAでIEを操作し、PHPで開発されているMoodleというe-learningのサイトを操作しようと思っています。 概ね自分の思い通りに動くように作れたのですが、一点だけ問題が発生してしまいました。 (1)Submitのボタンを押して、(2)ページを読み込み待ち、(3)次のページのSubmitのボタンを押すという処理がうまく行きません。 エラーが出るのが、(3)のボタンを押したつもりになって、次の作業に行ってしまっていました。 (2)のページの読み込み待ちがうまく行かず、(3)のボタンを押したつもりになってしまい、次の作業でエラーを起こす、そんな次第です。 (2)のページの読み込みは下記の様に組んでます。 (4)の様に組んでも結果は一緒でした。 あとページが変わるまで、ボタンを押し続ける様に組むと、サーバーが落ちました。(ボタンが無くても押していることができるということだったので、試してみました。コードは残していなかった。) ちなみにボタンを押すコードは(5)です。 PHPの読み込みを待っていないとかそんな原因ではないかと思うのですが、解決できないでしょうか。 (2) Function IEwait(ByRef objIE As Object) Do While objIE.readystate <> 4 DoEvents Loop End Function (4) Do Until objIE.Busy = False WScript.sleep(250) Loop' (5) Public Function IEButtonClick(ByRef objIE As Object, buttonValue As String) Dim objInput As Object For Each objInput In objIE.document.getElementsByTagName("INPUT") If objInput.Value = buttonValue Then objInput.Click Exit Function End If Next End Function

  • vba ie操作 ボタンを押したい

    こんばんは。度々すいません。 またまたIE操作で詰んでしまいました。 以前、http://hiroba.chintai.net/qa7798169.htmlで質問してご回答いただいたのですが 違うサイトにも応用しようとしたところ、うまくいきませんでした。 https://www.jaccs.co.jp/icmclub/icm_login.htmlのログインボタンを押下したいのですが Sub test() Dim objIE As InternetExplorer Dim myObj As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.navigate "https://www.jaccs.co.jp/icmclub/icm_login.html" objIE.Visible = True Do While objIE.Busy = True Or objIE.readyState <> 4 DoEvents Loop For Each myObj In objIE.document.forms(0).all If TypeName(myObj) = "HTMLInputElement" Then If myObj.alt = "ログイン" Then Debug.Print myObj.alt myObj.Click Exit For End If End If Next Set objIE = Nothing End Sub をするとエラーにもならないけどボタンも押せません。 でもmyObj.Clickは通過しているようです。 なぜボタンを押せないのでしょうか? ご教授よろしくお願いします。

  • vbaでdcmxにログインしたいのですが、

    https://cfg.smt.docomo.ne.jp/auth/cgi/anidlogin?rl=https%3A%2F%2Fi.mydocomo.com%2Foid%2Flg%2Flogin%3Fmode%3Dlogin%26return_to%3Dhttps%253A%252F%252Fwww1.dcmx.jp%252Fsdys%252Fsp%252Fopenid%252Fopenid_entry_input.do%26user_check%3D54cad3f373419a99d7830f9af7d22273c953e635c3a362c39338ab841078b1134f2dcd5104b0c9233fd98caf2ece0ca70000000000000000&si=0001&authif=1 のページなのですが ******************************************************* Dim myObj As Object Dim objIE As InternetExplorer Sub DCMX() Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.navigate "https://cfg.smt.docomo.ne.jp/auth/cgi/anidlogin?rl=https%3A%2F%2Fi.mydocomo.com%2Foid%2Flg%2Flogin%3Fmode%3Dlogin%26return_to%3Dhttps%253A%252F%252Fwww1.dcmx.jp%252Fsdys%252Fsp%252Fopenid%252Fopenid_entry_input.do%26user_check%3D77016eccfd48449791dc76443259e46c30e0f39f25bc31902f48550e56b1176f73ec037e4b531368a8587aa1b5208c7d0000000000000000&si=0001&authif=1" Call IE_wait For Each myObj In objIE.document.all.tags("input") If myObj.Name = "authid" Then myObj.Value = "あああ@yahoo.co.jp" Exit For End If Next For Each myObj In objIE.document.all.tags("input") If myObj.Name = "authpass" Then myObj.Value = "あああ" Exit For End If Next For Each myObj In objIE.document.all.tags("input") If myObj.Name = "subForm" Then myObj.Click Exit For End If Next End Sub Sub IE_wait() Const READYSTATE_COMPLETE As Long = 4 Do Until objIE.readyState = READYSTATE_COMPLETE Loop Do While objIE.Busy = True DoEvents Loop End Sub ******************************************************* でログインボタンを押下でき、VBAではエラーにはならないのですが、 次のページで ******************************************************* エラー 大変申し訳ございません。 お探しのページまたはファイルが見つかりませんでした。(IN-E-1001) ******************************************************* となってしまいます。 DCMXではなく、 objIE.navigate "https://id.smt.docomo.ne.jp/cgi7/id/menu" のdアカウントなら問題なく次のページも表示されます。 なぜDCMXはエラーになってしまうのでしょうか?

専門家に質問してみよう