C # web browser with click and highlight

Before I leave and encode this, I thought I'd see if anyone knew about the existing open source constructors (or was paid).

I am looking for a browser control where users can view a web page and then select its elements and select once, I can get the div or id of the selected element.

Has anyone seen such a thing?

+5
source share
2 answers

Here's a rough version using the .NET WebBrowser control using Internet Explorer.

namespace WindowsFormsApplication1
{
    using System;
    using System.Collections.Generic;
    using System.Diagnostics;
    using System.Windows.Forms;

    public partial class Form1 : System.Windows.Forms.Form
    {
        private HtmlDocument document;

        private IDictionary<HtmlElement, string> elementStyles = new Dictionary<HtmlElement, string>();

        public Form1()
        {
            InitializeComponent();
        }

        private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            this.Text = e.Url.ToString();
            this.document = this.webBrowser1.Document;
            this.document.MouseOver += new HtmlElementEventHandler(document_MouseOver);
            this.document.MouseLeave += new HtmlElementEventHandler(document_MouseLeave);
        }

        private void document_MouseLeave(object sender, HtmlElementEventArgs e)
        {
            HtmlElement element = e.FromElement;
            if (this.elementStyles.ContainsKey(element))
            {
                string style = this.elementStyles[element];
                this.elementStyles.Remove(element);
                element.Style = style;
            }
        }

        private void document_MouseOver(object sender, HtmlElementEventArgs e)
        {
            HtmlElement element = e.ToElement;
            if (!this.elementStyles.ContainsKey(element))
            {
                string style = element.Style;
                this.elementStyles.Add(element, style);
                element.Style = style + "; background-color: #ffc;";
                this.Text = element.Id ?? "(no id)";
            }
        }
    }
}
+9
source

I had a similar need, and the source code was very useful. I would like to return the kindness of the original author.

. : HTML. , # , node.

, . , HTML .

, # , ?

. #. , # , (, Anchor , ).

:

(1) "complete complete" ( ) click :

        HtmlDocument htmlDoc = webBrowser.Document;

        _document = webBrowser.Document;

        //-- add our handler only once
        if (!_documentHandlers.Contains(_document))
        {
            _document.MouseOver += new HtmlElementEventHandler(document_MouseOver);
            _document.MouseLeave += new HtmlElementEventHandler(document_MouseLeave);

            mshtml.HTMLDocumentEvents2_Event iEvent;
            IHTMLDocument2 currentDoc = (IHTMLDocument2) webBrowser.Document.DomDocument;

            iEvent = (mshtml.HTMLDocumentEvents2_Event) currentDoc;
            iEvent.onclick += new mshtml.HTMLDocumentEvents2_onclickEventHandler(clickDocumentHandler);

            _documentHandlers.Add(_document);
        }

( CNN.com). '_documentHandlers' - HashSet, .

(2) . "" :

                mshtml.HTMLElementEvents2_Event iEvent;
                iEvent = element.DomElement as mshtml.HTMLElementEvents2_Event;
                if (iEvent == null)
                    return;
                iEvent.onclick += new mshtml.HTMLElementEvents2_onclickEventHandler(clickElementHandler);

" " :

                mshtml.HTMLElementEvents2_Event iEvent;
                iEvent = element.DomElement as mshtml.HTMLElementEvents2_Event;
                if (iEvent == null)
                    return;
                iEvent.onclick -= new mshtml.HTMLElementEvents2_onclickEventHandler(clickElementHandler);

(3) :

    private bool clickDocumentHandler(IHTMLEventObj pEvtObj)
    {
        IHTMLElement element = (mshtml.IHTMLElement)pEvtObj.srcElement;

        pEvtObj.cancelBubble = true;
        pEvtObj.returnValue = false;

        return false;
    }

    private bool clickElementHandler(IHTMLEventObj pEvtObj)
    {
        IHTMLElement element = (mshtml.IHTMLElement)pEvtObj.srcElement;

        pEvtObj.cancelBubble = true;
        pEvtObj.returnValue = false;

        return false;
    }

, "false", .

, .

, IHTMLElement onclick, , null.

-

+3

All Articles