利用規約の変更について

WSHでブラウザーのある指定URLを開くまで実現できました(下記の例)が、タブキーで移動する操作を実現させ、移動した部分の文字がある特定の文字の時、またそこのURLに移動させたいのですが、可能でしょうか。

Set objIE = CreateObject
("InternetExplorer.Application")
objIE.Navigate("about:blank")
strURL = "http://・・・/"
Set objShell = CreateObject("Wscript.Shell")
objShell.Run(strURL)

このQ&Aに関連する最新のQ&A

about:blank」に関するQ&A: about:blankと表示される

A 回答 (6件)

#5>実際のプログラムです


なるほど、
objIE とobjShell が別のプロセスなのが原因じゃないかと思います。
これだとobjIE を使う理由は無いような気がします。
画面の表示が完了しているなら
SendKeys を使って
BACKSPACE を送るか
ALT+←
で戻るが実現できると思います。
    • good
    • 0
この回答へのお礼

BLUEPIXY様へ

できました。{BS}でOKでした。ありがとうございます。

お礼日時:2006/03/28 20:24

>どうもタブキーでリンク先に移動してENTERを送っても履歴が残らずgobackが有効にならないようです。


ENTER を送ったときに画面は変移しているのですよね?
画面が表示されて
IEの←戻るのボタンが使えるようになっていれば
GoBack( ) は使えます。
#3でもやっているように、
While IE.Document.readyState <> "complete": Wend '読込待ち
とかして読込が完了してからでないと、GoBack( ) も使えません。
おそらくそういうことだと思いますが・

この回答への補足

while ・・・を追加して読み込みを完了していても(この前にwsh.sleep(6000)を挿入しております。)
エラーメッセージ(エラーを特定できません)は同じでした。
以下実際のプログラムです

Set objIE = CreateObject("InternetExplorer.Application")
objIE.Navigate("about:blank")
strURL = "http://・・・"

Set objShell = CreateObject("Wscript.Shell")
objShell.Run(strURL)
WScript.Sleep(3000)

for i= 1 to 16
objShell.SendKeys("{TAB}")
WScript.Sleep(100)
next
objShell.SendKeys("{ENTER}")
WScript.Sleep(6000)
While objIE.Document.readyState <> "complete": Wend
objIE.GoBack()

補足日時:2006/03/28 07:40
    • good
    • 0

#3>どうもタブキーでリンク先に移動しても履歴が残らずgobackが有効にならないようです。


??
#3の話ですか?
そうじゃないんですよね。
タブで移動した場合、クリックに相当するものとしてENTERを送ってやる必要がありますが、そういうことじゃないですか?

この回答への補足

説明が不正確で失礼しました。

どうもタブキーでリンク先に移動してENTERを送っても履歴が残らずgobackが有効にならないようです。

上記の意味です

補足日時:2006/03/27 21:49
    • good
    • 0

>「戻る」をWSHで実現する方法


勘違いしているかもしれませんが、簡単なサンプルを作ってみました。
動作としては、このQNo.2046770を開き、その他のプログラムをクリックしてカテゴリページを開き「戻る」を実行するというものです。
----------------------------------------------------------------
Dim IE
Dim Links, aLink

Set IE = WScript.CreateObject("InternetExplorer.Application")

'このページ
IE.Navigate ("http://okwave.jp/kotaeru.php3?qid=2046770")
IE.Visible=true '表示する
While IE.busy: Wend
While IE.Document.readyState <> "complete": Wend

Set Links =IE.Document.links
'全てのリンクを調べる
for each aLink in Links
if aLink.innerText = "その他(プログラミング)" then 'リンクの文字列を調べる
exit for '探していたリンクが見つかったらループを抜ける
end if
next
aLink.click 'このリンクをクリックする
While IE.Document.readyState <> "complete": Wend '読込待ち
IE.GoBack() '戻る
'IE.quit '終了

この回答への補足

BLUEPIXYさん、回答ありがとうございます。ただ、GOBACKでエラーになります。調べましたが、どうもタブキーでリンク先に移動しても履歴が残らずgobackが有効にならないようです。

補足日時:2006/03/27 21:01
    • good
    • 0

>移動した先の文字の取り出しがわかりません。


実現可能かどうか試してないのですが、一応いくつかアイデアはあるのですが、とても面倒です。
タブ移動とは直接関係なく
DOMを使って文字を取り出すのが良いと思います。
その場合は、WEBページの構造がわかっていないといけませんが。

