gpt4 book ai didi

excel - VBA - 在 getElementsByClassName 中使用变量时出错

转载 作者:行者123 更新时间:2023-12-02 11:53:05 25 4
gpt4 key购买 nike

当我尝试使用变量来指定要使用类列表中的哪个元素时,出现“对象不支持此属性或方法”(运行时错误“438”)错误。

For tdNum = 0 To 1000
If document.getElementsByClassName("prod-somm")(tdNum).getElementById("no-piece").innerText = ItemNbr Then
Cells(cell, 2).Value = document.getElementsByClassName("prod-somm")(tdNum).getElementById("col-action").getElementsByTagName("span")(0).innerText
Exit For
End If
Next tdNum

HTML:

<table align="center" cellspacing="0" class="prod-somm">
<tbody>
<tr>
<td align="center" rowspan="2" class="prod-somm-image"></td>
<td class="prod-somm-texte" valign="top">
<a href="/eng/Balance-of-system/Fuse-and-holder/Wohner-31110.000/p/284" id="no-piece">
90-FT017
<span class="prod-somm-sepno"></span>
<span id="panier_fab_284">Wohner</span>
<span id="panier_nomanufact_284">31110.000</span>
</a>
<a href="/eng/Balance-of-system/Fuse-and-holder/Wohner-31110.000/p/284"></a>
</td>
</tr>
<tr>
<td id="col-action">
<div class="prix">
<span id="panier_prix_284">10.43</span>
</div>
</td>
</tr>
</table>

问题发生在If document.getElementsByClassName("prod-somm")(tdNum).getElementById("no-piece").innerText = ItemNbr then

目标是让程序沿着搜索结果列表运行,直到找到与我的 Excel 电子表格中的商品编号相匹配的商品编号,然后获取与该商品对应的价格。

编辑:这是完整的代码。可能会让我想做的事情更加清晰。

Option Explicit

Function priceGetRematek()

Dim XMLHttpRequest As New MSXML2.XMLHTTP60
Dim xhr As MSXML2.XMLHTTP60
Dim cell As Integer
Dim tdNum As Integer
Dim ItemNbr As String
Dim document As MSHTML.HTMLDocument

'Login to Rematek
With XMLHttpRequest
.Open "POST", "https://rematek-energie.com/eng/customer-login/account-authentication.php", False
.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
.send "name_se_connecter=se_connecter&zebra_honeypot_se_connecter=&courriel=rob@solacity.com&motpasse=password&connexion=Sign in"
End With

'Debug.Print XMLHttpRequest.responseText

'Get Price Element from HTML
Set xhr = New MSXML2.XMLHTTP60

For cell = 2 To 38

ItemNbr = Cells(cell, 1).Value

With xhr

.Open "POST", "https://rematek-energie.com/eng/pg/1/r/" & ItemNbr, False
.send
'Debug.Print xhr.responseText

If .readyState = 4 And .Status = 200 Then
Set document = New MSHTML.HTMLDocument
document.body.innerHTML = .responseText

For tdNum = 0 To 1000
If document.getElementsByClassName("prod-somm")(tdNum).getElementById("no-piece").innerText = ItemNbr Then
Cells(cell, 2).Value = document.getElementsByClassName("prod-somm")(tdNum).getElementById("col-action").getElementsByTagName("span")(0).innerText
Exit For
End If
Next tdNum

Else
MsgBox "Error" & vbNewLine & "Ready state: " & .readyState & vbNewLine & "HTTP request status: " & .Status
End If

End With

Next cell

End Function

最佳答案

方法getElementById仅适用于html文档,不适用于html元素。但由于您有重复的 id,因此最好的选择可能是使用 querySelector 获取目标元素。请注意,该标准强加了一个唯一的 ID,但在浏览器中并未强制执行。

下面是一个可以帮助您入门的示例:

' execute the query
Dim xhr As New MSXML2.XMLHTTP60
xhr.Open "GET", "https://rematek-energie.com/eng/pg/1/r/5", False
xhr.send

' load the html
Dim html As New HTMLDocument, html2 As Object
Set html2 = html
html2.write xhr.responseText

' scrap the html
Dim elements As MSHTML.IHTMLElementCollection
Dim element As MSHTML.IElementSelector
Dim link As IHTMLElement

Set elements = html.getElementsByClassName("prod-somm")
For i = 0 To elements.Length - 1
Set element = elements(i)

' get the link with id="no-piece"
Set link = element.querySelector("a[id='no-piece']")
If Not link Is Nothing Then

' display the product code
Debug.Print link.FirstChild.data

End If

Next

关于excel - VBA - 在 getElementsByClassName 中使用变量时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37487395/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com