Ich habe den folgenden vb.net-Code, der gut funktioniert und im Message-Box sehe ich die genaue Anzahl der Elemente, die ein ID-Attribut haben.
Dim hreftext = htmldoc.DocumentNode.SelectNodes("//*[@id]")
MsgBox(hreftext.Count)
jetzt ist das Problem, wenn ich das folgende auf dem Nachrichtenkasten verwende, gibt es mir Objektreferenz, die nicht auf eine Instanz eines Gegenstandes eingestellt wird, obwohl es 6 Elemente mit der Identifikation rso gibt
Dim hreftext = htmldoc.DocumentNode.SelectNodes("//*[@id='rso']")
MsgBox(hreftext.Count)
stimmt irgendetwas mit dem zweiten Ausschnitt nicht?
Nachdem Sie eine andere Ihrer SO-Fragen gelesen haben, scheint es, dass Sie versuchen, Google Shopping zu kratzen, und es versäumt haben, die heruntergeladene HTML-Quelle zu überprüfen, anstatt das generierte Dom.
Die ID "rso" erscheint nicht in der HTML-Quelle, weshalb Sie den Fehler erhalten. Google ist nicht scharf darauf, geschabt zu werden, und macht es sicherlich schwierig.
Um zu sehen, was ich meine, können Sie Ihrem Formular ein mehrzeiliges Textfeld hinzufügen und dieses anstelle Ihres aktuellen xpath-Codes hinzufügen:
TextBox1.Text = htmldoc.DocumentNode.OuterHtml
Hübsch ist es nicht !!
Um den Fall genauer zu untersuchen:
Versuchen:
Dim hreftext = htmldoc.DocumentNode.SelectNodes("//*[translate(@id,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')='rso']")
MsgBox(hreftext.Count)
Um einen beliebigen Knoten zu erhalten, der einer beliebigen Fallkombination von 'rso' entspricht