ところで
タブキーによる移動とかをWSHから行おうとする目的はなんですか?
目で見て行う必要があるなら、直接キーボードから操作をすればいいし、
自動で行うなら、タブキーを使う必要がない(DOMで内容を読み出し特定の文字のリンクを取り出すことはできます)と思うのですが。

この回答への補足

BLUEPIXYさん、また回答いただきありがとうございます。DOMを利用する方法を調べてみます。タブキーを利用するのはIEの「戻る」と合わせてダウンロードするサイトを移動するためです。今、この「戻る」をWSHで実現する方法で困っているのですが、ご存じありませんか。よろしくお願いします。

補足日時:2006/03/26 07:50
    • good
    • 0

SendKeys を使ってタブやエンターを送ることでできるような気がします。


最初に開いたURLのページの構造が判っているのだったら、
IEからDOM的手法で表示されているページの部分を切り出すことも可能と思います。

この回答への補足

sendkeysがあるのを知りませんでした。これで一歩進めます。あとTABで移動したとき、移動した文字の取り出しがわかりません。

補足日時:2006/03/25 05:27
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QVBSを利用して、IEのタブを自動的に切り替え

VBSを利用して、IEのタブを自動的に切り替え続けるスクリプトを作成しています。

以下現状

手動でやる事
・作成したVBSファイルをダブルクリックして起動
・IEは常に画面の全面(アクティブウィンドウ)にしておく

VBSファイルの中身
set W = WScript.CreateObject("WScript.Shell")

do
WScript.sleep 30000
W.Sendkeys "^{TAB}"

loop

これでも正常に動くのですが、
ここにESCキーを押す事でプロセスを終了させるスクリプトを追記したいのですが、どのようにしたらよいでしょうか。

ご教授お願いします。

Aベストアンサー

こんばんは。

winAPIにGetAsyncKeyState関数があります。これを利用されてはどうでしょう。
ただ、VBSからwinAPIは直接呼び出す事が出来ません。
そこでExcelがインストールされているなら、Excel経由でwinAPIを呼び出し
Key入力の判定を行います。

Dim Esc
Dim ExcelApp
Dim cmd
Dim W
Dim Ret

Set W = WScript.CreateObject("WScript.Shell")
Set ExcelApp = WScript.CreateObject("Excel.Application")

Esc = 27 'Escのキーコード

Set ExcelApp = WScript.CreateObject("Excel.Application")
cmd = "CALL(""user32.dll"", ""GetAsyncKeyState"", ""JJ"", " & Esc & ")"

Ret=0

'Escケープが押されているとRetには0以外が返る
'IEの処理は入れていません。
Do While Ret = 0
WScript.sleep 100
Ret = ExcelApp.ExecuteExcel4Macro(cmd)

Loop

Wscript.Echo "End"
ExcelApp.Quit
Set ExcelApp = Nothing


これを実行して見てください。まずExcelが非表示で開きます。Escを押すと
endとメッセージが出るはずです。その後Excelを閉じExcelへの参照を解放します。
タスクマネージャーを開きながら実行すると確認しやすいです。

質問者さんのLoopは30秒間隔ですから、Escの検知は押しっぱなしでないと厳しいかもです。

うまく調整して組み込んでみて下さい。

それでは。

こんばんは。

winAPIにGetAsyncKeyState関数があります。これを利用されてはどうでしょう。
ただ、VBSからwinAPIは直接呼び出す事が出来ません。
そこでExcelがインストールされているなら、Excel経由でwinAPIを呼び出し
Key入力の判定を行います。

Dim Esc
Dim ExcelApp
Dim cmd
Dim W
Dim Ret

Set W = WScript.CreateObject("WScript.Shell")
Set ExcelApp = WScript.CreateObject("Excel.Application")

Esc = 27 'Escのキーコード

Set ExcelApp = WScript.CreateObject("Excel.Application")
cmd = "C...続きを読む

QVBS(WSH)で開いたIEのウィンドウがアクティブにならない

VBSでタイトルバーのみのIEウィンドウを開き、
SendKeyでtestと入力するスクリプトを作成しています。

ですが、開いたIEのウィンドウがアクティブにならず、
SendKeyがIEに送信されません。

