从webbrowser1获取属性的值

时间:2015-08-02 10:08:57

标签: c# webbrowser-control getelementsbytagname getattribute

我有以下代码,用于提取Google搜索结果中的所有网址:

    private void button1_Click(object sender, EventArgs e)
    {
        HtmlElementCollection a = webBrowser1.Document.GetElementsByTagName("a");
        foreach (HtmlElement b in a)
        {
            string item = b.GetAttribute("href");
            if (item.Contains("url?q=")) 
            {
            listBox1.Items.Add(item);
                }
        }
    }

但是我需要更具体一点。

谷歌的Chrome元素检查员有这个,我需要访问此元素中的URL:

<cite class="_Rm">www.dicksmith.com.au/apple-<b>ipad</b></cite>

这个班级是&#34; _Rm&#34;,它在&#39; cite&#39;标记,我只需要该URL。

1 个答案:

答案 0 :(得分:0)

使用指定的&#39;类&#39;查找html元素和&#39;标记&#39;值。然后从InnerHtml中检索一个URL。

HtmlElement FindHtmlElement(string tag, Predicate<HtmlElement> predicate)
{
    try
    {            
        var elements = webBrowser1.Document.GetElementsByTagName(tag);
        foreach (HtmlElement element in elements)
        {
            if (predicate(element))
            {
                return element;
            }
        }
    }
    catch (Exception ex)
    {
        //Log.Error("Error on finding html element on {0}. Exception: {1}", _webBrowserBot.Url.ToString(), ex.Message);
    }

    return null;

}

private void button1_Click(object sender, EventArgs e)
{
    // search for <cite class="_Rm">www.dicksmith.com.au/apple-<b>ipad</b></cite>
    var element = FindHtmlElement("cite", (h) =>
    {
        return h.GetAttribute("class") == "_Rm";               
    });

    string url = "";
    if (element != null)
    {
        // retrieve url only
        int ix = element.InnerHtml.IndexOf("-<b>");
        if (ix > 0)
            url = element.InnerHtml.Remove(ix);

        // url obtained
        //...
    }
}