excel - 如何使用 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
解决方案
因此,安装 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
推荐阅读
- java - 尝试使用 Java.swing 创建一个 MenuBar,并创建了一个 JMenu() 对象,但它不允许我将它添加到框架中并且不知道为什么?
- jquery - 你如何在ajax中创建一个变量,对函数的其余部分是全局的
- mysql - MySQL INSERT 使用带有额外变量的 SELECT
- asp.net-mvc-5 - How to set up IIS 10 for MVC 5?
- android - 发现多个文件具有操作系统独立路径“META-INF/sdk_release.kotlin_module”
- networking - 如何从 ns3 中的 QueueDiscItem 中提取 IP 地址?
- python - 如何使 Google AI Platform 的 BASIC_GPU 规模层上的 GPU 对我的 tensorflow 程序可见?
- xcode - 在终端中使用 codesign 命令签名后,使用 Unity 构建的 macOS 应用程序在启动时挂起
- css - 如何强制 material-ui 生成!重要的 css 样式以防止 WordPress/Gutenberg css 样式冲突?
- java - BiometricPrompt.AuthenticationResult 中的 CryptoObject 始终为 null