VBSについては全くの初心者でして、ウィンドウがアクティブにならないのが
環境の問題なのか、プログラムの問題なのか判断できません。
どなたかご教授をお願いします。

IEのバージョンは8、OSはWinXPです。

以下、ソースです。

--------------------------------------------------

'タイトルバーのみのIEを起動する
Set WshShell = WScript.CreateObject("WScript.Shell")
Set objIE = WScript.CreateObject("InternetExplorer.Application")
objIE.Navigate("http://www.google.co.jp/")
objIE.MenuBar = False
objIE.StatusBar = False
objIE.ToolBar = False
objIE.AddressBar = False
objIE.Visible = True

'表示待ちループ
Do While objIE.Busy
WScript.Sleep 100
Loop

'[test]で検索
WshShell.SendKeys("test")
WScript.Sleep(100)
WshShell.SendKeys("{TAB}")
WScript.Sleep(100)
WshShell.SendKeys("{ENTER}")

--------------------------------------------------

VBSでタイトルバーのみのIEウィンドウを開き、
SendKeyでtestと入力するスクリプトを作成しています。

ですが、開いたIEのウィンドウがアクティブにならず、
SendKeyがIEに送信されません。

VBSについては全くの初心者でして、ウィンドウがアクティブにならないのが
環境の問題なのか、プログラムの問題なのか判断できません。
どなたかご教授をお願いします。

IEのバージョンは8、OSはWinXPです。

以下、ソースです。

--------------------------------------------------

'タイトルバーの...続きを読む

Aベストアンサー

プログラムでは無く、環境によるものです。

ただ、WSHを使ってアクティブウィンドウにキーを送る仕組みですが、WSHからIEを起動したら確実にアクティブになる補償は無いので、スクリプト内で明示的にアクティブにした方が安全です。

@ITで指定したプロセスIDをアクティブにしてキーを送る記事があったので、参考になると思います。

http://www.atmarkit.co.jp/fwin2k/tutor/cformwsh14/cformwsh14_01.html

ただし、
Set objIE = WScript.CreateObject("InternetExplorer.Application")

で起動した場合、objIEだけでプロセスIDが得られないので、別の検討が必要になります。
メニュー等非表示の指定を除けば、iexplorer.exeをExecコマンドで立ち上げることは可能でしょう。

プロセスIDまで取得してきっちり組みたい場合は、WSHにてWMIという仕組みを使えばプロセス情報は得られます。

http://www.upken.jp/kb/wmi_sample.html

検索ワードとしては、「WMI」「VBScript」「プロセス」「取得」あたりでいろいろ出ると思いますよ。

IE起動前にプロセス一覧を記録し、起動後に増えたIEのプロセスをうまく引ければ実現できそうですね。

プログラムでは無く、環境によるものです。

ただ、WSHを使ってアクティブウィンドウにキーを送る仕組みですが、WSHからIEを起動したら確実にアクティブになる補償は無いので、スクリプト内で明示的にアクティブにした方が安全です。

@ITで指定したプロセスIDをアクティブにしてキーを送る記事があったので、参考になると思います。

http://www.atmarkit.co.jp/fwin2k/tutor/cformwsh14/cformwsh14_01.html

ただし、
Set objIE = WScript.CreateObject("InternetExplorer.Application")

で起動し...続きを読む

QVBSでブラウザ上のテキストボックスに文字列を打ち込み、ボタンを押す方法

VBSでブラウザ上のテキストボックスに文字列を打ち込み、ボタンを押す方法を教えてください。
現在、下のような方法で行っているのですが応用が利かないので改善したいと思っています。

Set IE = CreateObject("InternetExplorer.Application")
Set WshShell = CreateObject("WScript.Shell")

IE.Visible = True
IE.Navigate("https://サイトのURL")

Do Until IE.Busy = False
WScript.Sleep 1000
WshShell.SendKeys "y"
Loop
'(セキュリティの警告が出るため)
WScript.Sleep 100
WshShell.SendKeys "{TAB}"
WScript.Sleep 100
WshShell.SendKeys "loginid"
WScript.Sleep 100
WshShell.SendKeys "{TAB}"
WScript.Sleep 100
WshShell.SendKeys "password"
WScript.Sleep 100
WshShell.SendKeys "{TAB}"
WshShell.SendKeys "{ENTER}"

操作したいページのソースの一部を抜粋すると下記のようになっています。

