VBA IE自动化,在我导航到网站中的其他页面之前触发VBA中的某些操作

时间:2012-10-28 17:32:34

标签: vba excel-vba webautomation excel

我需要一个VBA代码,当网页框架即将导航到其他页面时,可以在VBA中执行某些操作。例如,当我点击某个链接时,按钮导航到其他页面我想拍摄的屏幕截图框架之前的页面导航到other.i已经完成了类似的事情,但它正在拍摄空白页面的屏幕截图,并且它只能在页面导航和对象变化时工作一次。请帮助我这个我一直在寻找这个,因为2周帮助我。

Sub pageLoad()
Set ie2 = GetIE("https://xyz.com")
Dim LinkFound As Boolean
Dim linkCollection
Dim IEfr0 As Object
i = 0
Dim Link As MSHTML.HTMLAnchorElement
'HTMLInputElement
Set wordapp = CreateObject("word.Application")
wordapp.Visible = True
Set wrdDoc = wordapp.Documents.Add

Set IEfr0 = ie2.document.frames(0).document
Set linkCollection = IEfr0.getElementsByTagName("a")
Do While ie2.Visible = True
For Each Link In linkCollection
If ie2.document.frames(2).document.readyState = "interactive"  Then
sai1
End If

If IEfr0.readyState = 1 Then
sai1
End If
Next
Loop
End Sub
Sub sai1()
Application.SendKeys "{PRTSC}"
wordapp.Selection.Paste
Do While ie2.Busy
Loop
End Sub

1 个答案:

答案 0 :(得分:1)

这是一个可能的解决方案。仅向您展示如何创建对象并指定BeforeNavigate2事件。这要求您引用Microsoft Internet Controls并创建IE对象(这不适用于后期绑定)。此代码必须位于对象模块(工作表或工作簿)中,因为您无法在标准模块中使用WithEvents。

Option Explicit
Dim WithEvents ie As InternetExplorer

Sub Example()
    Set ie = New InternetExplorer
    ie.Visible = True
    ie.Navigate "Your URL Here..."
    Do Until ie.ReadyState = READYSTATE_COMPLETE: DoEvents: Loop
End Sub

Private Sub ie_BeforeNavigate2(ByVal pDisp As Object, URL As Variant, Flags As Variant, TargetFrameName As Variant, PostData As Variant, Headers As Variant, Cancel As Boolean)
'Place code to run before navigating here.
End Sub 

您可能会看到的一个问题是,对于某些网站,由于在加载时额外调用资源,BeforeNavigate2事件实际上会多次触发。