innerHTMLで要素を読み込む方法はどこにあるのか?

このQ&Aのポイント
  • 私は、証券会社のホームページに自動で入力するプログラムを解析しているのですが、body要素のHTML要素をdat変数に代入しようとしています。
  • しかしながら、画面のソースを見ても、bodyタグの中には該当するHTML要素が見つかりません。
  • そこで質問なのですが、innerHTMLで読み込むHTML要素はどこにあるのでしょうか?
回答を見る
  • ベストアンサー

innerHTMLについて

私は、証券会社のホームページに自動で入力するプログラムを解析しているのですが、下記コードはIEに表示されるログイン画面のbodyのHTML要素をdatに代入しようとしていると解釈していますが、当該画面のソースをみても、bodyのタグの間には、それらしいHTML要素は見つかりません。 innerHTMLで読み込もうとしているHTML要素はどこにあるものなのでしょうか。 Sub sess(objIE, dat, So1, S0, S1, S2, so2, URL02) 'SeesinID 読み込み URL02 = objIE.LocationURL dat = objIE.Document.body.innerHTML So1 = dat S0 = InStr(URL02, "bv") S1 = InStr(dat, "SessionID") S2 = InStr(dat, "BV_EngineID") So1 = Mid$(dat, S1, 39) so2 = Mid$(dat, S2, 45) URL02 = Left(URL02, S0 - 1) End Sub

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

  • ベストアンサー
  • dsuekichi
  • ベストアンサー率64% (171/265)
回答No.1

> bodyのタグの間には、それらしいHTML要素 「それらしいHTML要素」って?? ひょっとして「innerHTML」って名前の要素(属性orタグ)を探しているんじゃないですよね? 「innerHTML」って言うのは、「その要素の中(innner)にある全てのHTML要素」を参照するものです。 たとえば、そのページのBody部が <BODY><FORM MEHHOD=POST ACTION=XX><INPUT></FORM></BODY> なら、「body」の「innerHTML」は "<FORM MEHHOD=POST ACTION=XX><INPUT></FORM>" になります。

yoshio2
質問者

お礼

早速のご教授ありがとうございました。 そうすると、解析中のプログラムが参照しようとしているbodyは、膨大なものなのですが、その中にある要素すべてをdatに代入し、その中からSessionID、BV_EngineIDの位置を調べ、必要な文字列を書き出すことを実行しようとしている訳ですね。 ただ、質問文にも記載したのですが、SessionID、BV_EngineIDの文字列は、証券会社のログイン画面のソースには見あたらず、ログイン後の画面のソースならそれらが存在しているのが、どうにも理解できないのです。 ログインをしようとしているにもかかわらず、ログイン後の画面のソースに表示される文字列を読み込もうとしていることになる、と思えてしまうのです。

その他の回答 (1)

  • dsuekichi
  • ベストアンサー率64% (171/265)
回答No.2

> ログインをしようとしているにもかかわらず、 > ログイン後の画面のソースに表示される文字列を読み込もうとしていることになる その証券会社がどこなのかわかりませし、 そのプログラムで、セッションIDを読み込んで何をしようとしているのかわかりませんが・・ 「セッションID」とかは「ログイン」によって発生するのでは?? #「ログインを済ました=正当なユーザである」ことの証明に使うのでは・・・ どう言う用途のものを「セッションID」って呼んでいるのかわかりませんが・・・

yoshio2
質問者

お礼

重ねてのご教示誠にありがとうございます。 証券会社は、ホームページで発注する楽天証券やEトレードなどです。 ログインの方法はほとんど同じなため、ログインのプログラムは同じつくりになっています。 セッションIDは、ログイン後の発注において、発注者の同一性等の確認のために発注データを送信する際に同時に発信するものです。 下記のものは、ログイン後の画面ソースから抜き出したものです(一部分を削除しています。) <form name="HomeForm" method="post" action="/bv/app/home.do?BV_SessionID=@@@@14017.16548@@@@&BV_EngineID=cccjjkgefjgccfkmdfnjdgkg.0" onsubmit="return checkDoubleSend();">

yoshio2
質問者

補足

自己スレで申し訳ありません。 分かりました。 このスレで解析していたプログラムの流れでは、お尋ねしたコードは、ログイン後に実行するコードですので、証券会社からのホームページはログイン後の画面に切り替わっているため、セッションIDをinnerHTMLで他のHTML要素もろとも読み込んで、必要なものを切り出そうとしていることに、やっと気づきました。 私の不理解でお手数をお掛けし、本当に申し訳ありませんでした。 <質問者より>