テキストボックス
<INPUT type="text" name="loginId" class="Necessary" size="20" maxlength="5" value="" tabindex="20">

ボタン
<INPUT class="button10" type="button" name="sentaku" value="認証" onClick="javascript:execute・・・・略

うまく操作できる方法を教えてください。
よろしくお願いします。

VBSでブラウザ上のテキストボックスに文字列を打ち込み、ボタンを押す方法を教えてください。
現在、下のような方法で行っているのですが応用が利かないので改善したいと思っています。

Set IE = CreateObject("InternetExplorer.Application")
Set WshShell = CreateObject("WScript.Shell")

IE.Visible = True
IE.Navigate("https://サイトのURL")

Do Until IE.Busy = False
WScript.Sleep 1000
WshShell.SendKeys "y"
Loop
'(セキュリティの警告が出るため)
WScript.Sleep 100
WshShell.Send...続きを読む

Aベストアンサー

set f=oIE.document.forms(0)
f.loginId.value="loginid"
f.password.value="password"
WshShell.SendKeys "{ENTER}"

テキスト領域でエンターするとsubmitになるので
エンターをsendkeysするのはありだとおもいますよ

Q起動済みのIEをハンドルから操作するには

既に起動済みのIEブラウザをWSH(VBS)などから、ハンドルを取得して
HTMLソース内のフォームに値をセット(Document forms elementなどで)
する事はできますでしょうか?
出来るとすれば、IEを捕まえて操作するには、どのようにすれば良い
でしょうか?

■補足
起動したIEは、自身のスクリプトからオブジェクトを生成したもの
では無く、ウインドウタイトルくらいしか解りません。

Aベストアンサー

とりあえず
Set ie = GetObject("", "InternetExplorer.Application")
Set ie = GetObject(, "InternetExplorer.Application")
のどちらかで取得できると思います。
Set ie = CreateObject("Shell.Application").Windows(0)
で取得する方法もあるらしいのですが、普通のフォルダもieとして認識してしまうため、純粋にieだけを取得する場合はチェックが必要だと思います。
取得したieでyahooで"おいしいラーメン"の検索結果の件数を表示します。
Sub sample()
Const READYSTATE_COMPLETE = 4
Dim ie As Object
Dim obj As Object
For Each obj In CreateObject("Shell.Application").Windows
If TypeName(obj.Document) = "HTMLDocument" Then
Set ie = obj
Exit For
End If
Next
If ie Is Nothing Then
MsgBox "ありません"
Exit Sub
End If
MsgBox "取得したieの情報" & vbCrLf & ie.LocationName & vbCrLf & ie.LocationURL & vbCrLf & TypeName(ie.Document)
ie.Navigate "www.yahoo.co.jp" 'yahooへ
Do While (ie.ReadyState <> READYSTATE_COMPLETE) Or ie.Busy: Loop '表示待ち
ie.Document.forms("sf1").elements("srchtxt").Value = "おいしいラーメン" '検索文字
ie.Document.forms("sf1").submit '検索
Do While (ie.ReadyState <> READYSTATE_COMPLETE) Or ie.Busy: Loop '表示待ち
If InStr(ie.Document.body.innertext, "に一致するウェブページは見つかりませんでした") > 0 Then
MsgBox "0件"
Else
MsgBox ie.Document.all("yschinfo").all(6).innertext & "件"
End If
Set ie = Nothing
End Sub

とりあえず
Set ie = GetObject("", "InternetExplorer.Application")
Set ie = GetObject(, "InternetExplorer.Application")
のどちらかで取得できると思います。
Set ie = CreateObject("Shell.Application").Windows(0)
で取得する方法もあるらしいのですが、普通のフォルダもieとして認識してしまうため、純粋にieだけを取得する場合はチェックが必要だと思います。
取得したieでyahooで"おいしいラーメン"の検索結果の件数を表示します。
Sub sample()
Const READYSTATE_COMPLETE = 4
Dim ie As Ob...続きを読む

QIE を開いてページ内のリンクをクリックする VB スクリプト

IE を開いて、ページ内のリンク (アンカー) をクリックして、リンク先のページを開くまでの VB スクリプトの書き方を教えてください。

Aベストアンサー

http://www.ken3.org/cgi-bin/group/vba_ie.asp
このページが参考になりますよ。

Q【VBA/HTML】IE画面内のページTabをクリックしたい

