首页 > 解决方案 > 如何使用 Excel VBA 打开 URL 列表并将每个 URL 的屏幕截图保存在我的辅助监视器上

问题描述

我有一个 A1:A60 范围内的 URL 列表。我想打开每个,对网站进行截图,关闭网站并将截图保存为 jpg 格式。

我正在使用我的辅助显示器截屏,因为我已将其设置更改为纵向(而不是横向)以捕获冗长的文章。

我试图让它与下面的代码一起工作,但它返回一个空白的 jpg 图像。


Option Explicit

'Declare Windows API Functions
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal _
  bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

'Declare Virtual Key Codes
Private Const VK_SNAPSHOT = &H2C

Sub PrintScreen()

    Dim Address As String
    Address = Range("A1").Value
    ActiveWorkbook.FollowHyperlink Address, , True

    AppActivate "Google Chrome"
    keybd_event VK_SNAPSHOT, 1, 0, 0

    ActiveSheet.Paste

    Charts.Add
    Charts(1).AutoScaling = True
    Charts(1).Paste
    Charts(1).Export Filename:="C:\Users\user\Desktop\0coding\Excel (Visual Basic)\ClipBoardToPic.jpg", FilterName:="jpg"
    Charts(1).Delete

End Sub

标签: excelvbaweb-scrapingwebpage-screenshot

解决方案


因此,安装 selenium,确保 selenium 文件夹中的最新 chromedriver.exe 和 vbe > tools > references> 添加对 selenium 类型库的引用。以下循环工作表中的 url、屏幕截图并保存到指定位置。vba 实现中没有正式的方向设置,但您可以调整大小设置并在窗口之间切换。

Option Explicit
Public Sub Screenshots()
    Dim d As WebDriver, urls(), i As Long
    urls = Application.Transpose(ThisWorkbook.Worksheets("Sheet1").Range("A1:A2").Value) '<change this
    Set d = New ChromeDriver

    With d
        .AddArgument "--headless"
        .Start "Chrome"
        .Window.Maximize

        For i = LBound(urls) To UBound(urls)
            If InStr(urls(i), "http") > 0 Then
                .get urls(i)
                .TakeScreenshot.SaveAs ThisWorkbook.Path & "/screenshot" & str(i) & ".jpg"
            End If
        Next
        .Quit
    End With
End Sub

推荐阅读