- 締切済み
VBScriptでファイルからgoogle検索
カレントディレクトリの.txtファイルを1行づつ読み込み、google検索したいのですが、ウィンドウが複数立ち上がってしまい1ウィンドウでタブで表示したいのですが上手くいきません。。と、テキストファイル名もタイトルタグで表示したいです。どなたかご存知でしたらご教授願います。以下、書きかけのソースになります。 ---------------------------------------------------------------------------------- use_ie Sub use_ie() 'Option Explicit 'On Error Resume Next Dim objFSO ' FileSystemObject Dim objFile ' ファイル読み込み用 Dim objWshShell ' WshShell オブジェクト If Err.Number = 0 Then Set objWshShell = WScript.CreateObject("WScript.Shell") Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") If Err.Number = 0 Then For Each FLO In objFSO.GetFolder(objWshShell.CurrentDirectory).Files path = FLO.Path If Right(path, 4) = ".txt" Then Set objFile = objFSO.OpenTextFile(path, 1) Do While objFile.AtEndOfStream <> True Set ie = CreateObject("InternetExplorer.Application") ie.Visible = True 'ie.Navigate "about:blank" 'ie.Document.Write "<title>path</title>" ie.Navigate "http://www.google.co.jp/" ',2048 '新規タブで開く waitIE ie ie.Document.getElementById("q").Value = objFile.ReadLine WScript.Sleep 100 ' 検索ボタンクリック ie.Document.all("btnG").Click waitIE ie strURL = "https://www.google.co.jp/" If ie.LocationURL = strURL Then ie.Quit Set ie = Nothing End If Loop objFile.Close End If Next Else WScript.Echo "ファイルオープンエラー: " & Err.Description End If Else WScript.Echo "エラー: " & Err.Description End If Set objFile = Nothing Set objFSO = Nothing Set objWshShell = Nothing Set ie = Nothing End Sub ' IEがビジー状態の間待ちます Sub waitIE(ie) Do While ie.Busy = True Or ie.readystate <> 4 WScript.Sleep 100 Loop WScript.Sleep 1000 End Sub
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- nicotinism
- ベストアンサー率70% (1019/1452)
こんな感じで取り合えず動きました。 VBSと同一フォルダ内にテキストファイル2個、 ファイル内には各々3行、IE8で行ってます。 ※投稿用にタブインデントの代わりに全角スペースを使用しています。 試される際は、タブOr半角スペースOr削除してからに。 'Option Explicit 'On Error Resume Next Dim objFSO ' FileSystemObject Dim objFile ' ファイル読み込み用 Dim objWshShell ' WshShell オブジェクト Dim objIE, objIE2 Dim colFile Dim fPath Set objWshShell = CreateObject("WScript.Shell") Set objFSO = CreateObject("Scripting.FileSystemObject") Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.navigate "http://www.google.co.jp/" For Each colFile In objFSO.GetFolder(objWshShell.CurrentDirectory).Files fPath = colFile.Path If Right(fPath, 4) = ".txt" Then Set objFile = objFSO.OpenTextFile(fPath, 1) Do While objFile.AtEndOfStream <> True objIE.navigate "http://www.google.co.jp/", CLng(&H800) '新規タブで開く waitIE (objIE) 'アクティブなタブの判定 ↓とても参考になったところ 'http://vbaie.blog111.fc2.com/ For Each objIE In CreateObject("Shell.Application").Windows() 'ダミーのテキストを代入 objIE.statusText = "test" If objIE.statusText = "test" Then Set objIE2 = objIE Exit For End If Next objIE2.document.getElementById("q").Value = objFile.ReadLine WScript.Sleep 1000 ' 検索ボタンクリック objIE2.document.all("btnG").Click waitIE (objIE2) '以下4行の意図が分からないのでそのままです ' strURL = "https://www.google.co.jp/" ' If ie.LocationURL = strURL Then ' ie.Quit ' Set ie = Nothing ' End If Loop objFile.Close End If Next Set objFile = Nothing Set objFSO = Nothing Set objWshShell = Nothing Set objIE = Nothing:Set objIE2 = Nothing ' IEがビジー状態の間待ちます Sub waitIE(IEobject) Do While IEobject.Busy = True Or IEobject.readystate <> 4 WScript.Sleep 100 Loop WScript.Sleep 1000 End Sub
- nicotinism
- ベストアンサー率70% (1019/1452)
For ~ Next 、Do ~ Loop の中で Set ie = CreateObject("InternetExplorer.Application") ie.Visible = True してしまっているので、毎度毎度新たなIEが立ち上がってしまいます。 ループの外に出してみて。
補足
うーん、やっぱりエラーが出てしまい、ファイル名も表示されないですね。。ちなみにNavigateをNavigate2に変えたのですが。。
お礼
ありがとうございます。 1ファイルは上手くいきました、が2ファイル目以降が上手く表示されません。。
補足
わかりやすい回答ありがとうございます。 と、質問内容が悪かったのか、1行づつの検索結果をそれぞれ別タブで表示したいです。 >以下4行の意図が分からないのでそのままです テキストファイルの1行が半角スペースのみで検索した場合、検索結果タブが表示されないためです。 と「objIE2.document.getElementById("q").Value = objFile.ReadLine」でオブジェクトが存在しませんとエラーが出てしまいます。 何度もすいませんがご協力お願い致します。