添付の画像に示す箇所のTabをクリックしたいです。
具体的HTMLの中身でいうと、下記HTMLソースにしめす●BBB●をクリックしたいです。
●BBB●に含まれる各タグの要素を取出しては.Clickをしましたが何も変化がないです。
取り出した各タグ要素は、<LI>、<SPAN>、<SPAN>、<EM>、<A>です。それぞれ独立に要素抽出して、.Clickを試みました。やり方としては、本要素が含む<DIV>又は<LI>から、さらに各種タグ要素を取り出してクリックしています。
(objIE.document.getElementsByTagName(tagname).Click)

何をすれば、クリックできるかヒントを頂きたいです。

----【HTML:タブが含まれるDIVタグ】----------------------------------------------------------------------------------------
<DIV class="x-tab-panel-header x-tab-panel-header-noborder x-unselectable x-tab-panel-header-plain" id=ext-gen151 style="WIDTH: 740px; MozUserSelect: none; KhtmlUserSelect: none" unselectable="on"><DIV class=x-tab-strip-wrap id=ext-gen154 style="WIDTH: 740px">

<UL class="x-tab-strip x-tab-strip-top" id=ext-gen156>

<LI class=" x-tab-strip-active" id=infoPageinfoPanelID__infoPage_myTab_object_changeNoticeDetailsTab _nodup="30815"><A class=x-tab-strip-close id=ext-gen159></A><A class=x-tab-right id=ext-gen160 href="#"><EM class=x-tab-left><SPAN class=x-tab-strip-inner><SPAN class="x-tab-strip-text ">●AAA●</SPAN></SPAN></EM></A></LI>

<LI id=infoPageinfoPanelID__infoPage_myTab_object_simplifiedImplementationPlanTab _nodup="30815"><A class=x-tab-strip-close id=ext-gen161></A><A class=x-tab-right id=ext-gen162 href="#"><EM class=x-tab-left><SPAN class=x-tab-strip-inner><SPAN class="x-tab-strip-text ">●BBB●</SPAN></SPAN></EM></A></LI>

<LI id=infoPageinfoPanelID__infoPage_myTab_object_changeNoticeProcessTab _nodup="30815"><A class=x-tab-strip-close id=ext-gen163></A><A class=x-tab-right id=ext-gen164 href="#"><EM class=x-tab-left><SPAN class=x-tab-strip-inner><SPAN class="x-tab-strip-text ">プロセス</SPAN></SPAN></EM></A></LI>

<LI id=infoPageinfoPanelID__infoPage_myTab_object_changeObjectsHistoryTab _nodup="30815"><A class=x-tab-strip-close id=ext-gen165></A><A class=x-tab-right id=ext-gen166 href="#"><EM class=x-tab-left><SPAN class=x-tab-strip-inner><SPAN class="x-tab-strip-text ">●CCC●</SPAN></SPAN></EM></A></LI>

<LI id=infoPageinfoPanelID__infoPage_myTab_sysnav_sysnavTab _nodup="30815"><A class=x-tab-strip-close id=ext-gen167></A><A class=x-tab-right id=ext-gen168 href="#"><EM class=x-tab-left><SPAN class=x-tab-strip-inner><SPAN class="x-tab-strip-text ">●DDD●</SPAN></SPAN></EM></A></LI>

<LI class=" x-tab-with-icon privateEditableTab" id=infoPageinfoPanelID__new_tab_action><A class=x-tab-strip-close id=ext-gen324></A><A class=x-tab-right id=ext-gen325 href="#"><EM class=x-tab-left><SPAN class=x-tab-strip-inner><SPAN class="x-tab-strip-text tab-add" qtip="XXXX "></SPAN></SPAN></EM></A></LI>

<LI class=x-tab-edge id=ext-gen157 _nodup="30815"><SPAN class=x-tab-strip-text></SPAN></LI>

<DIV class=x-clear id=ext-gen158></DIV>

<DIV class=x-dock-tab-drop-highlight id=ext-gen170 style="VISIBILITY: hidden"><IMG id=ext-gen171 style="POSITION: absolute" src="netmarkets/javascript/ext/dockPanel/pos.gif"></DIV></UL></DIV>

<DIV class=x-tab-strip-spacer id=ext-gen155></DIV></DIV>

