【问题标题】:IE in vba code lose connectionvba代码中的IE失去连接
【发布时间】:2018-05-12 10:49:25
【问题描述】:

我制作了一个宏,可以从网站 www.soccer24.com 中获取信息,我想在主页中获取每场比赛的所有详细信息。

我已经编写了代码并且它可以工作,但是当宏运行时,突然,IE 连接丢失了。我的意思是,宏必须进入同一页面内的 150 个不同网站,如下所示:

https://www.soccer24.com/match/Qo8j57nO/#odds-comparison;1x2-odds;1st-half

每个链接中唯一改变的是粗体

宏进入网站,提取一些信息,然后进入另一个网站,提取信息,等等。

当宏在第40页时,IE连接中断,它不再工作,我无法访问任何网站。当我关闭程序并再次打开它时,我恢复了互联网连接,但是当它进行 40 或 50 次迭代时总是一样,IE 连接中断并且无法打开任何网站。

它就像 IE VBA 有“工作时间限制”或“网站访问限制”我不知道发生了什么。

我使用的代码是这个:

Piece of code 1

Piece of code 2

所以它工作得很好,但最终在 150 的 40 或 50 迭代中。当它试图访问一个网站时:

IE.Navigate "https://www.soccer24.com/match/" & Range("A" & i).Value & "/#odds-comparison;1x2-odds;1st-half"

Internet Explorer 显示“无连接”并且它不再工作。就像 IE VBA 有“工作时间限制”或“网站访问限制”

【问题讨论】:

  • 很难在没有看到任何代码的情况下提供帮助。您最好的选择是发布“破坏”的代码
  • 我会在两次通话之间添加一个“睡眠”命令,以防网站阻止您多次重复通话
  • 该网站没有阻止我,因为当连接丢失时......资源管理器不会访问任何网站。例如“google.com”,我不去......或任何其他。

标签: vba excel


【解决方案1】:

在网络抓取中,这应该是你最好的朋友:

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 问题,您可能需要每 X 个请求 IE.Quit。此外,在后台删除旧的 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

【讨论】:

  • 非常感谢!!!你救了我!我每 20 次迭代应用一次“TerminateIE”规则,效果非常好!非常感谢!
猜你喜欢
  • 1970-01-01
  • 2015-09-20
  • 2013-05-07
  • 2023-01-23
  • 2014-02-28
  • 2015-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多