我想使用 HtmlAgilityPack 從https://steamid.io/抓取內容,具體來說,我想抓取用戶“在線狀態”的狀態。
我可以使用 XPath 正確地抓取我需要的資訊,但是.. 每個用戶的組態檔都因 XPath 更改而有所不同,只是略有不同。
如果用戶的組態檔是“私有的”,則 XPath 是
/html/body/div/div[2]/div[2]/section/dl/dd[9]
如果用戶組態檔不是“私有的”,則 XPath 是
/html/body/div/div[2]/div[2]/section/dl/dd[9]/span
我如何能夠讓 HtmlAgilityPack 檢查我想要顯示哪個 div,因為我可以將自己的組態檔設定為私有和非私有,但顯然我需要相應地更改 XPath 才能顯示狀態。
如果我使用包含的 XPath/span并且用戶的個人資料是私有的,我會得到
System.NullReferenceException: 'Object reference not set to an instance of an object.'
如果我取消私有組態檔并使用/spanXPath 可以正常作業并向我展示我想要的內容。
這是我的整個代碼
'Online Status - from steamid.io
Dim curOnline = idIo.DocumentNode.SelectNodes("/html/body/div/div[2]/div[2]/section/dl/dd[9]/span")
'Dim curOnline2 = idIo.DocumentNode.SelectNodes("/html/body/div/div[2]/div[2]/section/dl/dd[9]")
For Each node In curOnline
onlinelbl.Text = node.InnerText
If node.InnerText.ToString().Contains("private") Then
onlinelbl.ForeColor = Color.Red
onlinelbl.Text = "Private"
ElseIf onlinelbl.Text.Contains("away") Then
onlinelbl.Text = onlinelbl.Text.Replace("away", "Away")
onlinelbl.ForeColor = Color.Orange
ElseIf onlinelbl.Text.Contains("online") Then
onlinelbl.Text = onlinelbl.Text.Replace("online", "Online")
onlinelbl.ForeColor = Color.Green
ElseIf onlinelbl.Text.Contains("offline") Then
onlinelbl.Text = onlinelbl.Text.Replace("offline", "Offline")
onlinelbl.ForeColor = Color.Red
End If
Next
```
uj5u.com熱心網友回復:
您可以使用以下命令簡單地查找 XPath 的存在/span:
Dim curOnline As HtmlNodeCollection
curOnline = idIo.DocumentNode.SelectNodes("/html/body/div/div[2]/div[2]/section/dl/dd[9]/span")
If curOnline Is Nothing Then
curOnline = idIo.DocumentNode.SelectNodes("/html/body/div/div[2]/div[2]/section/dl/dd[9]")
End If
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/473612.html
上一篇:在vb.net中使用類的問題