添付の画像に示す箇所のTabをクリックしたいです。
具体的HTMLの中身でいうと、下記HTMLソースにしめす●BBB●をクリックしたいです。
●BBB●に含まれる各タグの要素を取出しては.Clickをしましたが何も変化がないです。
取り出した各タグ要素は、<LI>、<SPAN>、<SPAN>、<EM>、<A>です。それぞれ独立に要素抽出して、.Clickを試みました。やり方としては、本要素が含む<DIV>又は<LI>から、さらに各種タグ要素を取り出してクリックしています。
(objIE.document.getElementsByTagName(tagname).Click)

何をすれ...続きを読む

Aベストアンサー

画像から受ける印象としてはフレームが使われてそうですが、
取り敢えず、目的の要素を「マウスカーソル直下の要素を取得する」コードで、
親のWindowオブジェクトを返させて、そのDocumentがIE本体のDocumentと一致するなら、
フレームが使われていないと判断出来ます。

https://gist.github.com/kumatti1/452198b822eb590f4693

QVBScriptから指定URLを開く方法

 ある特定のWebページをVBScriptから開きたいのですが方法が探せませんでした。VBScriptからWebページを開く方法、もしくはhttp putを行う方法を教えてください。よろしくお願いします。

Aベストアンサー

こんなので、どうでしょうか?

Set objIE = Wscript.CreateObject("InternetExplorer.Application")
objIE.Navigate2 "http://www.goo.ne.jp/"
objIE.Visible = TRUE
Set objIE =Nothing

Qvbsで開かれた別ウィンドウを制御したい。

いつもお世話になっております。
VBSで
Dim oIE
Set oIE = CreateObject("InternetExplorer.Application")
oIE.Navigate("https://xxxx.jsp")

等でhpを自動的にクリックしたりして動かしています。

そのページ内にあるリンクをクリックすると、別ウィンドウで立ち上がるページがあるのですが、そのページを動かしたりする事は出来ますでしょうか。

よろしくお願いします。

Aベストアンサー

[回答番号:No.1・2] の DOUGLAS_ です。
 試しに、私のテストしたコーディングを掲載しておきます。
 OKWave のトップページを開き、右上の宣伝をクリックして開いたページの最初のリンクをクリックするという作業です。


Option Explicit
Dim myShell, SWC, oIE
Set myShell = CreateObject("Shell.Application")
SWC = myShell.Windows.Count
Set oIE = CreateObject("InternetExplorer.Application")
oIE.Visible = True
oIE.Navigate ("http://okwave.jp/")
Do While oIE.Busy Or oIE.ReadyState <> 4
'WScript.Sleep 100
Loop
oIE.document.Links.Item(12).Click
WScript.Sleep 5000
myShell.Windows.Item(SWC + 1).document.Links.Item(1).Click
Set oIE = Nothing: Set myShell = Nothing

[回答番号:No.1・2] の DOUGLAS_ です。
 試しに、私のテストしたコーディングを掲載しておきます。
 OKWave のトップページを開き、右上の宣伝をクリックして開いたページの最初のリンクをクリックするという作業です。


Option Explicit
Dim myShell, SWC, oIE
Set myShell = CreateObject("Shell.Application")
SWC = myShell.Windows.Count
Set oIE = CreateObject("InternetExplorer.Application")
oIE.Visible = True
oIE.Navigate ("http://okwave.jp/")
Do While oIE.Busy Or oIE.ReadySt...続きを読む

QIE操作で別タブ表示のHTMLソースの取得方法は?

VB.NET(VB 2010 Express)でIE9をWebBrowserコントロールではなく直接操作しています。

先にここで、あるサイトのトップページを表示し、それにユーザID、パスワードを入力し、ログオンボタンをクリックして次のページを別タブで表示する方法を教えて頂きました。

そこで、別タブに表示した次ページのHTMLソースを取得する方法として、下記のコードを教えて頂きました。

Dim objIE As Object

objIE = CreateObject("InternetExplorer.application")
objIE.Visible = True
objIE.Navigate("http://login.yahoo.co.jp/")
Do While objIE.Busy
System.Threading.Thread.Sleep(500)
Loop
objIE.Document.login_form.login.Value = "xxxxx" 'ユーザIDを入力
objIE.Document.login_form.passwd.Value = "yyyyy" 'パスワードを入力
objIE.Document.login_form.target = "_blank" '別ページに表示
objIE.Document.login_form.submit()