関連するQ&A

  • VBAで文字の位置が正確に取得できない

    Excel2003のマクロで、URLを抜き出すマクロを作っているのですが、なぜかurl_endの値が正確に取得できません。何がいけないのでしょうか? 事象 url_endに格納される値がなぜか1376(くらいだったような・・)になってしまう。 url_startには1260が格納されており、<a href=の部分をきちんと取得している。 ソース Sub test() Dim objIE As Object Dim objTAG As Object Dim souce As String Dim url As String Dim url_start As String Dim url_end As String url_end = 1 Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = False objIE.Navigate "http://dir.yahoo.co.jp/" Do While objIE.Busy = True DoEvents Loop Application.Wait Time:=Now + TimeValue("00:00:02") url_start = InStr(url_end, objIE.Document.All(1).Innerhtml,"<a href=", vbTextCompare) url_end = InStr(url_start,objIE.Document.All(1).Innerhtml, ">", vbTextCompare) url = Mid(objIE.Document.All(1).Innerhtml, url_start, url_end) Cells(1, 1).Value = url End Sub

  • ie操作 フレームのURLがあってるか取得したい

    http://okwave.jp/qa/q8135136.html こちらのANo.2様のご意見を参考に、フレーム操作について調べているのですが、 サンプルを作ってみたのですが、うまくできません。 サンプルの内容としては、URLの中のフレームのオブジェクトを変数に格納し、 その格納したオブジェクトのURLをメッセージボックスに表示し、 欲しいURLかどうかを目視で確認したいのですが Dim objIE As InternetExplorer Sub Sample001() Dim myObj As Object Dim objFr As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.navigate "http://masaboo.cside.com/new_html1/ht_sun/frame02.htm" Stop Set objFr = objIE.document.frames.Item(1) MsgBox objFr.document.frames.LocationURL Set objIE = Nothing End Sub MsgBox objFr.document.frames.LocationURL だと、実行時エラー438になります。 MsgBox objFr.document.LocationURLもMsgBox objFr.LocationURLもダメでした。 私は何か根本的に勘違いをしているような気がしますが、格納したフレームのURLを表示する方法があれば教えてください。 ご教授よろしくお願いします。

  • VBAでソースから全てのURLを取得したい

    VBAでソースに書いてある全てのURLを取得したいのですが、現状では一部しか取得できません。 文字数制限にでも引っかかっているのでしょうか? どうすれば全てのURLを取得できるのか・・添削して頂けると or ヒントを教えて頂けると助かります。 よろしくお願いします。 (Excel2003を使用) Sub test() Dim objIE As Object Dim objTAG As Object Dim source As String Dim url As String Dim url_start As String Dim url_end As String Dim y As Long url_end = 1 y = 1 Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = False objIE.Navigate "http://dir.yahoo.co.jp/" Do While objIE.Busy = True DoEvents Loop Application.Wait Time:=Now + TimeValue("00:00:03") source = objIE.Document.All(1).Innerhtml Do While y < 10000 url_start = InStr(url_end, source, "<a href=", vbTextCompare) If url_start = 0 Then y = 10000 Else url_end = InStr(url_start, source, ">", vbTextCompare) url = Mid(source, url_start + 9, url_end - url_start - 10) Cells(y, 1).Value = url y = y + 1 End If Loop End Sub

  • WebBrowser1.Document.Body.InnerHtmlで得る sizset と sizset というのは何でしょう?

    vb2008のwebbrowser1で表示されているページを WebBrowser1.Document.Body.InnerHtml で取得しました。 もともとのHTMLと比較してタグが大文字になったり、タグ内の要素の順番が入れ替わったり、要素の"や'がなくなったりすることは確認しています。 気になるのはタイトルにある"sizset"と"sizset"が追加されている点です。 この2つの意味するところが判りません。 もともとのHTMLに存在しないものなので、消しちゃえばいいのですが…。 検索エンジンで調べても情報が見あたらず、何の目的で付加されるのか疑問です。 ご存知でしたらお教えください。 よろしくお願いします。

  • InnerHtmlで取得したページから複数のセルで該当の文字列がないか検索したい

    InnerHtmlでページを取得して、その中に文字列が含まれるか検索させるExcel VBAを作ろうと思っています。 悩んでいるのが検索する文字列がひとつのセルではなく、複数のセルになった場合どう処理するのかということです。 その範囲内でひとつのセルの文字列を検索し、次のセルの文字列へ、を範囲内で繰り返させるにはどうすれば良いでしょうか。 ~中略~ Dim mojiretsu As Long mojiretsu = ThisWorkbook.Sheets("キーワード").Range("A1:C10") If InStr(1, objIE.Document.Body.InnerHtml, mojiretsu) <> 0 Then MsgBox hiduke & "の含まれた記事があります。" Else End If これではセルがひとつだけ指定すれば上手く行くのですが、範囲にするとエラーになってしまいました。

  • webページのみのURLを取得したい

    Sub testa() Dim objIE Dim myStr Set objRE = CreateObject("VBScript.RegExp") For Each objIE In CreateObject("Shell.Application").Windows myStr = myStr & vbCrLf & objIE.LocationURL Next MsgBox myStr End Sub を実行するとフォルダのパスまで取得されてしまいますが WEBページのみ取得するにはどうすればいいですか? 正規表現で”「HTML」で終わる”と言う条件を付けくわえようとしましたが htmlで終わらないサイトもあるのでダメでした。

  • innerHTMLを使ってID要素の内容を変えたい

    innerHTMLを使ってID要素の内容を変えたいのですが、 下記のような使い方はできないのでしょうか? var changeTEXT = document.all("hoge2").innerHTML; できない場合、これに変わるようなものがありましたら教えていただけたら、うれしいです。 よろしくお願いします。 <html> <head> <script language="JavaScript" type="text/javascript"> <!-- var changeTEXT = document.all("hoge2").innerHTML;         function change1_ID(){ if(document.all){ document.all("hoge1").innerHTML = changeTEXT } if(document.getElementById){ document.getElemntById("hoge1").innerHTML = text1 } } //--> </script> <style type="text/css"> <!-- #hoge1 { margin: 0px; padding: 0px; height: 600px; width: 600px; } #hoge2 { margin: 0px; padding: 0px; height: 600px; width: 600px; } --> </style> </head> <body> <div id="hoge1" onclick="change_ID()"> ここの内容を変えたい</div> <div id="hoge2"> ここに入力されたHTMLの内容をhoge1の内容にしたい</div> </body> </html>

  • SubとEnd Subについて

    VBScriptのSubとEnd Subについて教えて下さい。 Dim LogonID Dim Password Dim URL Dim objIE Dim objINPUT Dim BodyText Dim AriNashi LogonID = "XXXXXXXX" Password = "XXXXXXXXX" URL = "https://login.yahoo.co.jp/config/login?.src=www&.done=http://www.ya..." 下記のようなプログラムはうまくいくのですがSubで囲むと何故か動作しなくなってしまいます。 使い方が間違っているのでしょうか? Set objIE = WScript.CreateObject("InternetExplorer.Application") objIE.Navigate URL objIE.Visible = True Do Until objIE.Busy = False WScript.sleep(250) Loop If objIE.document.URL = URL Then BodyText = objIE.document.body.innerTEXT AriNashi = InStr(1, BodyText, "Yahoo") If AriNashi > 0 Then Set objINPUT = objIE.document.getElementsByTagName("input") objINPUT(0).value = LoginID objINPUT(1).value = Password objINPUT(2).Click Else msgbox "NO" End If Else WScript.Echo " ダ メ" & Err.Description End If Set objIE = Nothing

  • VBAでソースの一番上から取得するには?

    Sub 取得() Dim objIE As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.Navigate "http://www.google.co.jp/" objIE.Visible = True Do While objIE.Busy = True DoEvents Loop Debug.Print objIE.Document.body.innerHTML Set objIE = Nothing End Sub これだと、 <DIVstyle="DISPLAY:none"id=cst></DIV><TEXTAREAstyle="DISPLAY:none" id=csi></TEXTAREA><SCRIPT>if(google.j.b)document.body.style.visibility='hidden';</SCRIPT> からしか取得されないのですが、 実際のソースを見ると <!doctype html><html itemscope="itemscope" itemtype="http://schema.org/WebPage"> で始まってます。 VBAソースのてっぺんから取得する方法を教えてください。 innerHTML以外を使うのでしょうか?

  • VB初心者です

    エクセルVB初心者です。 ウェブサイトから情報を取ろうと思いました。 <dt class="market zsg-fineprint"> <!-- Market Text & tooltip --> <!-- Non-Market Text & Tooltip --> Market <sup>&reg;</sup>: $1.18M</dt> <dt class="market zsg-fineprint"> から"1.18M"を取り込んで現在のセルから右に6個目のセルにコピペしようと思い、次のようなSubを作りましたが、うまく行きません。 Sub getMarket(objIE As Object) Dim MarketPosition As Integer Dim DollarPosition As Integer MarketPosition = InStr(1, objIE.Document, "Market") DollarPosition = InStr(marketPosition, objIE.Document, "$") ActiveCell.Offset(0, 6) = Mid(objIE.Document, DollarPosition + 1, 4) End Sub うまく動作させるためにはどうしたらよいでしょうか?