C # - Html Agility Pack - Ottieni il valore del tag dell'opzione che corrisponde al contenuto del testo

bots c# html-agility-pack

Domanda

Sto creando un'applicazione di automazione con Html Agility Pack per un sito Web. Ogni prodotto sul sito ha un codice html diverso per dimensioni e sto cercando di ottenere quel codice da un prodotto.

Questo è il sito Web e un prodotto di esempio: fare clic qui

Ecco il mio codice attuale:

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

Ecco la risposta per il prodotto di esempio:

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

Se non si desidera controllare il sito Web, questo è l'aspetto del codice html di un articolo:

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

Quello che voglio succedere:

Inserisco il link del prodotto per un articolo e seleziono una taglia. Se viene trovata la dimensione selezionata, restituire il codice dimensione solo per quella dimensione. Ad esempio, utilizzo la voce di esempio e selezioni Medium in modo che l'applicazione restituisca 33456.

Risposta accettata

Un modo per ottenere ciò utilizzando LINQ e corrispondenza senza distinzione tra maiuscole e minuscole:

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



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché