#html #excel #vba #web #web-scraping
#HTML #превосходить #vba #сеть #соскабливание паутины
Вопрос:
Я пишу код для автоматического заполнения некоторых веб-сайтов значениями ячеек:
Sub prueba() Dim oIE As InternetExplorer: Set oIE = New InternetExplorer Dim oDocument As HTMLDocument Dim ECICOR As HTMLSelectElement Dim i, j As Integer Dim x As Long oIE.Visible = True oIE.Navigate "http://sirem.eci.geci/smcfs/console/login.jsp" Do While oIE.readyState lt;gt; 4: DoEvents: Loop With oDocument Set oDocument = oIE.Document End With Call oDocument.parentWindow.execScript("window.parent.sc.postDummyFormForWindow('/smcfs/console/inventory.search');", "JScript") Set ECICOR = oDocument.getElementById("enterpriseFieldObj") ECICOR.Focus ECICOR.Click ECICOR.Value = "ECICOR" ECICOR.FireEvent ("onChange") oDocument.getElementsByClassName("unprotectedinput")(0).Value = Cells(i, 1) oDocument.getElementsByTagName("a")(0).Click oDocument.getElementsbyClassName("evenrow")(1).click End Sub
Итак, моя проблема в том, что моя программа ничего не делает после последней строки кода, и я не знаю, в чем проблема, потому что она работала раньше.
Здесь вы можете увидеть HTML-код:
lt; lt;TR class=evenrowgt;lt;TD class=checkboxcolumngt;lt;INPUT type=checkbox value= name=EntityKey oldChecked="false"gt; lt;INPUT type=hidden value=000000000152030052 name=ItemID_1gt; lt;INPUT type=hidden name=UOM_1gt; lt;INPUT type=hidden name=PC_1gt; lt;INPUT type=hidden value=ECICOR name=OrgCode_1gt; lt;/TDgt; lt;TD class=tablecolumngt;lt;A onclick="javascript:showDetailFor('');return false;" href=""gt;000000000152030052lt;/Agt; lt;/TDgt; lt;TD class=tablecolumngt;lt;/TDgt; lt;TD class=tablecolumngt;lt;/TDgt; lt;TD class=tablecolumngt;001097578527174lt;/TDgt;lt;/TRgt;"gt;
Как я могу найти решение?
Комментарии:
1. «код всегда выдает ошибку» — почему вы не говорите нам, в чем ошибка?
2. это ошибка 438. Значение в ячейках(1,1) представляет собой строку.
3. …и что означает «Ошибка 438»? Это код ошибки HTTP? Код ошибки во время выполнения VBA? Это может быть даже интерпретация кода остановки BSOD… Когда люди спрашивают вас об ошибках, вы должны дословно повторить все сообщение со своего компьютера, а не урезать или сократить его.
4. Ошибка 438 означает, что «Объект не поддерживает это свойство или метод».
5. Ошибка 438 во время выполнения: Объект не поддерживает это свойство или метод, извините
Ответ №1:
document.getElementsByClassName()
вернет массив, а не an Element
. Если у вас есть только один элемент с unprotectedinput
классом, то вам нужно получить первый элемент в массиве, возвращаемый document.getElementsByClassName()
.