0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

VBAでedgeのhistoryファイルから閲覧履歴を取り出す

Last updated at Posted at 2024-09-01

edgeの履歴が取りたい

 ※ファイルをインストールしないで、無理くりデータを読み出す方法です。

 もともとedgeの履歴を取りたかったのですが、

Historyファイル場所
C:\Users\●ユーザー名●\AppData\Local\Microsoft\Edge\User Data\Default\History

 履歴が保存されているHistoryファイルは メモ帳で開くと冒頭に
SQLite format 3 ...

 と記載されており、SQLiteなので、しかるべきODBCドライバーもしくは.dllファイルをインストールして見ることができます。

この程度の正確性でよければ
ttps://tryhackme.com/r/room/iosanalysishttps://tryhackme.com/P

 私が試したのは、会社の制限でこれらができないときに、文字化けと戦いながら閲覧履歴の一部を見る方法です。
 なお、手動でとりあえず中身が見たいなら、Wordのファイル修復コンバーターでも同じような結果が得られます。

マクロで読み出す場合

Historyを書き出す
Sub history()
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    Dim textStream As Object
    Set textStream = fso.OpenTextFile("C:\Users\●ユーザー名●\AppData\Local\Microsoft\Edge\User Data\Default\History",1,False)
    Dim s_i As Byte
        For s_i = 0 To 200
            textStream.SkipLine
        Next s_i
    Dim regEx As Object
    Set regEx = CreateObject("VBScript.RegExp")
    regEx.Pattern = "https?://[\w!?/+\-_~=;.,*&@#$%()'[\]]+"
    regEx.IgnoreCase = True
    regEx.Global = True
    
    Dim textLine As String
    Dim matches As Object
    Dim match As Object
    
     Do Until textStream.AtEndOfStream
        textLine = ""
        textLine = textStream.readLine
            If InStr(textLine, "test.com") > 0 Then
                Set matches = regEx.Execute(textLine)
                    For Each match In matches
                        Debug.Print textStream.Line
                        Debug.Print match
                    Next match
            End If
            If textStream.Line = 500 Then Exit Do
     Loop
    textStream.Close
End Sub
    
    

詳細

 私はパソコンではあまり検索しないのに6年使ったPCで1万行ありましたので、199行しか出力できないイミディエイトウインドウには荷の重い仕事です。最初、固まったのかと思いました。
 履歴ファイルは行が多いのでinstrで該当サイトだけ出力しましょう。どうも、最後に開いたサイトは223か224行目辺りに来ることが多く、100行目辺りまではフォーマットがそれ以降と異なりエラーが頻出したので、201行目スタートにしています。例では500行までにしていますが、行も区切った方がよいと思います。

 どうやら、SQLiteはUTF-8という話なので、CreateObject("ADODB.Stream")
でCharsetをUTF-8にすればいけると思ったのですが、全くとりだせませんでした。
 なぜtextstreamなら部分的に文字化けしながらも取り出せるのかは謎です。
誤ってwriteしてHistoryファイルを壊さないよう、最初はHistoryファイルをデスクトップなどにコピーしてコードを作るのがよいと思います。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?