Ich mache eine Automatisierungsanwendung mit Html Agility Pack für eine Website. Jedes Produkt auf der Website hat einen anderen HTML-Code für die Größe und ich versuche, diesen Code von einem Produkt zu bekommen.
Dies ist die Website und ein Beispielprodukt: Klicken Sie hier
Hier ist mein aktueller Code:
var webGet = new HtmlWeb();
var doc = webGet.Load(txtLink.Text);
HtmlNodeCollection collection = doc.DocumentNode.SelectNodes("//*[contains(@id,'size')]");
foreach (var node in collection)
{
var Size = node.InnerHtml.ToString();
txtLog.Text += Environment.NewLine + Size;
}
Hier ist die Antwort für das Beispielprodukt:
<option value="33455">Small
<option value="33456">Medium
<option value="33457">Large
<option value="33458">XLarge
Wenn Sie die Website nicht überprüfen möchten, sieht der HTML-Code für einen Artikel so aus:
<select name="size" id="size"><option value="33455">Small</option>
<option value="33456">Medium</option>
<option value="33457">Large</option>
<option value="33458">XLarge</option>
</select>
Was ich möchte:
Ich gebe den Produktlink für einen Artikel ein und wähle eine Größe aus. Wenn die ausgewählte Größe gefunden wird, geben Sie nur den Größencode für diese Größe zurück. Zum Beispiel benutze ich den Beispielartikel und wähle Mittel, damit die Anwendung 33456 zurückgeben sollte.
Eine Möglichkeit, dies mithilfe von LINQ und ohne Berücksichtigung der Groß- / Kleinschreibung zu erreichen:
var size = "xlarge";
var option = document
.GetElementbyId("size")
.ChildNodes
.Where(x => x.Name == "option"
&& x.NextSibling.InnerText
.IndexOf(size, StringComparison.OrdinalIgnoreCase) != -1)
.FirstOrDefault();
var result = option != null
? option.Attributes["value"].Value
: "not found";
Console.WriteLine("{0}: {1}", size, result);