C#单击链接,如果关键字在HTML中匹配



我正在尝试在按下按钮时使用名称和颜色找到项目。我想拥有2个带有产品颜色和名称的文本框。在示例中,名称为"飞行西装",颜色是"林地迷彩"。该网站可能具有1多个具有相同名称和颜色的产品。

我还希望找到该项目,如果名称不确切。因此,如果名称是"飞行西装"

<article>
<div class="inner-article">
<a href="/shop/pants/hfr1oni4u/pty423v8i" style="height:150px;">
<img alt="54m1hrdynn4" height="150" src="//d17ol771963kd3.cloudfront.net/120999/vi/54M1hRDYnN4.jpg" width="150">
</a>
<h1>
<a href="/shop/pants/hfr1oni4u/pty423v8i" class="name-link">Flight Suit</a>
</h1>
<p>
<a href="/shop/pants/hfr1oni4u/pty423v8i" class="name-link">Woodland Camo</a>
</p>
</div>
</article>

我已经尝试过:

HtmlElementCollection links =  webBrowser1.Document.GetElementsByTagName("a");
foreach (HtmlElement link in links)
{
    if (link.InnerText.Contains(Keyword.Text))
        link.InvokeMember("Click");

}

使用相同的代码用于颜色和项目名称。问题在于,如果类别具有超过1项,其名称和颜色相同,则它会崩溃。它也只能同时正确检查它们,因为它们使用了相同的代码,除了不同的文本框。

最简单的基于您现在的代码,我会添加休息;声明以停止您进行循环并更改条件以检查两个值:

HtmlElementCollection links =  webBrowser1.Document.GetElementsByTagName("a");
foreach (HtmlElement link in links)
{
    var linkText = link.InnerText;
    if (linkText.Contains(Keyword.Text) ||
        linkText.Contains(ColorTextbox.Text))
    {
        link.InvokeMember("Click");
        break;
    }
}

您没有提供颜色文本框的命名方式,因此我为您发明了。您的代码崩溃的原因是由于一个事实引起的,一旦您单击 webbrowser组件中的链接,集合中的HTMLELEMENTS就不再有效,因为该页面正在重新加载。

<。