我制作了一个宏,从 www.soccer24.com 网站上抓取信息,我想获取主页中每场比赛的所有详细信息。
我已经编写了代码并且它可以工作,但是当宏运行时,IE 连接突然丢失。我的意思是,宏必须进入同一页面内的 150 个不同网站,如下所示:
https://www.soccer24.com/match/Qo8j57nO/#赔率比较;1x2-赔率;第一半
每个链接中唯一改变的是 idbolded
宏转到网站,提取一些信息,然后转到另一个网站,提取信息,等等。
当宏大约到第40页时,IE连接就中断了,它不再工作了,我无法访问任何网站。当我关闭程序并再次打开它时,我恢复了互联网连接,但在进行 40 或 50 次迭代时总是一样,IE 连接中断并且无法打开任何网站。
就像 IE VBA 在“网站访问限制”上有“工作时间限制”一样,我不知道发生了什么。
我正在使用的代码是这样的:
一段代码1
一段代码2
所以它工作得很好,但最终在 150. 的 40 或 50 次迭代中,当它尝试访问一个网站时:
IE.导航“https://www.soccer24.com/match/" & Range("A" & i).Value 和 "/#odds-comparison;1x2-odds;1st-half"
互联网浏览器显示“无连接”并且不再工作。就像IE VBA有一个“工作时间限制”或“网站访问限制”
在网络抓取中,这应该是你最好的朋友:
Option Explicit
Public Sub SaveResponse(response As String) 'don't save as txt, but as html to easily see the structure
Dim fso As Object, oFile As Object
Dim filedir As String
filedir = CreateObject("WScript.Shell").specialfolders("Desktop")
Set fso = CreateObject("Scripting.FileSystemObject")
Set oFile = fso.CreateTextFile(filedir & "\response.html", Unicode:=True) 'Default is ANSI encoding, change to UNICODE
oFile.WriteLine response
oFile.Close
End Sub
对于 IE 自动化,它的使用方式如下:
SaveResponse myIE.document.body.innerHTML
它将把响应作为 HTML 文件保存在桌面上。您将能够看到错误发生之前最后收到的响应的样子。
IE 自动化可能会出现多种问题,但我最不希望发生的事情就是完全失去互联网连接。这需要更仔细地检查。 Chrome 是否可以同时打开此网站或任何其他网站,而 IE 却不能?
要解决一些 IE 问题,您可能需要IE.Quit
每 X 个请求。另外,在后台删除旧的 IE 实例有时会很有帮助,尤其是在处理内存泄漏时:
Public Sub TerminateIE()
Dim objWMIService As Object
Dim colItems, objItem
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * From Win32_Process")
On Error GoTo ErrHandler
For Each objItem In colItems
If objItem.Name = "iexplore.exe" Then objItem.Terminate
Next objItem
Exit Sub
ErrHandler:
MsgBox ("error " & Err.Name & "with description " & Err.Description & String(2, vbLf) & "Nothing object test for objItem returns: " & objItem Is Nothing)
End Sub
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)