我需要从网站获取数据
我正在使用SHDocVw.InternetExplorer
和MSHTML.HTMLDocument
来获取数据。
在获取每条记录并为每条记录创建新实例后,我正在使用set IE = Nothing
和IE.Quit
,但只要IE停止响应或崩溃,宏就会停止。
我只是想在IE崩溃并从下一个记录恢复时跳过该记录
是否可以忽略IE中的每个弹出窗口并从下一个记录中恢复以获取数据。
For Each Cell In Selection
URL = Cell.Value
Set IE = New SHDocVw.InternetExplorer
With IE
.navigate URL
.Visible = True
Do While .readyState <> READYSTATE_COMPLETE Or .Busy = True
DoEvents
Loop
Application.Wait (Now + TimeValue("00:00:05"))
Set Doc = .document
'*Fetch the Elements and Records by using getElementbyid*
End With
Set IE = Nothing
IE.quit
Next Cell
我也尝试过使用硒但面临同样的问题。 我只是想忽略如果IE崩溃或没有响应特定记录并获取下一个。 IE在2000条记录之后的某个时间崩溃,有时在100条记录之后崩溃。 我需要在一夜之间运行这个宏。 我正在使用IE 11和Excel 2010
答案 0 :(得分:0)
你当然可以对此进行改进,但这是基本启动方法。
请注意,我们不会继续创建和销毁IE的实例。我们创建一个并使用它来处理各种URL,然后在最后关闭它。
一个简单的On Error GoTo Label
用于处理失败。然后清除错误。标签将程序带到下一个循环。
有可能引入一个带超时的循环来尝试设置元素,即Do : On Error Resume Next : Set a = .document.getElemmentById("id") : On Error GoTo O : Loop While a Is Nothing
,但在循环中有一个超时子句,以避免永远不会结束循环。
总的来说,如果可能的话,确定崩溃的原因,并针对您的解决方案来处理。
Option Explicit
Public Sub test()
Dim IE As Object, doc As Object
Set IE = New SHDocVw.InternetExplorer
With IE
.Visible = True
Dim currentCell As Range, URL As String
Application.DisplayAlerts = False
On Error GoTo nextURL
For Each currentCell In Selection
URL = currentCell.Value
.navigate URL
While .Busy Or .readyState < 4: DoEvents: Wend
Application.Wait (Now + TimeValue("00:00:05"))
Set doc = .document
'Attempt to getElementByID
nextURL:
If Err.Number <> 0 Then Err.Clear
If IE Is Nothing Then Set IE = New SHDocVw.InternetExplorer
Next currentCell
End With
IE.Quit
Application.DisplayAlerts = True
End Sub