Я написал скрипт в vba для получения некоторых имен наборов с веб-страницы, и скрипт получает их соответственно до тех пор, пока не обнаружит ошибку где-то внутри выполнения.Это первый раз, когда я столкнулся с такой ошибкой.
То, что делает мой сценарий, - это получить все ссылки в Company Sets
, а затем отследить каждую из ссылок на один уровень глубиной, а затем, следуя всем ссылкам в Set Name
, перейти на другой уровеньглубоко и наконец разбираем стол оттуда.Я проанализировал имя PUBLISHED SET
, которое хранится в переменной bName
вместо таблицы, когда сценарий становится больше.Я использовал IE, чтобы получить PUBLISHED SET
, так как есть несколько лидов, которые вызывали проблемы с кодировкой.
Я искал во всех местах, чтобы найти какой-то обходной путь, но безуспешно.
Однако я натолкнулся на этот поток , где есть предложенное решение, написанное на vb, но не могу понять, как я могу сделатьон работает в vba.
Сценарий, с которым я пытаюсь:
Sub FetchRecords()
Const baseUrl$ = "https://www.psacard.com"
Const link = "https://www.psacard.com/psasetregistry/baseball/company-sets/16"
Dim IE As New InternetExplorer, Htmldoc As HTMLDocument
Dim Http As New XMLHTTP60, Html As New HTMLDocument, bName$, tRow As Object
Dim post As Object, elem As Object, posts As Object, I&, R&, C&
Dim key As Variant
Dim idic As Object: Set idic = CreateObject("Scripting.Dictionary")
With Http
.Open "GET", link, False
.send
Html.body.innerHTML = .responseText
End With
Set posts = Html.querySelectorAll(".dataTable tr td a[href*='/psasetregistry/baseball/company-sets/']")
For I = 0 To posts.Length - 7
idic(baseUrl & Split(posts(I).getAttribute("href"), "about:")(1)) = 1
Next I
For Each key In idic.Keys
With Http
.Open "GET", key, False
.send
Html.body.innerHTML = .responseText
End With
For Each post In Html.getElementsByTagName("a")
If InStr(post.getAttribute("title"), "Contact User") > 0 Then
If InStr(post.ParentNode.getElementsByTagName("a")(0).getAttribute("href"), "publishedset") > 0 Then
IE.Visible = True
IE.navigate baseUrl & Split(post.ParentNode.getElementsByTagName("a")(0).getAttribute("href"), "about:")(1)
While IE.Busy = True Or IE.readyState < 4: DoEvents: Wend
Set Htmldoc = IE.document
bName = Htmldoc.querySelector("h1 b.text-primary").innerText
If InStr(bName, "/") > 0 Then bName = Split(Htmldoc.querySelector(".inline-block a[href*='/contactuser/']").innerText, " ")(1)
R = R + 1: Cells(R, 1) = bName
End If
End If
Next post
Next key
IE.Quit
End Sub
Я получаю эту ошибку, указывающую на следующую строку после извлечения записей между 70 и 90:
bName = Htmldoc.querySelector("h1 b.text-primary").innerText
Ошибка выглядит следующим образом:
Automation Error: old format or invalid type library
Предлагаемое решение в связанном потоке, записанном в vb (невозможно преобразовать в vba):
'save the current settings for easier restoration later
Dim oldCI As System.Globalization.CultureInfo = _
System.Threading.Thread.CurrentThread.CurrentCulture
'change the settings
System.Threading.Thread.CurrentThread.CurrentCulture = _
New System.Globalization.CultureInfo("en-US")
Your code here
'restore the previous settings
System.Threading.Thread.CurrentThread.CurrentCulture = oldCI