C# - Html Agility Pack - 获取与文本内容匹配的选项标记值

时间:2017-03-30 16:25:54

标签: c# html-agility-pack bots

我正在使用Html Agility Pack为网站制作自动化应用程序。 网站上的每个产品都有不同的html代码,我试图从产品中获取该代码。

这是网站和示例产品:Click here

这是我目前的代码:

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

以下是示例产品的响应:

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

如果您不想查看网站,这就是项目的html代码:

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

我想要发生什么:

我输入商品的产品链接并选择尺码。如果找到所选尺寸,则仅返回该尺寸的尺寸代码。例如,我使用示例项并选择Medium,因此应用程序应返回33456。

1 个答案:

答案 0 :(得分:0)

使用LINQ和不区分大小写的匹配实现此目的的一种方法:

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