MSXML2クラスを使用してWebサイトにログインし、スプレッドシートに価格をダウンロードしようとしています。私は、コードが製品を検索するために使用する製品番号のリストを持っています。そして、それはhtmlからprice要素を引き出すことになっています。getElementById FirstChildが実行時エラー91をスローする
私の問題は、「オブジェクト変数またはブロック変数が設定されていません」というエラーが発生し続けていることです。フォーラムダイビングで解決策が得られませんでした。
エラーがdocument.getElementById("prix").FirstChild.innerHTML = .responseText
Option Explicit
Function loginRematek()
Dim XMLHttpRequest As New MSXML2.XMLHTTP60
Dim xhr As MSXML2.XMLHTTP60
Dim cell 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=&[email protected]&motpasse=password&connexion=Sign in"
End With
Debug.Print XMLHttpRequest.responseText
'Get Element
Set xhr = New MSXML2.XMLHTTP60
For cell = 1 To 38
ItemNbr = Cells(cell, 1).Value
With xhr
.Open "GET", "https://rematek-energie.com/eng/pg/1/r/" & ItemNbr, False
.send
If .readyState = 4 And .Status = 200 Then
Set document = New MSHTML.HTMLDocument
document.getElementById("prix").FirstChild.innerHTML = .responseText
Else
MsgBox "Error" & vbNewLine & "Ready state: " & .readyState & _
vbNewLine & "HTTP request status: " & .Status
End If
Cells(cell, 2).Value = .responseText
End With
Next cell
End Function
で発生し、エラーがdocument.getElementById("prix").FirstChild.innerHTML = .responseText
で発生した私は、ターゲットにしようとしているHTMLはpanier_prix_326
値ですが、すべてのページにIDの変更、およびIなど複数のページをターゲットにしています。最初に定数prix
をターゲットにしてから、その要素の最初の子をターゲットにする方が良いと思いました。
<tr>
<td id="col-action">
<div class="prix">
<span id="panier_prix_326">99.40</span>
<div id="prix-detail">MSRP: 152.93$</div>
</div>
</td>
</tr>
'document'は、新しい空のドキュメントです。 idを持つ要素を含むことはできません。 'document.getElementById(" prix ")'は常に 'nothing'になります – litelite
これで、ページのHTMLの要素をターゲットにするにはどうしたらいいですか? – ActuallyJane