Dim Shell As Object
Dim win As Object
Dim newObjIE As Object

Shell = CreateObject("Shell.Application")

For Each win In Shell.Windows
If TypeName(win.document) = "HTMLDocument" Then 'このif文がTrueにならない
If win.document.URL = "http://yahoo.co.jp" Then
newObjIE = win
Exit For
End If
End If
Next

しかし、コメントのあるif文がTrueにならないようです。修正方法を教えて頂きたくよろしくお願い致します。

VB.NET(VB 2010 Express)でIE9をWebBrowserコントロールではなく直接操作しています。

先にここで、あるサイトのトップページを表示し、それにユーザID、パスワードを入力し、ログオンボタンをクリックして次のページを別タブで表示する方法を教えて頂きました。

そこで、別タブに表示した次ページのHTMLソースを取得する方法として、下記のコードを教えて頂きました。

Dim objIE As Object

objIE = CreateObject("InternetExplorer.application")
objIE.Visible = True
objI...続きを読む

Aベストアンサー

>If TypeName(win.document) = "HTMLDocument" Then

win.document の型が "HTMLDocument" と違うという事は理解されているのだから
Debug.Print(TypeName(win.document)) のようにしてどの型なのかを見て見れば
解りませんか?
"HTMLDocument" は、VB6.0 のコードの場合の型で、VB2010 の場合は、同じとは限りませんよ。
Dim win As Object のような遅延バインディング にしなかったら気が付くのが早かったのですが。

QVbscriptでIEのコントロール

以下の2つのサイトを参考にIEの自動処理を作っています。

「IE 画面を、スクリプトで操作する (パソコン便利ツール集)」
http://makoto-watanabe.main.jp/htmlDOM.html
「WSH JScriptを使いこなそう ~キーボード操作~」
http://3rd.geocities.jp/kaito_extra/Source/KeybordCtrl.html

そこで簡単なhtmlページを作り、javascriptの「confirm」を使って確認メッセージを表示しました。

この確認メッセージの「OK」か「キャンセル」をVbscriptの「SendKeys」を使ってコントロールしようとしてるのですが全く反応しません。

何がいけないのでしょうか?
もちろん確認メッセージはアクティブの状態です。

開いたIEのオブジェクトなどでコントロールしないといけないのでしょうか?

ちなみに、html内のjavascriptは次のようにしています。

<script Language="JavaScript">
<!--
confirm("よろしいですか?")
//-->
</script>

Vbscriptは次の通りです。

Set objWshShell = Wscript.CreateObject("Wscript.Shell")
Set objIE = CreateObject("InternetExplorer.Application")'IEの起動
objIE.Visible = True 'IEウィンドウを表示

siteurl = "http://テスト用のサイト/test.html"
objIE.Navigate2 siteurl'指定ページを開く

While objIE.ReadyState <> 4 Or objIE.Busy = True
WScript.Sleep 1000
Wend

objWshShell.SendKeys("{enter}")

objIE.Quit
Set objIE = Nothing
WScript.quit

以下の2つのサイトを参考にIEの自動処理を作っています。

「IE 画面を、スクリプトで操作する (パソコン便利ツール集)」
http://makoto-watanabe.main.jp/htmlDOM.html
「WSH JScriptを使いこなそう ~キーボード操作~」
http://3rd.geocities.jp/kaito_extra/Source/KeybordCtrl.html

そこで簡単なhtmlページを作り、javascriptの「confirm」を使って確認メッセージを表示しました。

この確認メッセージの「OK」か「キャンセル」をVbscriptの「SendKeys」を使ってコントロールしようとしてるのですが全く反応...続きを読む

Aベストアンサー

当方のWindows XP, Internet Exploret 8で、ローカルのハードディスク上のhtmlファイルを開いて試してみたところ、

objWshShell.SendKeys("{enter}")

の前に

objWshShell.AppActivate("Internet Explorer")
WScript.Sleep 100

とか

objWshShell.AppActivate("Web ページからのメッセージ")
WScript.Sleep 100

とか入れるとうまくいくようでした。

ただ、セキュリティの設定がよくわからずActiveXコントロールの警告を消せなかったのでその対策にもSendkeysを使ったりしているうえに、そもそも私がこの分野にはあまり詳しくないので、残念ながらあまり自信はありません。


人気Q&Aランキング

おすすめ情報