• 締切済み

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

みんなの回答

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.2

こんな感じで取り合えず動きました。 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

fujiitk297
質問者

お礼

ありがとうございます。 1ファイルは上手くいきました、が2ファイル目以降が上手く表示されません。。

fujiitk297
質問者

補足

わかりやすい回答ありがとうございます。 と、質問内容が悪かったのか、1行づつの検索結果をそれぞれ別タブで表示したいです。 >以下4行の意図が分からないのでそのままです テキストファイルの1行が半角スペースのみで検索した場合、検索結果タブが表示されないためです。 と「objIE2.document.getElementById("q").Value = objFile.ReadLine」でオブジェクトが存在しませんとエラーが出てしまいます。 何度もすいませんがご協力お願い致します。

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.1

For ~ Next 、Do ~ Loop の中で Set ie = CreateObject("InternetExplorer.Application") ie.Visible = True してしまっているので、毎度毎度新たなIEが立ち上がってしまいます。 ループの外に出してみて。

fujiitk297
質問者

補足

うーん、やっぱりエラーが出てしまい、ファイル名も表示されないですね。。ちなみにNavigateをNavigate2に変えたのですが。。