C # - Html Agility Pack - Obtener el valor de la etiqueta de opción que coincide con el contenido del texto

bots c# html-agility-pack

Pregunta

Estoy haciendo una aplicación de automatización utilizando Html Agility Pack para un sitio web. Cada producto en el sitio web tiene un código html diferente para el tamaño y estoy tratando de obtener ese código de un producto.

Este es el sitio web y un producto de ejemplo: Haga clic aquí

Aquí está mi código actual:

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

Aquí está la respuesta para el producto de ejemplo:

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

Si no desea consultar el sitio web, este es el aspecto del código html para un artículo:

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

Lo que quiero que suceda:

Ingreso el enlace del producto para un artículo y selecciono un tamaño. Si se encuentra el tamaño seleccionado, devuelva el código de tamaño solo para ese tamaño. Por ejemplo, uso el elemento de ejemplo y selecciono Medio, por lo que la aplicación debe devolver 33456.

Respuesta aceptada

Una forma de lograr esto utilizando LINQ y la coincidencia entre mayúsculas y minúsculas:

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



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué