C # - Pack d'agilité HTML - Obtenir la valeur de balise d'option qui correspond au contenu du texte

bots c# html-agility-pack

Question

Je réalise une application d'automatisation à l'aide de HTML Agility Pack pour un site Web. Chaque produit sur le site Web a un code html différent pour la taille et j'essaie d'obtenir ce code à partir d'un produit.

Ceci est le site web et un exemple de produit: Cliquez ici

Voici mon code actuel:

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;
}

Voici la réponse pour l'exemple de produit:

<option value="33455">Small
<option value="33456">Medium
<option value="33457">Large
<option value="33458">XLarge

Si vous ne souhaitez pas consulter le site Web, voici à quoi ressemble le code HTML d'un article:

<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>

Ce que je veux arriver:

J'entre le lien du produit pour un article et sélectionne une taille. Si la taille sélectionnée est trouvée, renvoyez le code de taille pour cette taille uniquement. Par exemple, j'utilise l'élément d'exemple et sélectionnez Moyen pour que l'application renvoie 33456.

Réponse acceptée

Une façon d'y parvenir en utilisant LINQ et la correspondance insensible à la casse:

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);


Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi