ブラウザに表示されている内容をテキストファイルにしたい

解決


しげちお  2005-06-08 11:31:09  No: 122351

ブラウザで表示されているデータをテキストファイルにしたいのですが、
どうやって読み込んだら良いでしょうか?

プロセスIDの取得などまでは出来たのですが、その先がわかりません。
        SendKeys.Send("{F10}")
        SendKeys.Send("E")  ...
などでと思ったのですが、全てを選択をした時の反転状態の解除の仕方がわからず、
(そのままにしておくのは都合が悪いので)
他の方法を探し始めました。

テキストを丸ごと変数に代入したり、クリップボードに入れることができれば、あとはなんとかなりそうなのですが、
検索でもいろいろ調べては見たのですが、答えが見つけられませんでしたので教えて頂きたいです。お願いします。


魔界の仮面弁士  2005-06-08 12:40:07  No: 122352

> ブラウザで表示されているデータをテキストファイルにしたいのですが、
こんな感じかな……。
起動中のIEを列挙して、その中身を拾い出してみました。

手抜き実装なので、フレームを使ったページには対応させていません。
(個々のフレーム内の情報まで拾うと、サンプルの見通しが悪くなりますし)

'--------------------------------------
Option Strict On
Imports System.IO
Imports System.Runtime.InteropServices
Module Module1

  Sub Main()
    '結果を出力するフォルダ
    Dim WorkFolder As String = "C:\TextFiles\"
    Directory.CreateDirectory(WorkFolder)

    '現在起動中の InternetExplorer を列挙する
    Dim Shell As Object = CreateObject("Shell.Application")
    Dim Windows As Object = CallByName(Shell, "Windows", CallType.Method)
    For I As Integer = 0 To CInt(CallByName(Windows, "Count", CallType.Get)) - 1
      Dim Exp As Object = CallByName(Windows, "Item", CallType.Get, I)
      Dim Doc As Object = CallByName(Exp, "Document", CallType.Get)
      'HTMLを表示している場合のみ処理する
      If Doc.GetType().Name Like "HTMLDocument*" Then
        '一時ファイルを生成
        Dim FilePath As String = Path.GetTempFileName()
        Dim FS As New StreamWriter(FilePath)

        'ファイルの先頭に、URLなどの情報を記録してみる
        FS.Write("URL:=")
        FS.WriteLine(CallByName(Exp, "LocationURL", CallType.Get))
        FS.WriteLine("出力日時:=" & Now.ToString("yyyy/MM/dd HH:mm:ss.fffffff"))

        'MSHTML経由でドキュメントの内容を取得
        Dim Body As Object
        Try
          Body = CallByName(Doc, "body", CallType.Get)
          FS.Write(CallByName(Body, "innerText", CallType.Get))
        Finally
          If Not IsNothing(Body) Then
            Marshal.ReleaseComObject(Body)
          End If
          Body = Nothing
        End Try
        FS.Close()

        '一時ファイルを移動
        Dim FileName As String = Path.GetFileNameWithoutExtension(FilePath)
        File.Move(FilePath, Path.Combine(WorkFolder, FileName & ".txt"))
      End If
      Marshal.ReleaseComObject(Doc)
      Marshal.ReleaseComObject(Exp)
    Next
    Marshal.ReleaseComObject(Windows)

    'フォルダを開く
    CallByName(Shell, "Open", CallType.Method, WorkFolder)
    Marshal.ReleaseComObject(Shell)
  End Sub

End Module


しげちお  2005-06-08 13:04:35  No: 122353

魔界の仮面弁士さん。
こんなにまで至れり尽くせりなすばらしい回答をありがとうございます!!!!!

このままこれはこれで使いたくなってしまいそうなプログラムです!
感謝感激、すごくありがたく参考、使用させて頂きたいと思います。
ありがとうございました!


しげちお  2005-06-08 13:05:13  No: 122354

解決をチェックするのをわすれてしまいました。


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加