获取所有Mozilla Firefox的打开标签的网址

时间:2018-08-02 18:00:45

标签: vba url firefox

我知道这是一个令人讨厌的问题,因为以某种方式进行了很多尝试,但没有令人满意的解决方案。到现在为止。

是否有人拥有VBA代码,可以获取Mozilla的标签链接?

请,给我一些可以使用的代码。

谢谢。

2 个答案:

答案 0 :(得分:0)

稍作研究后,我找到了解决方案。 感谢朋友的建议,我考虑从浏览器历史记录中获取网址。 Mozilla将其保存在一个文件中,该文件始终会随着在浏览器中打开的每个新网站而更新,并且该文件位于以下位置:“ C:\ Users [用户名] \ AppData \ Roaming \ Mozilla \ Firefox \ Profiles \”,是默认文件夹。 在其中,Mozilla将历史记录保存在名为 places.sqlite 的文件中。这是一个具有免费访问权限的sqlite数据库(例如,每个人都可以使用“ sqlite浏览器”检查该数据库)。 Database structure

数据库由许多表组成,但是令我感兴趣的是 moz_places table attributes

我编写的代码遵循了这个想法,所以我使用Excel并只检索了数据库,其中包含了我要查找的所有URL。

Sub provaSQL()

'SQLite ODBC Driver
Dim conn As Object, rst As Object
Dim strSQL As String
Set conn = CreateObject("ADODB.Connection")
Set rst = CreateObject("ADODB.Recordset")

conn.Open "DRIVER=SQLite3 ODBC  Driver;Database=C:\Users\[username]\AppData\Roaming\Mozilla\Firefox\Profiles\h6mfz4zy.default\places.sqlite;"

strSQL = "Select * From moz_places order by last_visit_date DESC"

rst.Open strSQL, conn, 1, 1

Sheets(1).Range("A1").CopyFromRecordset rst
rst.Close

Set rst = Nothing: Set conn = Nothing

End Sub

显然,您需要安装 sqlite 3驱动程序,因为以前它已经存在,但是现在MS警惕可以自由访问的内容...

检查Mozilla的正确根目录(它会根据类型,版本等发生变化)。 并检查表的名称。可能也不同。

仍然有一个问题需要解决:数据库中没有任何属性可以指示选项卡是否处于打开状态,因此该过程无法识别Firefox浏览器中的活动URL。 由于必须手动在Firefox中打开标签页,因此我通过间接操作(通过代码)解决了问题:每次打开浏览器时,我都会先从Google网页开始,因此在研究了WEB之后,我打开了所有标签页需要时,我关闭Mozilla(使用WEB API代码)并关闭其中所有打开的标签页。因此,我可以将Google页面视为会话的开始,并且可以肯定所有以前的URL都属于我的研究,并且可以对其进行分析。也许所有这些都没有必要,但这是我找到它的最简单方法。

即使您可以避免,我也会添加此例程。

Option Explicit

Global r As Long

Private Declare Function EnumWindows Lib "user32" _
   (ByVal lpEnumFunc As Long, _
    ByVal lParam As Long) As Long

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Declare Function GetClassName Lib "user32.dll" Alias "GetClassNameA" ( _
     ByVal hwnd As Long, _
     ByVal lpClassName As String, _
     ByVal nMaxCount As Long) As Long

Private Const WM_CLOSE = &H10
Private Const WM_QUIT = &H12

Private Target As String
Public TargetOpen As Boolean

Function EnumWindowsProc(ByVal hwnd As Long, ByVal lParam As Long) As Long ' {
    Dim WindowText  As String, sMess As String
    Dim windowClass As String * 256
    Dim retVal      As Long
    Dim l           As Long

    On Error GoTo errori
    retVal = GetClassName(hwnd, windowClass, 255)
    windowClass = Left$(windowClass, retVal)
    'Cells(r, 1) = windowClass
    If InStr(1, windowClass, "Mozilla") > 0 Then
        TargetOpen = True
        SendMessage hwnd, WM_CLOSE, 0, 0
    End If

    r = r + 1
  '
  ' Return true to indicate that we want to continue
  ' with the enumeration of the windows:
  '
    EnumWindowsProc = True
Exit Function
errori:
sMess = MsgBox("Errore n. " & Err.Number, " - " & Err.Description)
Resume Next
End Function

Sub main()
    r = 1
    Call EnumWindows(AddressOf EnumWindowsProc, ByVal 0&)
End Sub

欢迎提出任何建议或改进。

答案 1 :(得分:-1)

我从来没有这样过!这似乎是一个很奇怪的问题,但无论如何我对此还是很感兴趣。从下面的uRL中查看视频演示,看看它能满足您的需求。

https://www.youtube.com/watch?v=A7kJ6mp53p4

基本上,工具>选项>使用当前页面(这将在所有选项卡中提供所有URL)。然后,复制/粘贴wot Word,并基于“ |”进行解析字符(即Find ='|'; Replace ='^ p')。现在,您应该拥有了所需的一切,甚至不用碰V​​BA的任何一行。

此外,这是使用IE的VBA解决方案。我认为很难从Excel控制Mozilla。由于IE和Excel都属于Microsoft系列,因此它们集成得很好。 Microsoft系列之外的其他技术并不总是能很好地集成。

Sub getALLBrowsers()
    Dim mainWorkBook As Workbook
    i = 2

    Set objShell = CreateObject("Shell.Application")
    Set objAllWindows = objShell.Windows
    Set mainWorkBook = ActiveWorkbook

    For Each ow In objAllWindows
        If (InStr(1, ow, "Internet Explorer", vbTextCompare)) Then
            mainWorkBook.Sheets("Sheet1").Range("A" & i) = ow
            mainWorkBook.Sheets("Sheet1").Range("B" & i) = ow.Hwnd
            mainWorkBook.Sheets("Sheet1").Range("C" & i) = ow.Document.Title
            mainWorkBook.Sheets("Sheet1").Range("D" & i) = ow.locationURL
            i = i + 1
            'MsgBox ow.Hwnd & "  " & ow & "   " & ow.locationURL & "  " & ow.Document.Title
        End If
    Next
End Sub